Inhaltsverzeichnis

std.crypto.pqc.hybrid

Hybrid-KEM kombiniert X25519 (klassisch) und ML-KEM-768 (post-quantum) zu einem einzigen KEM. Beide Shared Secrets werden via SHAKE-256 zu einem gemeinsamen 32-Byte-Schlüssel kombiniert.

Prinzip: Schützt auch dann, wenn ein der beiden Verfahren kompromittiert wird — der Angreifer muss sowohl X25519 als auch ML-KEM brechen. Dieses Schema wird von Signal, Google (Chrome) und Apple (iMessage PQ3) eingesetzt.

import std.crypto.pqc.hybrid;

std.crypto.pqc · std.crypto.pqc.mlkem · std.crypto.pqc.pqc (High-Level API)


Schlüsselgrößen

Größe Wert Zusammensetzung
Public Key 1216 B X25519-PK (32) + ML-KEM-768-PK (1184)
Secret Key 2432 B X25519-SK (32) + ML-KEM-768-SK (2400)
Ciphertext 1120 B X25519-CT (32, ephemerer PK) + ML-KEM-768-CT (1088)
Shared Secret 32 B SHAKE-256(ss_x25519 ss_mlkem ct_x25519 ct_mlkem)

Konstanten

Konstante Wert Bedeutung
HYBRID_PK 1216 Public-Key-Größe in Bytes
HYBRID_SK 2432 Secret-Key-Größe in Bytes
HYBRID_CT 1120 Ciphertext-Größe in Bytes
HYBRID_SS 32 Shared-Secret-Länge in Bytes

Funktionen

Funktion Beschreibung
HybridKEMKeyGen(seed, pk, sk) Erzeugt Schlüsselpaar. seed: 64 Bytes = seed_x25519[0..31] + seed_mlkem[32..95]. pk: HYBRID_PK Bytes; sk: HYBRID_SK Bytes.
HybridKEMEncapsulate(pk, rand, ct, ss) Erzeugt Ciphertext und 32-Byte Shared Secret. rand: 64 Bytes = rand_x25519[0..31] + rand_mlkem[32..63].
HybridKEMDecapsulate(sk, ct, ss) Rekonstruiert Shared Secret aus SK und CT.

Verwendungsbeispiel

import std.crypto.pqc.hybrid;
import std.crypto.rand;
import std.alloc;

fn main(): int64 {
  // Schlüsselpaar erzeugen
  var seed: int64 := alloc(64);
  RandBytesExact(seed, 64);
  var pk: int64 := alloc(HYBRID_PK);
  var sk: int64 := alloc(HYBRID_SK);
  HybridKEMKeyGen(seed, pk, sk);

  // Sender: kapselt Shared Secret ein
  var rand: int64 := alloc(64);
  RandBytesExact(rand, 64);
  var ct: int64 := alloc(HYBRID_CT);
  var ss_enc: int64 := alloc(HYBRID_SS);
  HybridKEMEncapsulate(pk, rand, ct, ss_enc);

  // Empfänger: rekonstruiert Shared Secret
  var ss_dec: int64 := alloc(HYBRID_SS);
  HybridKEMDecapsulate(sk, ct, ss_dec);
  // ss_enc == ss_dec

  free(seed, 64); free(rand, 64);
  free(pk, HYBRID_PK); free(sk, HYBRID_SK);
  free(ct, HYBRID_CT); free(ss_enc, HYBRID_SS); free(ss_dec, HYBRID_SS);
  return 0;
}


Sicherheitseigenschaften

Eigenschaft Ergebnis
Klassische Sicherheit X25519 (Curve25519, ~128-Bit)
Quantensicherheit ML-KEM-768 (FIPS 203, ~120-Bit Quantum)
Kombinations-Sicherheit Angreifer muss beide Verfahren brechen
KDF SHAKE-256(ss_x ss_k ct_x ct_k) — bindet CT in den Key ein (Forward Secrecy)
Verbreitung Signal Protocol PQXDHv2, Google Chrome CECPQ2, Apple PQ3 (analoges Schema)

Letzte Aktualisierung: 2026-06-08