
cryptography-research-demo — Updated!
Воспроизводимые артефакты криптоанализа для атак восстановления одиночного ключа на AES с сокращённым числом раундов, включая восстановление ключа по принципу «чёрного ящика», поиск DDT-Gray, кэши S-box и формальные доказательства в Lean.
Артефакты для «Дальнейшие атаки восстановления одного ключа на AES с уменьшенным числом раундов»
Исходный код для каждого эксперимента, упомянутого в статье. Никаких результатов измерений или готовых таблиц в комплекте нет: каждая программа выводит или записывает собственные результаты, так что каждое число можно воспроизвести с нуля.
| каталог | что это |
|---|---|
experiments/ | два эксперимента, лежащие в основе приложения Measured costs: полное восстановление ключа «чёрного ящика» для SR(7,2,2,6) и измерения по записям / по кандидатам реальной атаки на 7-раундовый AES-128 |
c/ | автономные программы на C, по одной на каждое утверждение о компоненте (мост, отпечатки, обход DDT-Gray, кэши S-блоков, рандомизация неверного ключа, нижняя граница поиска) |
python/ | однокомпонентные проверки на Python и педагогическая эталонная реализация слоёв атаки (python/a1/) |
rust/ | вторая независимая реализация экспериментов с компонентами (e1–e13) |
figures/ | скрипты построения графиков, потребляющие TSV-файлы, записанные программами на C |
lean/ | формализация на Lean 4 + Mathlib границы подсчёта ложных срабатываний для χ★ (lean/chi-fp/, §5.5 статьи) |
Утверждения статьи о восстановлении ключа опираются на experiments/; c/, python/ и rust/ проверяют отдельные компоненты (тождества, инвариантности, факты о DDT, корректность кэшей, статистику рандомизации) и не являются атаками.
experiments/
См. experiments/README.md.
sr7226-e2e/— полное восстановление ключа «чёрного ящика» для AES SR(7,2,2,6) (состояние 2x2, 6-битные слова, 24-битный ключ) с полной офлайн-таблицей, для трёх вариантов на одной кодовой базе: наш, Derbez–Fouque–Jean с нашими оптимизациями перечисления таблиц и Derbez–Fouque–Jean в опубликованном виде.aes128-measured/— реальная атака на 7-раундовый AES-128 по одной единице за раз: настоящие записи офлайн-таблицы (частичная таблица), такты на каждого онлайн-кандидата для трёх вариантов, знаменатели AES, показатели ложных срабатываний и покрытия упорядоченного отпечатка, а также проекция на полное число.
c/
Однофайловые или самодостаточные в каждом каталоге; сборка с помощью gcc -O3 -march=native -fopenmp -o <bin> <file.c> -lm (добавляйте каталог через -I, если используется локальный заголовочный файл). Использование описано в комментарии в начале каждого файла.
| путь | что проверяет | расположение в статье |
|---|---|---|
clump.c, chi_clump.c | коллизионная энтропия отпечатков I_{m,n} и χ★ | свойства отпечатков; прил. коллизионная энтропия |
wrongkey.c | рандомизация неверного ключа, исчерпывающий перебор 2^32 значений k_6 | прил. рандомизация неверного ключа |
fp_solve.c | решение DDT и перебор битов ветвления, используемые при построении таблицы | §DDT-Gray |
bridge-consistency/bc_impl_{a,b}.c, bc_truehit.c | две независимые реализации статистики ложного принятия для согласованности моста | Алг. BridgeConsistency |
ddt-gray/ddt_gray_*.c | обход DDT-Gray: инкрементальное вычисление в сравнении с холодным пересчётом, амортизированная стоимость S-блока, тайминг | §DDT-Gray, прил. DDT-Gray |
sb-cache/sbc_repro.c | XOR-разделимость, лежащая в основе кэшей S-блоков W / UU; замкнутая форма c_iSB | §Кэши S-блоков |
mobius-honest/honest_online.c | онлайн-сторона с |K_on| = 8: δ-множество, восстановленное только из k_{-1}, и доля выживших при неверном ключе | §леммы о компонентах |
mobius-honest/honest_rebound.c, degen_analysis.c, saes_imn.c | конвейерные проверки офлайн-отскока и согласования I_{m,n} на AES малого масштаба; сокращения при известном ключе описаны в каждом заголовке — это конвейерные проверки, а не восстановление ключей | §леммы о компонентах, прил. вырожденные случаи |
floor/verify_ls_fp.c, floor/verify_incompat.c, floor/a1_floor.py | нижняя граница поиска для |K_on| = 8: dim LS(fp) ∈ {0,8} и T ≥ 2^88.67 | прил. нижняя граница |
python/
Python 3. python/a1/ использует только стандартную библиотеку; скрипты верхнего уровня, figures/ и experiments/aes128-measured/phi/ требуют numpy, scipy и matplotlib (pip install -r requirements.txt, точные версии проверены). python/a1/README.md описывает многослойную эталонную реализацию (gf256.py, aes7r.py, chi_canon.py, prop2.py, эталонные векторы в test_vectors.py). Скрипты верхнего уровня — это проверки отдельных утверждений: инварианты моста (test_invariants.py, verify_Imn.py), мост на реальных трассах AES (test_bridge_aes.py), поведение на границе 0^{-1} (test_zeroinv.py), рандомизация неверного ключа (test_wrongkey.py), кластеризация / коллизионная энтропия (test_clumping*.py), обращение расписания ключей, лежащее в основе CompleteKey (keysched_solve.py), и демонстрация ложных срабатываний для префикса отпечатка (fp_concat_demo.py).
rust/
cargo build --release, затем ./target/release/repro <exp> [args]; каждый запуск добавляет блок с отметкой времени в rust/results/. Список экспериментов и то, что каждый из них проверяет, находится в rust/src/main.rs: e1–e13 охватывают тождество моста, факты о группах и смежных классах, честный мост на реальных трассах AES-128, рандомизацию неверного ключа, коллизионную энтропию, инвариантность χ★, спектр DDT, проверку корректности AES, замер времени по записям и конвейер SR(7,4,4,4).