# Hybrid encryption: why combine classical and post-quantum cryptography

> Source: <https://dev.to/isazajuancarlos/hybrid-encryption-why-combine-classical-and-post-quantum-cryptography-3hkp>
> Published: 2026-08-30 18:16:42+00:00

When a new cryptographic algorithm appears, a tension shows up: **classical** algorithms such as X25519 or Ed25519 have resisted attacks for years, but are vulnerable to a future quantum computer; **post-quantum** ones such as ML-KEM or ML-DSA resist quantum attacks, but are newer and less tested. Hybrid encryption resolves the tension: **use both at once**.

Combine a classical and a post-quantum algorithm so that the system

only breaks if both fail simultaneously.

A classical attacker would have to break the post-quantum algorithm; a quantum attacker would have to break the classical one *and* the post-quantum one. You gain security against the future without betting everything on a young algorithm.

**Key exchange (encrypting for a recipient).** You combine:

The two resulting keys are mixed with a context-bound derivation function (HKDF), so that neither one alone is enough.

**Digital signatures (authenticity).** You combine:

The message is accepted only if **both** signatures verify — an AND combiner.

There is a golden rule in cryptography, **Kerckhoffs's principle**: a system must be secure even if the attacker knows its entire design; security lives in the **key**, not in hiding the format. A good hybrid system uses public, audited primitives — XChaCha20-Poly1305 to encrypt, Argon2id to derive keys from passwords, HKDF to separate domains — and **never invents its own cryptography**.

[Quipu](https://xiliux.com/blog/quipu-cifrado-multilenguaje-rust-python-node-go) is a free library implementing exactly this approach for **data at rest**: hybrid X25519 + ML-KEM-1024 encryption, hybrid Ed25519 + ML-DSA-87 signatures, and only verified primitives underneath. It targets NIST security level 5 (CNSA 2.0) and is open source, so anyone can review how it works.

An honest note: Quipu composes standard primitives, but the composition has not yet passed an

independentcryptographic audit. For real high-value secrets, that external review is the seal worth waiting for.

The code is at [github.com/isazajuancarlos/quipu](https://github.com/isazajuancarlos/quipu), AGPL-3.0.
