All projects

Post-Quantum Cryptography · NYU CS6903 · 2026

Kyber Crystals: Post-Quantum Secure Channel

A research-grade C implementation of a post-quantum-secure channel between two endpoints (Alice ↔ Bob), implemented twice with two different families of post-quantum primitives, then attacked and benchmarked under a unified test harness.

  • C
  • liboqs
  • ML-KEM-768
  • ML-DSA-65
  • HQC-192
  • SPHINCS+
  • AES-256-GCM
  • HKDF
  • Docker

Approach

Scheme A is the mainstream lattice stack: ML-KEM-768 (Kyber) for key encapsulation and ML-DSA-65 (Dilithium) for signatures. Scheme B deliberately avoids lattices entirely: HQC-192, a code-based KEM, paired with SLH-DSA-SHA2-192s (SPHINCS+), a hash-based signature scheme. Both run at NIST PQ security Category 3 and share the same symmetric layer — AES-256-GCM with HKDF-SHA256 key derivation.

The point of building it twice: if structured lattices ever fall to cryptanalysis, everything deployed on Kyber+Dilithium falls together. Both backends sit behind a single pluggable pq_backend_t interface, selected at runtime — a working demonstration of what crypto-agility costs and buys you.

Highlights

  • Two full PQ backends behind one C interface — switch with --backend A / --backend B
  • Automated attack demos: replay, downgrade, and AEAD tampering — run as failing-build tests
  • Docker benchmark harness comparing handshake latency, key/ciphertext/signature sizes
  • Built on liboqs; reproducible with make build / make test / make benchmark

Artefacts