Key exchange
X25519 + ML-KEM-768
Hybrid: an attacker has to break both. ML-KEM is the NIST standard FIPS 203.
Encryption demo live Wallet delivery in devnet beta
Qapsule encrypts files in your browser with hybrid post-quantum cryptography. Only the recipient's key opens them, and they're built to stay closed even if someone stores them until quantum computers can attack them.
Real ciphertext, sealed in your browser when this page loaded
How it works
You drop a file or write a message. Nothing leaves your device while it's still readable.
A new file key is wrapped with the recipient's public key using X25519 and ML-KEM-768 together. An attacker has to break both.
The file is encrypted with ChaCha20-Poly1305 in your browser. The file name goes inside, and one changed bit makes it fail to open.
The sealed file goes to public storage, and a signed record on Solana reaches the recipient's inbox. Devnet beta for now.
The problem
Anyone can copy encrypted data now and keep it. That attack is called harvest now, decrypt later. Waiting costs little, and sensitive files can stay sensitive for decades.
Classical key exchange only
The contract is signed. Payment goes out Friday.
Shor's algorithm could break the key exchange, so the old copy could be opened.
Qapsule's hybrid
k7Vq2mXe+Rb0/zNf8sUa1YcHt4LwP9dGj3oKiE6nTr==
An attacker would also have to break ML-KEM-768, which was designed to resist that attack.
An illustration of the idea, not a measurement.
Live demo
This is the actual hybrid cryptography, running on your device. This page's security policy blocks it from making network requests, so what you enter isn't sent anywhere. Keys vanish on reload, so don't use it for anything you need to keep.
Under the hood
Key exchange
Hybrid: an attacker has to break both. ML-KEM is the NIST standard FIPS 203.
File format
An open format for file encryption, rather than a custom one.
Implementation
The TypeScript age library, built on the noble cryptography libraries.
On Solana
Records use a standard program that already exists, so no custom contract holds funds or state.
Storage
Sealed files and public keys, with their hashes recorded on Solana and checked on download.
A choice worth explaining
Deriving it from a wallet signature would be easier, and it would quietly break the protection. Solana's Ed25519 signatures are deterministic, so anyone who recovers a wallet's private key could repeat the signature and rebuild the derived key. Qapsule generates its key separately.
Private and public
| Piece | Where | Who can read it |
|---|---|---|
| Original file | Sender's and recipient's devices | PrivateOnly those two |
| Private key | A password-protected file you keep | PrivateOnly you |
| Public key | Public storage, with its hash signed on Solana | PublicEveryone, by design |
| Sealed file | Public storage, with its hash on Solana | PublicAnyone can download it, only the recipient can open it |
| Sender, hashed recipient, time, sealed size | Solana | PublicAnyone who knows a wallet can check its inbox |
Security, plainly
Not audited yet. Neither Qapsule nor its post-quantum dependency has had an independent security audit, and JavaScript can't guarantee constant-time execution. Please don't rely on it for high-stakes secrets yet.
Status