
Implementación de tabla rainbow SHA-256 acelerada por GPU basada en análisis estructural CDP (Proyección de suma de dígitos cíclica). AMD RX 9070 XT, OpenCL + Vulkan.
Implementación de tablas arcoíris acelerada por GPU del marco de análisis estructural CDP para SHA-256.
Construido sobre los hallazgos del artículo CDP (DOI: 10.5281/zenodo.20627240), este repositorio proporciona una implementación completa y funcional de tablas de cadenas arcoíris basadas en CDP con kernels de compilación OpenCL y pipelines de consulta/verificación de cómputo Vulkan orientados a hardware AMD RDNA4.
CDP (Proyección de Suma de Dígitos Cíclica) es un marco de análisis estructural para SHA-256 que revela propiedades matemáticas previamente no documentadas de la distribución de salida de la función hash.
La observación central: la suma de dígitos hexadecimales W(H) de cualquier salida SHA-256, cuando se re-hashea iterativamente mediante f(w) = W(SHA256(str(w))), converge deterministicamente en exactamente dos ciclos cerrados:
C1: 476 ↔ 438 (ciclo de 2)
C2: 471 → 472 → 525 → 537 → 414 → 417 → 546 → 518 → 471 (ciclo de 8)
Esta estructura cíclica, combinada con una huella digital multicomponente F(H) = (W, Wvec₁₆, cycle_entry, W₂–W₅, max_nibble, min_nibble), proporciona un mapeo biyectivo sobre espacios de entrada restringidos — permitiendo la búsqueda de preimagen en O(1) mediante tablas arcoíris sin colisiones en la función de reducción.
Propiedades clave demostradas:
Σnibble(W₀) = 38 para todos los 256 pares complementariosπ_B = 17.00%, independiente de K[i], H₀ y la clase de entradaW(H₀) = 502 — firma estructural detectable de las constantes de inicialización NIST (+22.2 por encima del equilibrio)CDP no rompe SHA-256. La resistencia a preimagen y colisión no se ven afectadas. Ver Sección 12 del artículo.
SHA256-CDP/
├── cdp_chain_builder.py # Punto de entrada principal — construcción, descifrado, consulta CLI
├── cdp_query.comp # Shader de cómputo Vulkan GLSL (kernel de consulta)
├── cdp_verify.comp # Shader de cómputo Vulkan GLSL (kernel de verificación)
├── vulkan_query.py # Motor Vulkan Python (backend ACO)
└── paper/
└── cdp_v3.pdf # Artículo CDP v3
pip install pyopenclpip install numpypip install vulkan + Vulkan SDKNota: Vulkan es necesario para un rendimiento correcto en consultas. Sin él, el sistema recurre a multiprocesamiento de CPU (significativamente más lento). El kernel de consulta OpenCL tiene un error conocido del optimizador AMD PAL-LLVM en gfx1201 que produce resultados incorrectos con
-cl-fast-relaxed-math; el backend Vulkan ACO no tiene este problema.
Usuarios de Windows: Añada
python.exe,clinfo.exeyexplorer.exea la lista blanca de Acceso a Carpetas Controladas de Windows Defender para evitar bloqueos de acceso a memoria de GPU durante las operaciones con tablas.
git clone https://github.com/JM00NJ/SHA256-CDP
cd SHA256-CDP
pip install pyopencl numpy vulkan
Verificar detección de GPU:
python cdp_chain_builder.py --validate
# Tabla única (minúsculas 8 caracteres, chain_len=300.000)
python cdp_chain_builder.py --build --charset lower --length 8 --chain-len 300000 --output cdp_8.bin
# Múltiples tablas (mayor cobertura)
# 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
# Hash único
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
# Lista de hashes (modo por lotes — las tablas se cargan una vez)
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>
Probado en AMD Radeon RX 9070 XT (gfx1201, 32 CUs), Windows 11, controlador 3679.0 (PAL,LC):
| Operación | Rendimiento |
|---|---|
| Construcción de tabla (kernel ILP2) | ~2.5 GH/s |
| Consulta — primer lote (superficial) | ~14 GH/s |
| Consulta — promedio entre lotes | ~5 GH/s |
| Verificación GPU (Vulkan ACO) | ~2s por 88k candidatos |
7 caracteres minúsculas, 3 tablas (96.3% de cobertura):
Modos de kernel:
--mode ilp2 — 2 cadenas/hilo, SHA256 entrelazado para ILP (predeterminado, más rápido en AMD RDNA)--mode vec4 — 4 cadenas/hilo usando aritmética uint4--mode scalar — 1 cadena/hilo (línea base)El backend del compilador AMD PAL-LLVM utilizado por OpenCL en Windows (gfx1201) tiene un error de optimización documentado: los bucles de inicio variable (for step=pos; step<N) producen resultados incorrectos con -cl-fast-relaxed-math. La solución temporal (-O0) restaura la corrección pero reduce el rendimiento ~3-4×. El backend Vulkan ACO es una tubería de compilación completamente separada y no tiene este problema. Los kernels de consulta y verificación utilizan Vulkan; los kernels de construcción usan OpenCL (no afectados por el error).
La función de reducción estándar con semilla PCG utiliza 64 bits de entropía de digest[0:2]. La reducción inyectiva CDP construye la semilla a partir de la huella digital completa (W, Wvec₁₆, max_nibble, min_nibble) — los mismos componentes demostrados como inyectivos sobre SHA256(X) por el teorema de biyección CDP. Esto garantiza que no haya fusiones de cadena provenientes de la propia función de reducción; las fusiones restantes son colisiones de punto final debidas a la paradoja del cumpleaños (~33% por tabla, coincidiendo con la cobertura esperada del 66.7%).
Las tablas utilizan un formato binario compacto (magia CDP1, 39 bytes/entrada) — aproximadamente 3.4× más pequeñas que JSON. Use --convert para convertir tablas JSON existentes:
python cdp_chain_builder.py --convert table.json --output table.bin
| Nombre | Caracteres | Espacio (8 caracteres) |
|---|---|---|
lower | a–z (26) | 2.1 × 10¹¹ |
© 2026 Erenay Özkan (JM00NJ / Vesqer)
Este proyecto está licenciado bajo la GNU Affero General Public License v3.0 (AGPL-v3) con la Commons Clause.
Según la Commons Clause, no puede vender este software ni utilizarlo como parte de un producto o servicio comercial sin el permiso explícito por escrito del autor.
El uso de código abierto, la investigación y las aplicaciones no comerciales están permitidos bajo los términos AGPL-v3 — las modificaciones deben publicarse bajo la misma licencia.
Para consultas de licencias comerciales: netacoding.com
Vea LICENSE para los términos completos.
Creado 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¹⁴ |