This application demonstrates a simple end-to-end encrypted chat
built with JavaScript and WebSockets. The server forwards messages
between clients but never has access to the encryption keys or
plaintext messages.
Before communication begins, users establish a secure session using
ML-KEM-768, a post-quantum key encapsulation mechanism standardized
by NIST. This allows one user to encapsulate a randomly generated shared
secret using the other user's public key. The resulting ciphertext is
transmitted across the network, allowing only the holder of the corresponding
private key to recover the same shared secret.
The shared secret is hashed and converted into an AES-256-GCM
encryption key. Every chat message is encrypted in the browser
before transmission and decrypted only by the intended recipient.
The purpose of this project is to illustrate the principles of
post-quantum key exchange, symmetric encryption, and secure client-side
communication in a modern web application.