Testvektoren prüfen
l4re/crypto_test_vectors.json enthält vollständige Anfragen und Antworten des Binärprotokolls, Byte
für Byte, mit den dazugehörigen Schlüsseln. Sie dienen Integratoren als Referenz für die eigene
Implementierung. Diese Anleitung zeigt, wie Sie die Vektoren unabhängig vom Dienst nachrechnen und wie
Sie sie neu erzeugen.
Was die Datei enthält
| Gruppe | Anzahl | Inhalt je Vektor |
|---|---|---|
| AES-256-GCM | 4 | Schlüssel, Anfrage 0x01, Antwort mit Nonce, Tag und Chiffrat |
| ML-DSA | 2 | ML-DSA-65 und ML-DSA-44: Schlüsselpaar, Anfrage 0x10, Antwort mit Signatur |
| ML-KEM | 2 | ML-KEM-768 und ML-KEM-1024: Schlüsselpaar, Anfrage 0x20, Antwort mit Geheimnis und Chiffrat |
Dazu kommen drei RSA-Testzertifikate. Alle Schlüssel sind Testschlüssel und haben in keinem Produktivsystem etwas verloren.
ML-DSA signiert hedged; dieselbe Nachricht ergibt bei jedem Lauf eine andere Signatur. Prüfen Sie Signaturen deshalb durch Verifizieren, nicht durch Bytevergleich.
Unabhängig nachrechnen
tools/verify-test-vectors.py rechnet jeden Vektor mit einem libcrypto Ihrer Wahl nach, ohne Code des
Dienstes. Nehmen Sie möglichst eine andere OpenSSL-Fassung als die, mit der die Vektoren entstanden
sind.
python tools/verify-test-vectors.py l4re/crypto_test_vectors.json "C:\Program Files\OpenSSL\bin\libcrypto-3-x64.dll"
python3 tools/verify-test-vectors.py l4re/crypto_test_vectors.json /usr/lib/x86_64-linux-gnu/libcrypto.so.3
Das Skript entschlüsselt jeden AES-Vektor, verifiziert jede Signatur und verwirft sie für eine
veränderte Nachricht, und entkapselt jedes ML-KEM-Chiffrat. Bei Erfolg endet es mit
8 vectors, 0 failures und dem Rückgabewert 0. Das libcrypto muss ML-DSA und ML-KEM kennen, also
mindestens OpenSSL 3.5 sein.
Neu erzeugen
cd l4re cargo test --test crypto_test_vectors test_export_full_suite -- --ignored
Der Test schreibt crypto_test_vectors.json neu, mit frischen Schlüsseln und dem Erzeugungszeitpunkt im
Feld created. Bevor er schreibt, verifiziert er jede Signatur, entkapselt jedes Chiffrat und prüft die
Größen gegen die Größenkonstanten des Dienstes, die auch in wvds_crypto.h stehen. Prüfen Sie das
Ergebnis danach mit dem Skript oben.