C7aWL3R/PASSAUDIT
GitHub: C7aWL3R/PASSAUDIT
一套加固的密码强度审计工具,通过熵、模式识别与泄露情报评估密码安全性并提供交互式终端分析。
Stars: 0 | Forks: 0
# PassAudit
**具有交互式 TUI 的密码强度分析器**
PassAudit 是一个加固的、安全审计的 Python 工具,通过数学熵、深度模式识别、隐私保护的泄露情报分析以及取证级内存清理来评估密码强度,并全部封装在由 Rich 驱动的终端界面中。
```
____ ___ ___ __
/ __ \____ ___ _____/ | __ ______/ (_)/ /_
/ /_/ / __ `/ / / / __ / / / / / __ / / __/
/ ____/ /_/ / /_/ / /_/ / /_/ / /_/ / / / /_
/_/ \__,_/\__,_/\__,_/\__,_/\__,_/_/\__/ v2.1.0
```
## 功能特性
### 熵计算引擎
使用 `E = L × log₂(R)` 计算密码熵,其中 L 为密码长度,R 为字符集大小,自动检测五类字符(小写、大写、数字、符号、Unicode)。结果分为五个强度等级:危急(<40 位)、弱(40–60)、良好(60–80)、强(80–100)、优秀(100+)。
**重要说明:** Shannon 熵表示在给定长度和字符集下理论上的最大值。像 `Password123!` 这样的密码会产生约 79 位的熵,但实际上几乎为零的实用强度,因为它遵循高度可预测的模式。当 PassAudit 检测到这种分歧(高熵但低 zxcvbn 评分)时,会在报告中显示明确的“熵 ≠ 强度”警告面板。摘要表中的熵行标记为“理论值”,zxcvbn 行标记为“实际值”,以防止误读。
### 模式识别(带超时的 zxcvbn)
集成 zxcvbn 库以检测键盘行走、字典单词、常见姓名、日期、l33t 替换、重复字符和连续模式。每个密码会获得一个 0–4 的强度评分、四种攻击场景下的预估破解时间,以及具体的警告和建议。
zxcvbn 调用被封装在 5 秒的 `SIGALRM` 超时中。zxcvbn-python 是一个纯 Python 端口,源自一个使用递归逻辑和正则匹配的旧版 JavaScript 引擎。精心设计的输入(例如重复序列与部分字典单词混合)可能触发灾难性回溯。闹钟确保 TUI 永不冻结;如果 zxcvbn 超过时限,工具会报告“分析超时”并继续使用其余引擎。无论如何,都会在 `finally` 块中恢复原始的 SIGALRM 处理器。
### 泄露检查 — HIBP k-匿名性(流式)
使用 k-匿名性协议查询 Have I Been Pwned API。密码在本地进行 SHA-1 哈希,仅将前 5 个十六进制字符发送到 API,返回的后缀列表通过 `resp.iter\_lines()` 与 `stream=True` 逐行消费。这避免了将整个响应体(数兆字节、数十万哈希后缀)作为单个字符串加载到内存中,最小化了 GC 压力并降低了敏感哈希材料的内存占用。连接会在 `finally` 块中显式关闭。查找完成后,完整的 SHA-1 哈希与后缀会被从内存中清除。
### 破解时间估算
估算两种场景下的暴力破解时间:离线 GPU(每秒 1000 亿次哈希)与在线限速(每秒 100 次尝试)。所有算术运算均在 log₂ 空间中进行,以安全处理任意大的密钥空间而不发生整数溢出。
### 内存清理(尽力而为)
分析完成后,通过 `ctypes.memset` 将密码字符缓冲区清零,仅针对 CPython PyObject 头之后的 inline 数据区域。清理操作会检测 UCS-1/2/4 编码宽度以确定正确的字节数,并跳过长度 ≤3 的字符串以避免破坏 Python 的内部字符串驻留表。zxcvbn 捕获的模式令牌也会被清理。
**诚实的局限性:** Python 字符串是不可变的。当密码被传入 `getpass`、`hashlib`、`zxcvbn` 或 `len()` 时,CPython 可能会创建隐藏的副本、引用或缓存。此外,`getpass` 模块依赖操作系统库(`termios`)在 Python 接收输入之前进行缓冲。即使主缓冲区被成功清零,副本仍可能存在于操作系统终端缓冲区、CPython 的内存分配器区域以及垃圾回收器的各代中。`ctypes.memset` 清理可减少暴露窗口,但无法保证密码从进程内存中被完全移除。
**若要获得硬性保证:** 输入收集与哈希必须在 C 或 Rust 中实现,使用带有 `mlock()` 的可变字节缓冲区以防止换页到磁盘。这在方法论界面和源代码中均有文档说明。
### 安全上下文管理器
所有运行中的密码状态均通过 `\_SecureContext` 上下文管理器管理,确保在正常退出、异常或信号触发时进行清理。这取代了早期版本中脆弱的全局变量方式,并在 `requests` 或 `zxcvbn` 内部发生错误时仍能保证确定性清理。
### 安全输入
使用 `getpass` 进行终端输入,确保密码永不显示在屏幕上或保存到 Shell 历史记录中。非 TTY 环境会被检测并拒绝。密码长度上限为 128 个字符(从 v2.1.0 的 512 降低,以更好地匹配现实人类输入并限制 zxcvbn 的评估面)。
---
## 安装
**要求:** Python 3.10+、Linux、CPython 解释器。
```
git clone https://github.com/C7aWL3R/passaudit.git
cd passaudit
pip install -r requirements.txt
chmod 0700 passaudit.py
```
### 依赖项
| 包 | 用途 |
|----|------|
| zxcvbn-python | 模式识别引擎 |
| requests | HIBP API 通信 |
| rich | 终端 UI 渲染 |
---
## 使用方法
```
./passaudit.py
```
交互式菜单提供五个选项:
| 选项 | 操作 |
|------|------|
| 1 | 完整分析(熵 + zxcvbn + HIBP + 破解时间) |
| 2 | 离线分析(跳过泄露检查) |
| 3 | 显示分析方法论(含注意事项) |
| 4 | 关于 / 版本信息 |
| 0 | 退出 |
密码输入始终隐藏。工具会循环运行,以便你可以分析多个密码而无需重启。
---
## 报告输出
每次分析都会生成一个结构化报告,最多包含六个部分:
**强度条** — 结合熵(60% 权重)与 zxcvbn 评分(40% 权重)的可视化量表,若密码出现在泄露数据库中则上限为 10%。总体判定:PASS、MARGINAL、FAIL 或 COMPROMISED。
**摘要表** — 密码长度、字符集大小、熵(标注为“理论值”)、zxcvbn 评分(标注为“实际值”)、HIBP 泄露状态及总体判定。
**熵 ≠ 强度警告** — 仅在熵 ≥60 位且 zxcvbn 评分 ≤2 时显示,解释理论随机性与实际可破解性之间的差异。
**破解时间表** — 估算五种场景下的暴力破解时长:离线 GPU(1000 亿 H/s)、在线限速(100 次/s)以及 zxcvbn 计算的三种场景。
**检测到的模式** — zxcvbn 识别的每个模式,包含部分掩码的匹配令牌及其来源字典。
**反馈** — 来自 zxcvbn 的具体警告与可操作建议,所有文本均经过 Rich 标记注入防护处理。
---
## 已知限制
**内存清理是尽力而为。** Python 字符串不可变。副本可能存在于操作系统终端缓冲区、CPython 分配器区域、GC 代以及任何持有引用的库中。`ctypes.memset` 清理可减少暴露,但无法保证密码从进程内存中被完全移除。要获得硬性保证,输入收集与哈希必须在 C 或 Rust 中实现,使用带有 `mlock()` 的可变缓冲区。
**SHA-1 仅用于 HIBP。** SHA-1 被唯一使用是因为 HIBP API 要求如此,不会在工具内用于任何安全关键用途。
**CPython 特定。** 内存清理依赖于 CPython 的 `id()` 返回对象内存地址以及 `sys.getsizeof()` 反映真实分配大小。在 PyPy、GraalPy 或其他实现中,清理操作将静默无操作。
**zxcvbn-python 未维护。** 该库是旧版 JavaScript 引擎的纯 Python 移植。如性能与长期支持至关重要,请考虑迁移至维护良好的替代方案(例如 `nbvcxz` 或通过 CFFI 的 `zxcvbn-c`)。
**SIGALRM 仅限 Linux。** zxcvbn 超时机制使用 `signal.alarm()`,在 Windows 上不可用。由于 PassAudit 以 Linux 为目标平台,这是可接受的,但跨平台移植需要基于线程的超时方案。
---
## 许可证
MIT —— 详见 [LICENSE](LICENSE) 全文。
---
## 作者
**C7a3R**
标签:DOS头擦除, Rich终端界面, TUI, VEH, XML 请求, zxcvbn, 交互式终端, 信息熵, 内存 sanitisation, 内存清理, 字典攻击, 安全开发, 安全强化, 密码学, 密码学安全, 密码安全, 密码审计, 密码强度分析, 密码破解, 密码策略, 密码评测, 开源安全工具, 手动系统调用, 模式识别, 泄露情报, 熵计算, 终端工具, 网络安全, 逆向工具, 逆向工程平台, 键盘行走, 隐私保护