
Реализация радужных таблиц SHA-256 с ускорением на GPU, основанная на структурном анализе CDP (Cyclic Digit-sum Projection). AMD RX 9070 XT, OpenCL + Vulkan.
Ускоренная с помощью GPU реализация радужных таблиц на основе фреймворка структурного анализа CDP для SHA-256.
Создано на основе результатов статьи CDP (DOI: 10.5281/zenodo.20627240). Репозиторий содержит полную рабочую реализацию радужных таблиц на основе CDP с ядрами сборки OpenCL и вычислительными конвейерами запроса/проверки Vulkan для оборудования AMD RDNA4.
CDP (Cyclic Digit-sum Projection) — это фреймворк структурного анализа SHA-256, выявляющий ранее недокументированные математические свойства распределения выходной хеш-функции.
Основное наблюдение: шестнадцатеричная сумма цифр W(H) любого выхода SHA-256 при итеративном повторном хешировании через f(w) = W(SHA256(str(w))) детерминированно сходится ровно к двум замкнутым циклам:
C1: 476 ↔ 438 (2-цикл)
C2: 471 → 472 → 525 → 537 → 414 → 417 → 546 → 518 → 471 (8-цикл)
Эта циклическая структура в сочетании с многокомпонентным отпечатком F(H) = (W, Wvec₁₆, cycle_entry, W₂–W₅, max_nibble, min_nibble) даёт биективное отображение в ограниченных пространствах входных данных — что позволяет выполнять поиск прообраза за O(1) с помощью радужных таблиц без коллизий редукционной функции.
Ключевые доказанные свойства:
Σnibble(W₀) = 38 для всех 256 пар дополненийπ_B = 17.00%, независимо от K[i], H₀ и класса входных данныхW(H₀) = 502 — обнаруживаемая структурная сигнатура констант инициализации NIST (+22.2 выше равновесия)CDP не нарушает SHA-256. Стойкость к поиску прообраза и коллизиям не затрагивается. См. Раздел 12 статьи.
SHA256-CDP/
├── cdp_chain_builder.py # Главная точка входа — CLI для сборки, взлома, запроса
├── cdp_query.comp # Вычислительный шейдер Vulkan GLSL (ядро запроса)
├── cdp_verify.comp # Вычислительный шейдер Vulkan GLSL (ядро проверки)
├── vulkan_query.py # Движок Vulkan для Python (бэкенд ACO)
└── paper/
└── cdp_v3.pdf # Статья CDP v3
pip install pyopenclpip install numpypip install vulkan + Vulkan SDKПримечание: Vulkan необходим для корректной производительности запросов. Без него система переключается на CPU-многопроцессорность (значительно медленнее). Ядро запроса OpenCL имеет известную ошибку оптимизатора AMD PAL-LLVM на gfx1201, которая даёт неверные результаты с
-cl-fast-relaxed-math; бэкенд Vulkan ACO этой проблемы не имеет.
Пользователям Windows: добавьте
python.exe,clinfo.exeиexplorer.exeв список исключений контролируемого доступа к папкам Защитника Windows, чтобы предотвратить блокировку доступа к памяти GPU во время операций с таблицами.
git clone https://github.com/JM00NJ/SHA256-CDP
cd SHA256-CDP
pip install pyopencl numpy vulkan
Проверка обнаружения GPU:
python cdp_chain_builder.py --validate
# Одна таблица (строчные буквы, 8 символов, chain_len=300,000)
python cdp_chain_builder.py --build --charset lower --length 8 --chain-len 300000 --output cdp_8.bin
# Несколько таблиц (большее покрытие)
# n=1: 66.7% n=2: 88.9% n=3: 96.3% n=5: 99.3%
python cdp_chain_builder.py --build-multi 3 --prefix cdp_8_bin --length 8 --chain-len 300000
# Одиночный хеш
python cdp_chain_builder.py --crack <sha256_hash> \
--tables cdp_8_bin_1.bin,cdp_8_bin_2.bin,cdp_8_bin_3.bin \
--length 8 --chain-len 300000
# Список хешей (пакетный режим — таблицы загружаются один раз)
python cdp_chain_builder.py --crack-list hashes.txt \
--tables cdp_8_bin_1.bin,cdp_8_bin_2.bin,cdp_8_bin_3.bin \
--length 8 --chain-len 300000
python cdp_chain_builder.py --self-test --length 7
python cdp_chain_builder.py --validate
python cdp_chain_builder.py --validate-query <sha256_hash>
Тестировалось на AMD Radeon RX 9070 XT (gfx1201, 32 CU), Windows 11, драйвер 3679.0 (PAL,LC):
| Операция | Пропускная способность |
|---|---|
| Сборка таблицы (ядро ILP2) | ~2.5 GH/s |
| Запрос — первый пакет (мелкий) | ~14 GH/s |
| Запрос — средняя по пакетам | ~5 GH/s |
| Проверка GPU (Vulkan ACO) | ~2s на 88k кандидатов |
Строчные 7-симв., 3 таблицы (96.3% покрытия):
Режимы ядер:
--mode ilp2 — 2 цепочки/поток, перемеженный SHA256 для ILP (по умолчанию, самый быстрый на AMD RDNA)--mode vec4 — 4 цепочки/поток с использованием арифметики uint4--mode scalar — 1 цепочка/поток (базовый)Бэкенд компилятора AMD PAL-LLVM, используемый OpenCL в Windows (gfx1201), имеет задокументированную ошибку оптимизатора: циклы с переменным началом (for step=pos; step<N) выдают неверные результаты с -cl-fast-relaxed-math. Обходной путь (-O0) восстанавливает корректность, но снижает пропускную способность в ~3-4 раза. Бэкенд Vulkan ACO — полностью независимый конвейер компиляции, у которого этой ошибки нет. Ядра запроса и проверки используют Vulkan; ядра сборки используют OpenCL (ошибка на них не влияет).
Стандартная редукционная функция на основе PCG использует 64 бита энтропии из digest[0:2]. Инъективная редукция CDP строит начальное значение из полного отпечатка (W, Wvec₁₆, max_nibble, min_nibble) — тех же компонентов, которые доказаны инъективными над SHA256(X) теоремой биекции CDP. Это гарантирует отсутствие слияний цепочек от самой редукционной функции; оставшиеся слияния являются коллизиями конечных точек из-за парадокса дня рождения (~33% на таблицу, что соответствует ожидаемому покрытию в 66.7%).
Таблицы используют компактный двоичный формат (магическое число CDP1, 39 байт/запись) — примерно в 3.4 раза меньше JSON. Используйте --convert для преобразования существующих JSON-таблиц:
python cdp_chain_builder.py --convert table.json --output table.bin
| Имя | Символы | Пространство (8-симв.) |
|---|---|---|
lower | a–z (26) | 2.1 × 10¹¹ |
© 2026 Erenay Özkan (JM00NJ / Vesqer)
Этот проект лицензирован в соответствии с GNU Affero General Public License v3.0 (AGPL-v3) с Commons Clause.
Согласно Commons Clause, вы не можете продавать это программное обеспечение или использовать его как часть коммерческого продукта или услуги без явного письменного разрешения автора.
Использование с открытым исходным кодом, исследования и некоммерческие приложения разрешены на условиях AGPL-v3 — модификации должны публиковаться под той же лицензией.
По вопросам коммерческого лицензирования: netacoding.com
См. LICENSE для полных условий.
Создано JM00NJ — netacoding.com
alnum| a–z, 0–9 (36) |
| 2.8 × 10¹² |
full | a–z, A–Z, 0–9, символы (70) | 5.8 × 10¹⁴ |