
Artefatti di crittanalisi riproducibili per attacchi di recupero della chiave singola su AES a round ridotti, inclusi recupero della chiave black-box, ricerca DDT-Gray, cache delle S-box e prove formali in Lean.
Codice sorgente per ogni esperimento citato nel paper. Nessun output di misurazione o tabella precompilata è incluso: ogni programma stampa o scrive i propri risultati, così ogni numero può essere rigenerato da zero.
| directory | cos'è |
|---|---|
experiments/ | i due esperimenti alla base dell'appendice Measured costs: il completo recupero della chiave black-box su SR(7,2,2,6), e le misurazioni per-entry / per-candidate del reale attacco AES-128 a 7 round |
c/ | programmi C autonomi, uno per ogni affermazione sui componenti (bridge, fingerprint, cammino DDT-Gray, cache S-box, randomizzazione wrong-key, lookup floor) |
python/ | verifiche Python di singole affermazioni e l'implementazione di riferimento pedagogica dei livelli dell'attacco (python/a1/) |
rust/ | una seconda implementazione indipendente degli esperimenti sui componenti (e1–e13) |
figures/ | script di plotting che consumano i TSV scritti dai programmi C |
lean/ | formalizzazione Lean 4 + Mathlib del limite di conteggio dei falsi positivi di χ★ (lean/chi-fp/, paper §5.5) |
Le affermazioni del paper sul recupero della chiave si basano su experiments/; c/, python/ e rust/ verificano i singoli componenti (identità, invarianze, fatti DDT, correttezza delle cache, statistiche di randomizzazione) e non sono attacchi.
experiments/Vedi experiments/README.md.
sr7226-e2e/ — recupero completo della chiave black-box su AES SR(7,2,2,6) (stato 2x2, parole da 6 bit, chiave da 24 bit) con la tabella offline completa, per tre varianti su un'unica base di codice: la nostra, Derbez–Fouque–Jean con le nostre ottimizzazioni di enumerazione della tabella, e Derbez–Fouque–Jean come pubblicato.aes128-measured/ — il reale attacco AES-128 a 7 round un'unità alla volta: voci genuine della tabella offline (tabella parziale), cicli per candidato online per le tre varianti, i denominatori AES, i tassi di falsi positivi e di copertura del fingerprint ordinato, e la proiezione al conteggio completo.c/File singolo o autonomo per directory; compilare con
gcc -O3 -march=native -fopenmp -o <bin> <file.c> -lm (aggiungere la directory
come -I dove viene usato un header locale). L'uso è documentato nel commento
di intestazione di ciascun file.
| percorso | cosa verifica | posizione nel paper |
|---|---|---|
clump.c, chi_clump.c | entropia di collisione dei fingerprint I_{m,n} e χ★ | proprietà dei fingerprint; app. collision entropy |
wrongkey.c | randomizzazione wrong-key, scansione esaustiva 2^32 di k_6 | app. wrong-key randomisation |
fp_solve.c | risoluzione DDT ed enumerazione dei branch-bit usati dalla costruzione della tabella | §DDT-Gray |
bridge-consistency/bc_impl_{a,b}.c, bc_truehit.c | due implementazioni indipendenti della statistica di falso accettazione della bridge-consistency | Alg. BridgeConsistency |
ddt-gray/ddt_gray_*.c | cammino Gray consapevole del DDT: l'incrementale equivale al ricalcolo da zero, costo S-box ammortizzato, timing | §DDT-Gray, app. DDT-Gray |
sb-cache/sbc_repro.c | separabilità XOR alla base delle cache S-box W / UU; forma chiusa di c_iSB | §S-box caches |
mobius-honest/honest_online.c | il lato online con |K_on| = 8: il δ-set ricostruito solo da k_{-1}, e il tasso di sopravvissuti wrong-key | §component lemmas |
mobius-honest/honest_rebound.c, degen_analysis.c, saes_imn.c | verifiche della pipeline del rebound offline e del matching di I_{m,n} su AES in scala ridotta; le scorciatoie known-key sono documentate in ciascun header — queste sono verifiche della pipeline, non recuperi di chiave | §component lemmas, app. degenerate cases |
floor/verify_ls_fp.c, floor/verify_incompat.c, floor/a1_floor.py | il lookup floor per |K_on| = 8: dim LS(fp) ∈ {0,8} e T ≥ 2^88.67 | app. lower bound |
python/Python 3. python/a1/ usa solo la libreria standard; gli script di test di primo livello, figures/ e experiments/aes128-measured/phi/ richiedono numpy, scipy e matplotlib (pip install -r requirements.txt, versioni esatte verificate). python/a1/README.md descrive l'implementazione di riferimento a livelli (gf256.py, aes7r.py, chi_canon.py, prop2.py, i vettori golden in test_vectors.py). Gli script di primo livello sono verifiche di singole affermazioni: invarianti del bridge (test_invariants.py, verify_Imn.py), il bridge su tracce AES reali (test_bridge_aes.py), il comportamento al bordo di 0^{-1} (test_zeroinv.py), la randomizzazione con chiave errata (test_wrongkey.py), l'entropia di clumping / collisione (test_clumping*.py), l'inversione del key-schedule alla base di CompleteKey (keysched_solve.py) e la demo dei falsi positivi sul prefisso di fingerprint (fp_concat_demo.py).
rust/cargo build --release, poi ./target/release/repro <exp> [args]; ogni esecuzione aggiunge un blocco con timestamp sotto rust/results/. L'elenco degli esperimenti e ciò che ciascuno verifica è in rust/src/main.rs: e1–e13 coprono l'identità del bridge, i fatti su gruppi e coset, il bridge onesto su tracce AES-128 reali, la randomizzazione con chiave errata, l'entropia di collisione, l'invarianza di χ★, lo spettro DDT, il controllo di sanità di AES, il timing per voce e la pipeline SR(7,4,4,4).