claudenstein/passomatic

GitHub: claudenstein/passomatic

Passomatic 是一款确定性、可恢复、基于 GPU 原生的密码猜测套件,利用 Markov 和 PCFG 等概率模型高效进行密码破解与钱包恢复。

Stars: 1 | Forks: 0

# Passomatic **一款用于授权数字取证的确定性、可恢复、原生 GPU 密码猜测套件。** Passomatic 将概率密码枚举(Markov、PCFG、PRINCE)重构为**层级量化概率空间上的 rank/unrank 操作**,因此每个猜测都有一个 64 位整数身份标识,每个会话都可以从约 48 字节的光标处恢复。每个 GPU 线程独立计算其分配的 rank,无共享状态,在现代 NVIDIA GPU 上以 10^8-10^9 个候选/秒的速度实现极易并行的有序枚举。 **核心价值主张:** Markov 填补了字典+规则攻击(~10^6 次猜测)和暴力破解(~10^12+ 次)之间的通用空白,在我们测试的每个密钥空间中,以相同的预算覆盖比 dict+rules 多 4-14 倍的密码。当密码结构已知时(例如 `Uppercase + word + digits`),定向 PCFG 占据主导地位——在 10^9 次猜测内达到结构密钥空间的 98%,而 Markov 仅达到 2%。两者结合覆盖了字典或暴力破解单独无法达到的范围。参见 [附录 D](docs/research/keyspace-coverage.md) 了解实证证据。 ## 快速开始 ``` # Build (requires CUDA 12+, GCC 11+, CMake 3.25+). cmake -B build -S . -DCMAKE_BUILD_TYPE=Release cmake --build build -j # Crack NTLM hashes with the bundled Markov model (the general-purpose # gap-filler — 4-14x more coverage than dict+rules at any budget). build/apps/passomatic-crack --hash-mode 1000 --hashes ntlm.txt \ --gen markov --model models/bundled/rockyou-full.pmkv # Train your own Markov model from any password corpus (seconds to minutes). build/apps/passomatic-train --corpus passwords.txt --out custom.pmkv # Targeted PCFG for known structures (98% coverage on "Pass12"-shaped # passwords within 1G guesses — 51x better than Markov on that shape). build/apps/passomatic-train --pcfg --corpus passwords.txt --out grammar.pcfg build/apps/passomatic-crack --hash-mode 1000 --hashes ntlm.txt \ --gen pcfg --model grammar.pcfg --pcfg-structure-pattern U1L3D2 # Pipe to hashcat for hash types we don't have a built-in kernel for. build/apps/passomatic-gen --gen markov --model custom.pmkv \ --rules best64.rule --session run1.session \ | hashcat -m 3200 bcrypt_hashes.txt ``` 每个会话都是可恢复的:使用 Ctrl-C 中断,重新运行相同命令,它会从中断处继续。 ## 构建 **要求:** CUDA Toolkit 12.0+、C++20 编译器(GCC 11+)、CMake 3.25+、NVIDIA GPU(Volta+ / compute 7.0+)。 ``` cmake -B build -S . -DCMAKE_BUILD_TYPE=Release cmake --build build -j cd build && ctest --output-on-failure # 14 test suites ``` 要针对特定的 GPU 架构进行构建(编译更快): ``` cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_CUDA_ARCHITECTURES=86 ``` ## 功能 ### 生成器 所有生成器都实现相同的 `(level, rank) -> candidate` 纯函数,支持确定性恢复、批次大小不变性和 GPU 并行。 | 生成器 | 功能 | 关键标志 | |-----------|-------------|----------| | **mask** | 兼容 Hashcat 的掩码攻击 (`?l?u?d?s?a`) | `--mask STR` | | **wordlist** | 基于文件的枚举,支持排序/去重/长度过滤 | `--wordlist PATH` | | **prince** | PRINCE 多词链组合器 | `--wordlist PATH --max-chain N` | | **markov` | OMEN 风格层级量化 3-gram Markov | `--model PATH` (.pmkv) | | **pcfg` | Weir PCFG 配合 Goldberg-Luby CFG unranking | `--model PATH` (.pcfg),针对语料库规模模型使用 `--pcfg-max-structures N` | | **targeted** | 基于 JSON 配置文件的 PII 定向生成 | `--profile PATH` | | **combined` | 多个生成器的轮询交错 | `--model PATH --model2 PATH` | 任何生成器都可以使用 `--rules FILE` 包装,以在内核中进行兼容 hashcat 的规则扩展。 #### PCFG 内存控制:`max_level` vs `--pcfg-max-structures` PCFG 的两个独立维度。它们在不同时间控制不同的事物,不能互相替代: | 控制 | 设置时间 | 控制内容 | 消耗资源 | |------|----------|-------------------|----------------| | `--max-level N` (训练时) | `passomatic-train --pcfg --max-level N`,烘焙进 `.pcfg` 文件 | OMEN 风格概率量化粒度,应用于结构和每个位置的终结符(levels 0..N,0 = 最有可能) | DP 表深度 ≈ `max_level × (max_slots + 1)`;更改它的唯一方法是重新训练 | | `--pcfg-max-structures N` (运行时) | `passomatic-crack`、`passomatic-gen`、`passomatic-rank` 标志 | 加载时保留的不同基础结构(如 `L8`、`U1L3D3S1` 等模板)的数量;丢弃低概率尾部 | 计数表的主机堆与保留的结构数量线性扩展 | 基础结构是字符类模板,如 `L8`(八个小写字母)、`U1L3D3S1`(一个大写、三个小写、三个数字、一个特殊字符)。`breach-full.pcfg` 有约 3480 万个;`crackstation-human-only-full.pcfg` 有 414 k 个;`rockyou-full.pcfg` 有 145 k 个。所有三个捆绑模型都是 `max_level=10` —— 量化粒度完全相同;它们只是在对稀有模板的长尾挖掘深度上有所不同。 **心智模型:** `max_level` 决定*有多少个概率桶*,`--pcfg-max-structures` 决定*有多少模板参与语法*。将 `max_level` 减半不会让您加载更多结构,而截断结构也不会提高一个级别内的排序。 **何时使用 `--pcfg-max-structures`**:仅用于 `breach-full.pcfg` 或类似的语料库规模模型。如果预估的 DP + 计数向量堆超过约 50% 的 `MemAvailable`,`PcfgCountTables` 预检检查将拒绝分配并在错误消息中建议一个上限。对于 `crackstation-human-only-full.pcfg` 及更小的模型,完整模型可以舒适地容纳(分别约 3.3 GB 和约 0.8 GB 的计数表堆),不需要上限。更改上限会改变 `fingerprint()`,因此 `--session` 文件在不同上限之间不可互换。 ### 集成 GPU 破解器 完全在 GPU 上运行生成 + 哈希 + 匹配 —— 无 PCIe 瓶颈。 | 模式 | 算法 | 速度 (RTX 3090) | |------|----------|-----------------| | `-m 1000` | NTLM | 9.29 GH/s | | `-m 0` | MD5 | 9.07 GH/s | | `-m 100` | SHA1 | 4.23 GH/s | | `-m 1400` | SHA256 | 4.59 GH/s | 钱包模式:Bitcoin Core (`-m 11300`)、Blockchain.com V1/V2 (`-m 12700`/`15200`)、Electrum (`-m 16600`)、Ethereum (`-m 15600`)、MetaMask (`-m 26600`)。 ### 设计属性 - **确定性** —— 第 i 个猜测在多次运行、机器、批次大小和 GPU 架构之间完全相同 - **可恢复** —— 48 字节光标,原子写入。无优先队列,无无限内存 - **有序** —— 通过 OMEN 风格层级离散化实现近似最可能优先 - **GPU 并行** —— 每个线程计算 `unrank(level, base + tid)`,零线程间通信 - **可组合** —— 任何生成器均可配合 `--rules`、`passomatic-gen`(管道)或 `passomatic-crack`(集成)使用 - **交互式** —— `passomatic-crack` 显示类似 hashcat 的会话 / 状态 / 进度 / 候选块,原地刷新,当 stdin 是 TTY 时支持 `[s]tatus [p]ause [b]ypass [q]uit` 键(管道输入时自动禁用) - **自动可调批次大小** —— `passomatic-crack --auto-batch` 在启动时对生成器进行微基准测试,并选择一个平衡候选生成与哈希验证的批次大小,目标是每次破解循环迭代 `--auto-batch-ms`(默认 100 ms)的墙上时间。灵感来自 Prob-Hashcat 的离线猜测速度理论([RAID '24](https://dl.acm.org/doi/10.1145/3678890.3678919))。 - **大规模语料库上的快速训练** —— Markov 和 PCFG 训练器都在所有核心上使用 `mmap` + 并行分块读取。Markov 在约 25 秒内摄入 23 GB(快 58 倍),通过逐元素加法合并每线程扁平计数数组。PCFG 使用 `ankerl::unordered_dense::map` 代替 `std::map`,实现 100-250 倍加速,外加 `/proc/self/statm` RSS 探针以进行严格的内存预算执行。训练所有 5 个捆绑的 Markov 模型(从 rockyou 到 weakpass_4)总共仅需 **~8 分钟**,而不是约 9 小时。完整分析参见 [docs/research/trainer-speedup.md](docs/research/trainer-speedup.md)。 ## 性能对比 hashcat 在 RTX 3090 上测量。Hashcat v6.2.6。完整分析见 [docs/benchmarks.md](docs/benchmarks.md)。 | Hash 模式 | passomatic | hashcat | hashcat `-O` | 对比 hashcat `-O` | |-----------|-----------|---------|--------------|-----------------| | NTLM | 9.29 GH/s | 35.56 GH/s | 120.6 GH/s | 13.0x | | MD5 | 9.07 GH/s | 27.97 GH/s | 67.09 GH/s | 7.4x | | SHA1 | 4.23 GH/s | 14.45 GH/s | 20.98 GH/s | 5.0x | | SHA256 | 4.59 GH/s | 6.78 GH/s | 9.07 GH/s | 2.0x | | Bitcoin Core | 40.0 kH/s | 13.9 kH/s | — | **快 2.9x** | 这种差距是架构性的:Passomatic 的确定性基于 rank 的生成需要对每个候选进行混合基数除法(占快速哈希内核时间的 79%),而 hashcat 通过按位 OR 混合消除了这一点。随着哈希复杂度的增加,差距会缩小(NTLM 为 13x -> SHA256 为 2x -> 对于繁重 KDF 则反转)。为了在快速哈希上获得最大原始速度:`passomatic-gen | hashcat`。 ## 架构 ``` +-----------------------------------------------------------+ | passomatic-gen / crack | | | | Config --> Session --> Cursor {level, rank, emitted} | | | | | +----------------------------------------------------------+ | | Generator interface | | | keyspace(L) . unrank_batch(L, base, n, buf) | | +------------------------+-----------------------------+ | | | | +------+--------+-------+--------+--------+---------+ | | | Mask |Wordlist| Markov| Prince | PCFG | Rules | | | +--+---+---+----+---+---+---+----+---+----+----+----+ | | +-------+---+---+--------+--------+ | | | | | | | +----v----+ +-----v-----+ | | | CUDA | | Rule | | | | unrank |<-------------------|amplifier | | | | kernel | |(in-kernel)| | | +----+----+ +-----------+ | | | | | +---------+-----------+ | | | | | | | v v v | | stdout hashcat Hash kernel --> Match --> Found | | (gen mode) (pipe) (crack mode: NTLM/MD5/SHA/wallet)| +-----------------------------------------------------------+ ``` ## 文档 | 文档 | 内容 | |----------|----------| | [用户指南](docs/guide.md) | 工作原理、恢复机制、会话语义、所有生成器、集成破解器、钱包恢复、覆盖率评估、捆绑模型 | | [CLI 参考](docs/cli-reference.md) | 所有 4 个应用的完整标志参考,包含参数表和示例 | | [基准测试](docs/benchmarks.md) | 策略比较、hashcat 速度比较、钱包基准、自动调谐器、吞吐量方法论 | | [研究与参考资料](docs/research-and-references.md) | 技术贡献、SASS 级性能分析、与先前工作的比较、论文参考 | | [设计文档](DESIGN.md) | 完整的设计基本原理、rank/unrank 理论、GPU 内存布局、层级量化 | | [研究报告](docs/research/) | 工具调查、文献综述、GPU 架构简介 | | [密钥空间覆盖率研究](docs/research/keyspace-coverage.md) | 对“10⁶–10¹² 差距”论点的实证研究:在 18 个暴力破解密钥空间(窄 `?l4`…`?d7`、混合 `u1l3d2` 等、宽 `?a4`…`?a7` —— 总共 77.67 T 种可能字符串)上对比 dict + best64.rule vs Markov vs PCFG vs Mask,针对不相交的 crackstation-human-only 字典基线。**Markov 是真正的差距填补者**(在混合/宽密钥空间上以 1 G 猜测达到 dict+rules 的 3.6×–13.6×);**PCFG 的结构上限巨大,但其全局枚举顺序将这些字符串埋藏在实际预算之外**。**第 5 轮 (2026-04-12):** 从跨度 140 MB → 340 GB 的语料库训练的十三个 Markov 模型证实差距已填补并在约 20 GB 处达到平台期——最佳模型(`cyclone-v2`)在 `l5` 上以 1 G 预算达到 **11.8× dict+rules**,而过大/低质量的语料库(`rockyou2024`、`xsukax`)会产生主动回归。可从 `bench/coverage/` 复现。 | ## 目录布局 ``` passomatic/ +-- CMakeLists.txt +-- DESIGN.md full design document +-- README.md this file +-- LICENSE MIT +-- docs/ | +-- guide.md user guide | +-- cli-reference.md complete CLI reference | +-- benchmarks.md performance benchmarks | +-- research-and-references.md research basis + references | +-- research/ tool survey, literature review, GPU briefing +-- include/passomatic/ | +-- core/ rank, cursor, session, config_hash, logger | +-- gpu/ candidate_buffer, multi_gpu | +-- generators/ Generator interface + 9 implementations | +-- hash/ hash_kernel, cracker | +-- markov/ MarkovModel, LevelCountTables | +-- pcfg/ PcfgModel, PcfgCountTables +-- src/ | +-- core/ config_hash, session, logger | +-- generators/ host-side generator implementations | +-- markov/ model training, DP count tables | +-- pcfg/ grammar training, Goldberg-Luby DP | +-- gpu/ | +-- kernels/ CUDA kernels for each generator | +-- hashes/ NTLM, MD5, SHA1, SHA256 + match engine +-- apps/ | +-- passomatic-gen/ candidate generator CLI | +-- passomatic-train/ model trainer CLI (Markov + PCFG) | +-- passomatic-rank/ guess-number calculator for evaluation | +-- passomatic-crack/ integrated GPU cracker CLI +-- models/ | +-- bundled/ pre-trained models + .info metadata +-- tests/ 14 test suites +-- bench/ | +-- coverage/ evaluation harness + RockYou2024 baseline +-- legacy/ original Python prototype (preserved) ``` ## 法律与道德使用 Passomatic 专门设计用于授权的数字取证、具有适当授权的密码恢复、安全研究以及经书面授权的渗透测试。用户有责任确保其对所有密码恢复活动拥有合法权限。该工具不得用于未经授权访问任何系统。 ## 许可证 MIT。参见 [`LICENSE`](LICENSE)。
标签:Bash脚本, C++20, CUDA, DOS头擦除, MD5, NTLM, PCFG, PoC, PRINCE算法, SHA, TCP/UDP协议, VEH, 字典攻击, 密码学, 密码猜测, 密码破解, 密钥空间覆盖, 并行计算, 开源安全工具, 手动系统调用, 数字取证, 暴力破解, 概率上下文无关文法, 模型训练, 电子取证, 自动化脚本, 逆向工程平台, 马尔可夫模型, 高性能计算