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, 字典攻击, 密码学, 密码猜测, 密码破解, 密钥空间覆盖, 并行计算, 开源安全工具, 手动系统调用, 数字取证, 暴力破解, 概率上下文无关文法, 模型训练, 电子取证, 自动化脚本, 逆向工程平台, 马尔可夫模型, 高性能计算