GhostyMsg
Anonym chatt i realtid. Du skapar ett rum, delar en länk, och pratar. När alla gått är rummet borta.
Om projektet
Jag byggde GhostyMsg åt Kristian i Finland. Han ville ha ett ställe där man kan snacka utan att något sparas. Inga konton, ingen historik. Man skapar ett rum, delar en länk och ett lösenord, sen pratar man. När alla har lämnat rummet finns det inte kvar.
Den är inte färdig. Jag jobbar fortfarande på den och lägger till saker efter hand. Men grunden står: rummen funkar, chatten går i realtid och krypteringen är på plats.
Hur det funkar
Du skapar ett privat rum med ett namn, ett smeknamn och ett lösenord. Du väljer också hur länge det ska leva, allt från fem minuter till ett dygn. Sen skickar du länken till dem du vill ha med. Inne i rummet går meddelandena direkt, och varje meddelande ligger bara framme en liten stund innan det tonas bort. Det finns ingen historik att scrolla i, för det är ju hela grejen.
Krypteringen
Det här är den delen jag la absolut mest tid på. Jag ville inte att man bara ska behöva lita på mitt ord, utan att det ska vara privat på riktigt.
Allt krypteras i webbläsaren innan det skickas. För nyckelutbytet använder jag ECDH, P-256 som grund och X25519 när webbläsaren klarar det. Nycklarna räknas fram med HKDF (SHA-256), och själva meddelandena krypteras med AES-256-GCM. I grupprum kör jag sender keys, så att ett meddelande bara krypteras en gång istället för en gång per person.
Jag har inte byggt någon egen krypto, utan använt webbläsarens eget Web Crypto som redan är beprövat. Servern ser aldrig vad som skrivs, bara sådant som vilket rum det gäller. Nycklarna finns bara i minnet medan du är inne, inget skrivs till disk. Och när någon går med eller lämnar byts nycklarna ut, så att gamla meddelanden inte går att låsa upp i efterhand.
Tekniken
Servern är i Node.js med Express, och realtiden går via WebSockets. Jag använder helmet för säkerhetsheaders, rate limiting för att hålla borta skräp, och korta slumpade id:n för rummen.

