2.0Tools
Seal
Seal encrypts a message or a file to an ML-KEM public key, in the browser, in an envelope any compatible implementation can open.
The construction
- ML-KEM (FIPS 203) encapsulates a fresh 32-byte secret to the recipient's public key.
- HKDF-SHA-256 derives a one-time AES-256-GCM key from that secret, a random 16-byte salt and the label "kibora/seal/v1".
- AES-256-GCM encrypts the content with a random 12-byte nonce. The entire header is authenticated as associated data.
Envelope format, version 1
layout
offset bytes field 0 4 magic "KBSL" 4 1 version = 0x01 5 1 suite: 1 ML-KEM-512, 2 ML-KEM-768, 3 ML-KEM-1024 6 8 key id = first 8 bytes of SHA-256(recipient public key) 14 16 HKDF salt 30 12 AES-GCM nonce 42 n ML-KEM ciphertext (768 / 1088 / 1568) 42+n rest AES-256-GCM ciphertext with 16-byte tag plaintext = u16 name length | name (UTF-8) | u8 kind (0 text, 1 file) | content
Text form
For chats and email the envelope is base64 between the lines -----BEGIN KIBORA SEAL----- and -----END KIBORA SEAL-----. Files can be saved as .kbseal instead. The browser limit is 25 MB.
Finding a recipient
Paste a public key, use one made in Key Forge, or look up an address in the Lattice Book. A key from the book is only as trustworthy as the account that published it: if you can, confirm the first characters of the key with the person over another channel.