kanywst/brtc
GitHub: kanywst/brtc
一款将离线密码暴力破解的抽象强度指标转化为真实时间与金钱成本的命令行计算工具,支持 CI/CD 门禁集成。
Stars: 0 | Forks: 0
# brtc
**停止猜测密码强度。计算实际的账单。**
[](https://github.com/kanywst/brtc/actions)
[](https://goreportcard.com/report/github.com/kanywst/brtc)
**brtc(暴力破解成本)** 是一款 CLI 工具,它将“熵”等抽象概念转化为残酷的现实:**破解一个密码究竟需要花费多少时间和云基础设施资金。**
`brtc` 不会仅仅告诉你密码是“弱”还是“强”,而是让你的字符串在运行 `bcrypt` 的 RTX 4090 设备或 AWS 8x H100 集群面前接受考验,并为你呈上最终的账单。
## 演示

## 功能特性
- **财务成本可视化:** 使用 AWS 或 GPU 供应商的当前 spot 实例价格,计算破解你的哈希值所需的总 USD 成本。
- **硬件模拟:** 在各种物理和云配置文件(`rtx-4090`、`rtx-3060`、`gtx-1080ti`、`mac-m3-max`、`mac-m3`、`cpu-standard`、`aws-p5.48xlarge`、`raspberry-pi-4`)之间进行选择,以了解硬件如何影响威胁规模。
- **哈希算法:** 模拟 `md5`、`sha256`、`bcrypt` 和 `argon2id` 的破解能力,支持调整工作因子。
- **终端 UI:** 基于 [Bubble Tea](https://github.com/charmbracelet/bubbletea) 和 Lipgloss 构建的精美动画比例输出。
- **CI/CD 门禁:** 在你的流水线中使用 `--fail-under-time` 标志,如果密钥能在你设定的阈值(例如 `1y`、`30d`)内被破解,则中断构建。同时支持用于工具集成的标准 `json` 和 `sarif` 输出。
## 为什么这很重要(在线攻击 vs 离线攻击)
```
sequenceDiagram
participant A as Attacker
participant S as Server (Online)
participant GPU as Local GPU (Offline)
%% Online Attack Scenario
Note over A, S: 🔴 Online Attack (Live Login Screen)
A->>S: Try "admin123" (Speed: 10/sec)
S-->>A: Incorrect
A->>S: Try "password1"
S-->>A: Incorrect
A->>S: Try "qwerty99"
S--xA: ❌ Blocked by WAF / Account Locked
%% Offline Attack Scenario
Note over A, GPU: 🟢 Offline Attack (brtc Simulates This)
A->>S: Exploit Vulnerability
S-->>A: 📦 Steal DB Password Hashes
Note over A, GPU: Attacker takes hashes offline
A->>GPU: ⚡ Feed hash to RTX 4090
loop Billions of guesses per second
GPU-->>GPU: Hash "a", "b", "c"...
GPU-->>GPU: Hash "P@ssw0rd123"
end
GPU-->>A: ✅ Match Found: "P@ssw0rd123"
```
你可能会问:*“为什么我要关注 RTX 4090?反正登录界面在尝试 5 次后就会把我锁住。”*
对于**在线攻击**(在实时网站上猜测密码)来说,确实如此。速率限制、WAF 和网络延迟使得在互联网上进行暴力破解几乎不可能。
然而,`brtc` 计算的是**离线攻击**的成本。
当数据库遭到破坏且密码哈希值被泄露时,攻击者不再需要与登录界面进行交互。他们可以将这些哈希值带到自己的私有 GPU 集群上,并以硬件允许的最大速度进行猜测,完全绕过速率限制和锁定机制。
到那时,阻止攻击者获取用户明文密码的唯一防线只剩下:
1. 密码的**长度和复杂度**(熵)。
2. 哈希算法的**工作因子**(如 `bcrypt` 或 `argon2id`),有意使其极大地拖慢他们的 GPU 速度。
`brtc` 展示了当这个最终且残酷的数学方程式上演时,究竟会发生什么。
## 安装说明
假设你已经安装了 Go 1.25+:
```
go install github.com/kanywst/brtc@latest
```
## 运行说明
只需将密码作为参数传入:
```
brtc "P@ssw0rd123!"
```
或者通过管道传入:
```
echo "P@ssw0rd123!" | brtc
```
### 选项
| 标志 | 默认值 | 描述 |
| ------------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `--hw` | `rtx-4090` | 攻击者的硬件配置(`rtx-4090`、`rtx-3060`、`gtx-1080ti`、`mac-m3-max`、`mac-m3`、`cpu-standard`、`aws-p5.48xlarge`、`raspberry-pi-4`) |
| `--algo` | `bcrypt` | 目标哈希算法(`md5`、`sha256`、`bcrypt`、`argon2id`) |
| `--cost` | `10` | 工作因子(bcrypt)或时间迭代次数(argon2id) |
| `--memory` | `""` | Argon2id 内存参数(例如 `64m`、`128m`、`1g`)。默认为配置基准线(64MB) |
| `--guesses` | `""` | 使用来自 zxcvbn 等工具的外部猜测次数覆盖熵值(例如 `1e10`、`12345`)。使用此选项后密码参数变为可选 |
| `--budget` | `""` | 设置攻击者预算(例如 `1000usd`)以查看他们最多能负担得起破解多少个字符 |
| `--output`, `-o` | `tui` | 输出格式(`tui`、`json`、`sarif`) |
| `--fail-under-time` | `""` | 导致运行失败的 CI/CD 阈值(例如 `1y`、`30d`、`12h`) |
### 示例输出
#### 精美的 TUI
```
brtc --algo bcrypt --cost 12 --hw aws-p5.48xlarge "shortpass"
```
#### 用于自动化的 JSON
```
brtc -o json "P@ssw0rd123!" | jq .
```
#### CI 门禁示例
```
brtc --fail-under-time 1m "short"
# 错误:gatekeeper 失败:预估破解时间(31.7 分钟)小于要求时间(1.0 个月)
# Exit code 1
```
#### 搭配 zxcvbn 使用(推荐)
`brtc` 的内置熵估算器很天真——它只计算字符类别并将每个位置视为独立的。对它来说,`P@ssw0rd!` 看起来“很强”,但在真正的攻击者面前却极易被猜中。为了获得准确的强度评估,请先运行 [zxcvbn](https://github.com/dropbox/zxcvbn)(或 [zxcvbn-ts](https://github.com/zxcvbn-ts/zxcvbn)),然后将其 `guesses` 字段反馈给 `brtc`:
```
guesses=$(zxcvbn-cli "P@ssw0rd!" --json | jq -r .guesses)
brtc --guesses "$guesses" --algo bcrypt --cost 12 --hw aws-p5.48xlarge
# Combinations 来自 zxcvbn;brtc 将它们转换为时间 + USD。
```
#### Argon2id 内存扫描
Argon2id 是一种内存密集型函数。提高内存参数是防御者抵御 GPU 攻击最有效的手段:
```
brtc --algo argon2id --memory 64m -o json "P@ssw0rd!" | jq .cost_usd
brtc --algo argon2id --memory 256m -o json "P@ssw0rd!" | jq .cost_usd
brtc --algo argon2id --memory 1g -o json "P@ssw0rd!" | jq .cost_usd
```
## 开发说明
标准的 Go 工具链布局:
```
make test # Run all tests
make lint # Run golangci-lint
make format # go fmt & go mod tidy
make vuln # Check for known vulnerabilities via govulncheck
make build # Build the binary directly
```
## 许可证
MIT
标签:Argon2id, AWS, bcrypt, Bubble Tea, DevSecOps, DPI, EVTX分析, Golang, GPU破解, H100, MD5, PoC, RTX 4090, SARIF, SHA256, 上游代理, 云计算, 安全合规, 安全编程, 密码学, 密码强度, 成本计算器, 手动系统调用, 日志审计, 暴力破解, 离线攻击, 终端UI, 网络代理, 网络信息安全, 规则引擎