
Implementação de tabela arco-íris SHA-256 acelerada por GPU baseada na análise estrutural CDP (Projeção de Soma de Dígitos Cíclica). AMD RX 9070 XT, OpenCL + Vulkan.
Implementação de tabela arco-íris acelerada por GPU do framework de análise estrutural CDP para SHA-256.
Construído com base nos achados do artigo CDP (DOI: 10.5281/zenodo.20627240), este repositório fornece uma implementação completa e funcional de tabelas de cadeia arco-íris baseadas em CDP com kernels de construção OpenCL e pipelines de consulta/verificação Vulkan compute direcionados ao hardware AMD RDNA4.
CDP (Projeção de Soma de Dígitos Cíclica) é um framework de análise estrutural para SHA-256 que revela propriedades matemáticas anteriormente não documentadas da distribuição de saída da função hash.
A observação central: a soma de dígitos hexadecimais W(H) de qualquer saída SHA-256, quando re-hash iterativamente através de f(w) = W(SHA256(str(w))), converge deterministicamente para exatamente dois ciclos fechados:
C1: 476 ↔ 438 (2-cycle)
C2: 471 → 472 → 525 → 537 → 414 → 417 → 546 → 518 → 471 (8-cycle)
Essa estrutura cíclica, combinada com uma impressão digital multicomponente F(H) = (W, Wvec₁₆, cycle_entry, W₂–W₅, max_nibble, min_nibble), produz um mapeamento bijetivo sobre espaços de entrada restritos — permitindo consulta de pré-imagem O(1) via tabelas arco-íris com zero colisões de função de redução.
Propriedades comprovadas principais:
Σnibble(W₀) = 38 para todos os 256 pares complementaresπ_B = 17.00%, independente de K[i], H₀ e classe de entradaW(H₀) = 502 — assinatura estrutural detectável das constantes de inicialização NIST (+22.2 acima do equilíbrio)CDP não quebra SHA-256. A resistência a pré-imagem e colisão não são afetadas. Veja a Seção 12 do artigo.
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 + Vulkan SDKNota: Vulkan é necessário para desempenho correto de consulta. Sem ele, o sistema recai para multiprocessamento de CPU (significativamente mais lento). O kernel de consulta OpenCL tem um bug conhecido do otimizador AMD PAL-LLVM no gfx1201 que produz resultados incorretos com
-cl-fast-relaxed-math; o backend ACO do Vulkan não tem esse problema.
Usuários Windows: Adicione
python.exe,clinfo.exeeexplorer.exeà lista de permissões do Acesso a Pastas Controladas do Windows Defender para evitar bloqueios de acesso à memória da GPU durante operações de tabela.
git clone https://github.com/JM00NJ/SHA256-CDP
cd SHA256-CDP
pip install pyopencl numpy vulkan
Verificar detecção da 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>
Testado em AMD Radeon RX 9070 XT (gfx1201, 32 CUs), Windows 11, driver 3679.0 (PAL,LC):
| Operação | Throughput |
|---|---|
| Construção de tabela (kernel ILP2) | ~2.5 GH/s |
| Consulta — primeiro lote (raso) | ~14 GH/s |
| Consulta — média entre lotes | ~5 GH/s |
| Verificação GPU (ACO Vulkan) | ~2s por 88k candidatos |
Minúsculas de 7 caracteres, 3 tabelas (96,3% de cobertura):
Modos de kernel:
--mode ilp2 — 2 cadeias/thread, SHA256 intercalado para ILP (padrão, mais rápido em AMD RDNA)--mode vec4 — 4 cadeias/thread usando aritmética uint4--mode scalar — 1 cadeia/thread (linha de base)O backend do compilador AMD PAL-LLVM usado pelo OpenCL no Windows (gfx1201) tem um bug de otimizador documentado: loops de início variável (for step=pos; step<N) produzem resultados incorretos com -cl-fast-relaxed-math. A solução alternativa (-O0) restaura a correção, mas reduz o throughput ~3-4×. O backend ACO do Vulkan é um pipeline de compilador completamente separado e não tem esse problema. Os kernels de consulta e verificação usam Vulkan; os kernels de construção usam OpenCL (não afetados pelo bug).
A função de redução padrão com semente PCG usa 64 bits de entropia de digest[0:2]. A redução injetiva CDP constrói a semente a partir da impressão digital completa (W, Wvec₁₆, max_nibble, min_nibble) — os mesmos componentes comprovados como injetivos sobre SHA256(X) pelo teorema da bijeção CDP. Isso garante zero mesclagens de cadeia da própria função de redução; mesclagens restantes são colisões de endpoint do paradoxo do aniversário (~33% por tabela, correspondendo à cobertura esperada de 66,7%).
As tabelas usam um formato binário compacto (magic CDP1, 39 bytes/entrada) — aproximadamente 3,4× menor que JSON. Use --convert para converter tabelas JSON existentes:
python cdp_chain_builder.py --convert table.json --output table.bin
| Nome | Caracteres | Espaço (8 caracteres) |
|---|---|---|
lower | a–z (26) | 2.1 × 10¹¹ |
© 2026 Erenay Özkan (JM00NJ / Vesqer)
Este projeto está licenciado sob a GNU Affero General Public License v3.0 (AGPL-v3) com a Commons Clause.
Sob a Commons Clause, você não pode vender este software ou usá-lo como parte de um produto ou serviço comercial sem permissão explícita por escrito do autor.
Uso de código aberto, pesquisa e aplicações não comerciais são permitidos sob os termos da AGPL-v3 — modificações devem ser publicadas sob a mesma licença.
Para consultas de licenciamento comercial: netacoding.com
Consulte LICENSE para termos completos.
Construído por JM00NJ — netacoding.com
alnum |
| a–z, 0–9 (36) |
| 2.8 × 10¹² |
full | a–z, A–Z, 0–9, símbolos (70) | 5.8 × 10¹⁴ |