JM00NJ/SHA256-CDP

GitHub: JM00NJ/SHA256-CDP

基于CDP结构分析理论的GPU加速SHA-256彩虹表实现,利用哈希输出的数学性质在受限输入空间进行高效原像查找。

Stars: 8 | Forks: 0

# SHA256-CDP:循环数字和投影 **针对 SHA-256 的 CDP 结构分析框架的 GPU 加速彩虹表实现。** 基于 CDP 论文(DOI:[10.5281/zenodo.20627240](https://doi.org/10.5281/zenodo.20627240))的研究成果,本仓库提供了一个完整、可用的基于 CDP 的彩虹链表实现,包含 OpenCL 构建 kernel 以及针对 AMD RDNA4 硬件设计的 Vulkan 计算 查询/验证 pipeline。 ## 什么是 CDP? CDP(循环数字和投影)是一个针对 SHA-256 的结构分析框架,揭示了哈希函数输出分布中此前未被记录的数学属性。 核心观察:任何 SHA-256 输出的十六进制数字和 `W(H)`,在通过 `f(w) = W(SHA256(str(w)))` 迭代重新哈希时,会确定性地收敛到恰好**两个闭环**中: ``` C1: 476 ↔ 438 (2-cycle) C2: 471 → 472 → 525 → 537 → 414 → 417 → 546 → 518 → 471 (8-cycle) ``` 这种循环结构,结合多组件指纹 `F(H) = (W, Wvec₁₆, cycle_entry, W₂–W₅, max_nibble, min_nibble)`,在受约束的输入空间上产生了**双射映射**——从而实现了通过彩虹表进行 O(1) 的原像查找,且没有归约函数冲突。 已证明的关键属性: - **定理 5.1** — 互补 nibble 和不变量:所有 256 个互补对的 `Σnibble(W₀) = 38` - **定理 5.4** — 遍历 Markov 属性:`π_B = 17.00%`,与 `K[i]`、`H₀` 和输入类别无关 - `W(H₀) = 502` — NIST 初始化常量的可检测结构签名(高于平衡态 +22.2) - 在所有测试的输入空间中,实现了对 167 万个输入的零冲突双射 CDP **不会**破解 SHA-256。原像抗性和冲突抗性不受影响。详见论文第 12 节。 ## 仓库结构 ``` 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 ``` ## 环境要求 - Python 3.10+ - PyOpenCL:`pip install pyopencl` - NumPy:`pip install numpy` - Vulkan(推荐):`pip install vulkan` + [Vulkan SDK](https://vulkan.lunarg.com/) - 带有 RDNA2+ 的 AMD GPU(已在 RX 9070 XT / gfx1201 上测试) ## 安装说明 ``` 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 ``` ### 破解哈希 ``` # 单个 hash python cdp_chain_builder.py --crack \ --tables cdp_8_bin_1.bin,cdp_8_bin_2.bin,cdp_8_bin_3.bin \ --length 8 --chain-len 300000 # hash 列表(batch 模式 — 表仅加载一次) 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 ``` ### 验证 GPU 输出 ``` python cdp_chain_builder.py --validate python cdp_chain_builder.py --validate-query ``` ## 性能 测试环境:**AMD Radeon RX 9070 XT**(gfx1201,32 CUs),Windows 11,驱动程序 3679.0 (PAL,LC): | 操作 | 吞吐量 | |---|---| | 构建表 (ILP2 kernel) | ~2.5 GH/s | | 查询 — 首批 (浅层) | ~14 GH/s | | 查询 — 跨批次平均 | ~5 GH/s | | GPU 验证 (Vulkan ACO) | 每个 88k 候选 ~2s | **7 字符小写字母,3 个表(96.3% 覆盖率):** - 表大小:3 × 0.7 MB - 构建时间:~3 × 12s - 破解时间:每个哈希 ~43s **Kernel 模式:** - `--mode ilp2` — 2 链/线程,交错 SHA256 以实现 ILP(默认,在 AMD RDNA 上最快) - `--mode vec4` — 4 链/线程,使用 `uint4` 算术 - `--mode scalar` — 1 链/线程(基线) ## 技术说明 ### 为什么查询使用 Vulkan? 在 Windows (gfx1201) 上 OpenCL 使用的 AMD PAL-LLVM 编译器后端存在一个已记录的优化器 bug:变量起始循环 (`for step=pos; step
标签:DOS头擦除, OpenCL, Veh, Vulkan, 反病毒测试, 哈希算法, 密码学, 密码破解, 彩虹表, 手动系统调用, 逆向工具