
Reproduzierbare kryptoanalytische Artefakte für Single-Key-Recovery-Angriffe auf reduzierte AES-Runden, einschließlich Black-Box-Schlüsselwiederherstellung, DDT-Gray-Suche, S-Box-Caches und formalen Lean-Beweisen.
Quellcode für jedes im Paper zitierte Experiment. Es sind keine Messausgaben oder vorgefertigten Tabellen beigefügt: Jedes Programm gibt seine eigenen Ergebnisse aus oder schreibt sie, sodass jede Zahl von Grund auf neu erzeugt werden kann.
| Verzeichnis | Beschreibung |
|---|---|
experiments/ | die beiden Experimente hinter dem Anhang Measured costs: die vollständige Black-Box-Schlüsselwiederherstellung auf SR(7,2,2,6) und die Messungen pro Eintrag / pro Kandidat des realen 7-Runden-AES-128-Angriffs |
c/ | eigenständige C-Programme, eines pro Komponentenaussage (Bridge, Fingerprints, DDT-Gray-Walk, S-Box-Caches, Wrong-Key-Randomisierung, Lookup-Untergrenze) |
python/ | Python-Prüfungen einzelner Aussagen und die pädagogische Referenzimplementierung der Angriffsschichten (python/a1/) |
rust/ | eine zweite, unabhängige Implementierung der Komponentenexperimente (e1–e13) |
figures/ | Plot-Skripte, die die von den C-Programmen geschriebenen TSVs einlesen |
lean/ | Lean 4 + Mathlib-Formalisierung der χ★-False-Positive-Zählschranke (lean/chi-fp/, Paper §5.5) |
Die Schlüsselwiederherstellungsaussagen des Papers stützen sich auf experiments/; c/, python/ und rust/ prüfen die einzelnen Komponenten (Identitäten, Invarianzen, DDT-Fakten, Cache-Korrektheit, Randomisierungsstatistik) und sind keine Angriffe.
experiments/Siehe experiments/README.md.
sr7226-e2e/ — vollständige Black-Box-Schlüsselwiederherstellung auf AES SR(7,2,2,6)
(2x2-Zustand, 6-Bit-Wörter, 24-Bit-Schlüssel) mit der vollständigen Offline-Tabelle, für
drei Varianten auf einer Codebasis: unsere, Derbez–Fouque–Jean mit unseren
Optimierungen zur Tabellenaufzählung und Derbez–Fouque–Jean wie veröffentlicht.aes128-measured/ — der reale 7-Runden-AES-128-Angriff, Einheit für Einheit:
echte Offline-Tabelleneinträge (Teiltabelle), Zyklen pro Online-
Kandidat für die drei Varianten, die AES-Nenner, die False-Positive- und Coverage-Raten des geordneten
Fingerprints und die Projektion auf
die vollständige Anzahl.c/Einzeldatei oder eigenständig pro Verzeichnis; bauen mit
gcc -O3 -march=native -fopenmp -o <bin> <file.c> -lm (das Verzeichnis
als -I hinzufügen, wo ein lokaler Header verwendet wird). Die Verwendung ist im Header-
kommentar jeder Datei dokumentiert.
| Pfad | prüft | Stelle im Paper |
|---|---|---|
clump.c, chi_clump.c | Kollisionsentropie der I_{m,n}- und χ★-Fingerprints | Fingerprint-Eigenschaften; Anh. Kollisionsentropie |
wrongkey.c | Wrong-Key-Randomisierung, erschöpfender 2^32-Durchlauf von k_6 | Anh. Wrong-Key-Randomisierung |
fp_solve.c | DDT-Lösen und Branch-Bit-Aufzählung, verwendet beim Tabellenaufbau | §DDT-Gray |
bridge-consistency/bc_impl_{a,b}.c, bc_truehit.c | zwei unabhängige Implementierungen der False-Accept-Statistik der Bridge-Konsistenz | Alg. BridgeConsistency |
ddt-gray/ddt_gray_*.c | DDT-bewusster Gray-Walk: inkrementell gleich Kalt-Neuberechnung, amortisierte S-Box-Kosten, Timing | §DDT-Gray, Anh. DDT-Gray |
sb-cache/sbc_repro.c | XOR-Separierbarkeit hinter den W / UU S-Box-Caches; geschlossene Form von c_iSB | §S-Box-Caches |
mobius-honest/honest_online.c | die Online-Seite mit |K_on| = 8: das δ-Set, nur aus k_{-1} rekonstruiert, und die Überlebensrate bei falschem Schlüssel | §Komponentenlemmata |
mobius-honest/honest_rebound.c, degen_analysis.c, saes_imn.c | Pipeline-Prüfungen des Offline-Rebounds und des I_{m,n}-Matchings auf kleinskaligem AES; Known-Key-Abkürzungen sind in jedem Header dokumentiert — dies sind Pipeline-Prüfungen, keine Schlüsselwiederherstellungen | §Komponentenlemmata, Anh. degenerierte Fälle |
floor/verify_ls_fp.c, floor/verify_incompat.c, floor/a1_floor.py | die Lookup-Untergrenze für |K_on| = 8: dim LS(fp) ∈ {0,8} und T ≥ 2^88.67 | Anh. untere Schranke |
python/Python 3. python/a1/ verwendet nur die Standardbibliothek; die Testskripte auf oberster Ebene, figures/ und experiments/aes128-measured/phi/ benötigen numpy, scipy und matplotlib (pip install -r requirements.txt, exakte Versionen verifiziert). python/a1/README.md beschreibt die geschichtete Referenzimplementierung (gf256.py, aes7r.py, chi_canon.py, prop2.py, die goldenen Vektoren in test_vectors.py). Die Skripte auf oberster Ebene sind Prüfungen einzelner Aussagen: Brückeninvarianten (test_invariants.py, verify_Imn.py), die Brücke auf echten AES-Traces (test_bridge_aes.py), das Randverhalten von 0^{-1} (test_zeroinv.py), Randomisierung bei falschem Schlüssel (test_wrongkey.py), Clumping-/Kollisionsentropie (test_clumping*.py), die Schlüsselplan-Inversion hinter CompleteKey (keysched_solve.py) und die Demo zu Falsch-Positiven beim Fingerprint-Präfix (fp_concat_demo.py).
rust/cargo build --release, dann ./target/release/repro <exp> [args]; jeder Lauf hängt einen zeitgestempelten Block unter rust/results/ an. Die Experimentliste und was jedes davon prüft, steht in rust/src/main.rs: e1–e13 decken die Brückenidentität, Gruppen- und Nebenklassen-Fakten, die ehrliche Brücke auf echten AES-128-Traces, Randomisierung bei falschem Schlüssel, Kollisionsentropie, χ★-Invarianz, das DDT-Spektrum, AES-Sanity, Timing pro Eintrag und die SR(7,4,4,4)-Pipeline ab.