Hybrid KEM (Key Encapsulation Mechanism)
SARE uses a Hybrid Key Encapsulation Mechanism (KEM) to securely derive encryption keys for asymmetric file encryption. The hybrid approach combines a classical Diffie-Hellman key exchange with a post-quantum KEM, ensuring robust security even against future quantum attacks.
The hybrid KEM generates two independent shared secrets that are later combined and processed to produce a single symmetric encryption key for AEAD encryption.
Supported Algorithms
Currently, SARE supports the following hybrid KEM algorithms:
-
Classical DH:
X25519
-
Post-Quantum KEM:
Kyber768
Each hybrid KEM consists of a classical DH component and a post-quantum KEM component. Additional algorithms can be added as needed.
Shared Secret Generation
-
Classical DH Shared Secret
-
Generated using the sender’s DH keypair and the recipient’s DH public key.
-
In sare-core:
DiffieHellman::calculate_shared_key() → ss1
.
-
-
Post-Quantum KEM Shared Secret
-
Generated using the sender’s KEM keypair and the recipient’s KEM public key.
-
In sare-core:
Decapsulation::decapsulate() → ss2
.
-
These two secrets are independent and form the basis of the final symmetric key derivation.
Encryption Key Derivation with HKDF
SARE combines the two shared secrets as follows in sare-lib:
combined_ss = ss1 || ss2
Then it derives the final encryption key using HKDF-SHA256:
encryption_key = HKDF(combined_ss, salt, info)
-
combined_ss
– Concatenation of the two shared secrets. -
salt
– Randomly generated per encryption session. -
info
– Optional contextual info (can beNone
). -
encryption_key
– Final key used for AEAD encryption.
This design ensures that the compromise of one component does not expose the encryption key, providing post-quantum resilience for encrypted files.