
Implémentation de rainbow tables SHA-256 accélérée par GPU, basée sur l'analyse structurelle CDP (Cyclic Digit-sum Projection). AMD RX 9070 XT, OpenCL + Vulkan.
Implémentation de tables arc-en-ciel accélérée par GPU du cadre d'analyse structurelle CDP pour SHA-256.
Basé sur les résultats de l'article CDP (DOI : 10.5281/zenodo.20627240), ce dépôt fournit une implémentation complète et fonctionnelle de tables de chaînes arc-en-ciel basées sur le CDP, avec des noyaux de construction OpenCL et des pipelines de calcul Vulkan de requête et de vérification ciblant le matériel AMD RDNA4.
Le CDP (Cyclic Digit-sum Projection) est un cadre d'analyse structurelle pour SHA-256 qui révèle des propriétés mathématiques jusqu'alors non documentées de la distribution de sortie de la fonction de hachage.
L'observation clé : la somme des chiffres hexadécimaux W(H) de toute sortie SHA-256, lorsqu'elle est re-hachée itérativement via f(w) = W(SHA256(str(w))), converge de manière déterministe vers exactement deux cycles fermés :
C1: 476 ↔ 438 (2-cycle)
C2: 471 → 472 → 525 → 537 → 414 → 417 → 546 → 518 → 471 (8-cycle)
Cette structure cyclique, combinée à une empreinte multi-composants F(H) = (W, Wvec₁₆, cycle_entry, W₂–W₅, max_nibble, min_nibble), donne une application bijective sur des espaces d'entrée contraints — permettant une recherche de préimage en O(1) via des tables arc-en-ciel avec zéro collision de fonction de réduction.
Propriétés clés démontrées :
Σnibble(W₀) = 38 pour les 256 paires de complémentsπ_B = 17.00%, indépendante de K[i], H₀ et de la classe d'entréeW(H₀) = 502 — signature structurelle détectable des constantes d'initialisation NIST (+22.2 au-dessus de l'équilibre)Le CDP ne casse pas SHA-256. La résistance aux préimages et aux collisions n'est pas affectée. Voir la section 12 de l'article.
SHA256-CDP/
├── cdp_chain_builder.py # Main entry point — build, crack, query CLI
├── cdp_query.comp # Vulkan GLSL compute shader (query kernel)
├── cdp_verify.comp # Vulkan GLSL compute shader (verify kernel)
├── vulkan_query.py # Vulkan Python engine (ACO backend)
└── paper/
└── cdp_v3.pdf # CDP paper v3
pip install pyopenclpip install numpypip install vulkan + SDK VulkanRemarque : Vulkan est requis pour des performances de requête correctes. Sans lui, le système retombe sur le multiprocessing CPU (nettement plus lent). Le noyau de requête OpenCL présente un bug connu de l'optimiseur AMD PAL-LLVM sur gfx1201 qui produit des résultats incorrects avec
-cl-fast-relaxed-math; le backend Vulkan ACO n'a pas ce problème.
Utilisateurs Windows : ajoutez
python.exe,clinfo.exeetexplorer.exeà la liste blanche de l'accès contrôlé aux dossiers de Windows Defender pour empêcher les blocages d'accès à la mémoire GPU pendant les opérations sur les tables.
git clone https://github.com/JM00NJ/SHA256-CDP
cd SHA256-CDP
pip install pyopencl numpy vulkan
Vérifier la détection du GPU :
python cdp_chain_builder.py --validate
# Single table (lowercase 8-char, chain_len=300,000)
python cdp_chain_builder.py --build --charset lower --length 8 --chain-len 300000 --output cdp_8.bin
# Multiple tables (higher coverage)
# 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
# Single hash
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
# Hash list (batch mode — tables loaded once)
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>
Testé sur AMD Radeon RX 9070 XT (gfx1201, 32 CU), Windows 11, pilote 3679.0 (PAL, LC) :
| Opération | Débit |
|---|---|
| Construction de table (noyau ILP2) | ~2.5 GH/s |
| Requête — premier lot (peu profond) | ~14 GH/s |
| Requête — moyenne sur l'ensemble des lots | ~5 GH/s |
| Vérification GPU (Vulkan ACO) | ~2 s pour 88k candidats |
Minuscules sur 7 caractères, 3 tables (couverture de 96.3 %) :
Modes de noyau :
--mode ilp2 — 2 chaînes/thread, SHA256 entrelacé pour l'ILP (par défaut, le plus rapide sur AMD RDNA)--mode vec4 — 4 chaînes/thread utilisant l'arithmétique uint4--mode scalar — 1 chaîne/thread (référence)Le backend compilateur AMD PAL-LLVM utilisé par OpenCL sur Windows (gfx1201) présente un bug d'optimiseur documenté : les boucles à départ variable (for step=pos; step<N) produisent des résultats incorrects avec -cl-fast-relaxed-math. La solution de contournement (-O0) rétablit des résultats corrects mais réduit le débit d'environ 3 à 4×. Le backend Vulkan ACO est un pipeline de compilation complètement séparé et n'a pas ce problème. Les noyaux de requête et de vérification utilisent Vulkan ; les noyaux de construction utilisent OpenCL (non affectés par le bug).
La fonction de réduction standard à graine PCG utilise 64 bits d'entropie provenant de digest[0:2]. La réduction CDP-injective construit la graine à partir de l'empreinte complète (W, Wvec₁₆, max_nibble, min_nibble) — les mêmes composants dont l'injectivité sur SHA256(X) est démontrée par le théorème de bijection CDP. Cela garantit zéro fusion de chaînes provenant de la fonction de réduction elle-même ; les fusions restantes sont des collisions de points finaux dues au paradoxe des anniversaires (~33 % par table, ce qui correspond à la couverture attendue de 66.7 %).
Les tables utilisent un format binaire compact (nombre magique CDP1, 39 octets/entrée) — environ 3.4× plus petit que le JSON. Utilisez --convert pour convertir des tables JSON existantes :
python cdp_chain_builder.py --convert table.json --output table.bin
| Nom | Caractères | Espace (8 caractères) |
|---|---|---|
lower | a–z (26) | 2.1 × 10¹¹ |
© 2026 Erenay Özkan (JM00NJ / Vesqer)
Ce projet est sous licence GNU Affero General Public License v3.0 (AGPL-v3) avec la Commons Clause.
En vertu de la Commons Clause, vous ne pouvez pas vendre ce logiciel ni l'utiliser dans le cadre d'un produit ou d'un service commercial sans autorisation écrite explicite de l'auteur.
L'utilisation open source, la recherche et les applications non commerciales sont autorisées selon les termes de l'AGPL-v3 — les modifications doivent être publiées sous la même licence.
Pour toute demande de licence commerciale : netacoding.com
Voir LICENSE pour les conditions complètes.
Créé par JM00NJ — netacoding.com
alnum |
| a–z, 0–9 (36) |
| 2.8 × 10¹² |
full | a–z, A–Z, 0–9, symboles (70) | 5.8 × 10¹⁴ |