PCFG = 概率上下文无关文法
PCFG = 很酷的模糊猜测器
简而言之:一组用于研究人类如何生成密码的工具。这些工具可用于破解密码哈希,也可用于创建合成密码(蜜词)或帮助开发更好的密码强度算法。
训练器: 4.4
猜测器: 4.6
PRINCE_LING: 4.3
密码评分器: 4.4
使用 Sphinx 基于代码中的文档字符串动态创建开发者指南。要构建开发者指南,请参阅 /doc/INSTRUCTIONS.rst 中的说明。
预构建的开发者指南 PDF 也可以在 /doc/build/latex/pcfgdevelopersguide.pdf 找到。注意,我不会在主要版本之间重建此指南,以保持 git 历史更清洁。也就是说,提交 PDF 会很快变得混乱。这意味着预构建的指南可能稍微过时,因此如果你用它来帮助编写/修改代码,建议自行构建指南而不是使用预构建版本。
该项目使用机器学习来识别用户的密码创建习惯。通过训练一个公开的明文/已破解密码列表来生成 PCFG 模型。在此项目上下文中,该模型被称为规则集,包含训练期间识别的密码的多个不同部分及其相关概率。这种词干分析可用于其他破解工具(如 PRINCE),并且规则集的某些部分可以直接纳入更传统的基于字典的攻击中。该项目还包括一个 PCFG 猜测生成器,它利用此规则集按概率顺序生成密码猜测。这比标准字典攻击强大得多,并且在测试中已被证明能够以显著少于其他公开可用方法的猜测次数平均破解密码。缺点是按概率顺序生成猜测速度较慢,平均每秒生成 5-10 万次猜测,而基于 GPU 的算法针对快速哈希算法每秒可以生成数百万到数十亿(甚至更多)次猜测。因此,PCFG 猜测器最适合用于大量加盐哈希或其他慢速哈希算法,在这些场景中,算法的性能损失可以通过猜测的准确性来弥补。
pip3 install chardet 安装此仓库中包含的默认规则集是通过训练 RockYou 数据集的一个 100 万密码子集生成的。如果使用完整的 RockYou 3200 万密码集训练,可以获得更好的性能,但为了保持下载体积小,已将其排除。您可以使用默认规则集开始生成密码而无需在新列表上训练,但建议针对更接近您目标的目标密码集进行训练。如果您确实创建自己的规则集,请参考以下快速指南:
python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESETpython3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6
b. --save_sensitive:如果指定此选项,训练期间发现的敏感数据(如电子邮件地址和完整网站)将保存在规则集中。虽然 PCFG 猜测生成器当前未使用这些数据,但在实际密码破解攻击中非常有价值。默认情况下此选项关闭,以便在学术环境中更容易使用此工具。注意,即使关闭此选项,规则集中几乎肯定仍会保存 PII 数据,因此请妥善保护生成的规则集。示例:python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive
c. --comments:向规则集配置文件添加注释。这有助于日后回顾时了解生成规则集的原因和方式。将您要添加的注释放在引号内。此命令使用先前训练的 PCFG 规则集将猜测输出到 stdout。然后可以通过管道将这些猜测传送到任何需要使用它们的程序中。如果未指定规则集,将使用默认规则集 DEFAULT。在本指南中,假设使用的规则集是 NEW_RULESET。
python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAMEpython3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load许多情况下,您可能想要估计某个密码被先前训练的规则集生成的概率。例如,这可以作为密码强度指标的一部分,或用于其他研究目的。已包含一个示例程序来执行此操作。
python3 password_scorer -r NEW_RULESET -i INPUT_LIST名称: PRINCE 语言索引 N-Grams (Prince-Ling)
概述: 基于已训练的 PCFG 规则集/文法构建自定义词表,用于 PRINCE 风格的组合攻击。其背后的思路是:由于 PCFG 训练器已经将训练集中的密码分解为单独的解析,因此可以利用这些信息为其他攻击制定有针对性的词表。
基本机制: Prince-Ling 工具本质上是一个迷你 PCFG 猜测生成器。它去掉了马尔可夫猜测生成,并用一个显著简化的基础结构替换了正常 PCFG 攻击中使用的基结构,该结构专门用于生成 PRINCE 词表。这使得能够按概率顺序生成字典单词,并关注这些单词在 PRINCE 攻击中的预期有用性。
使用 Prince-Ling
python3 prince-ling.py -r RULESET_NAME -s SIZE_OF_WORDLIST_TO_CREATE -o OUTPUT_FILENAMEpython3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt
如果您发现任何错误,或者有希望添加的功能,请在此 GitHub 页面打开一个 issue。我也接受 pull request,但理想情况下,请将 pull request 链接到某个 issue,以便我能更轻松地审查、提问并更好地理解您所做的更改。
使用 PCFG 对密码创建策略进行建模还有许多可以改进的地方。我非常欢迎新的想法、更改和建议。仅仅因为代码当前以某种方式工作并不意味着那是最佳选择。例如,当前方法中为字母字符串、数字、其他字符等生成掩码的基础结构,是因为它是“最简单”的实现选项而被选用的。我的团队曾激烈争论,更好的选择可能是从一个基础词开始,然后将其上的传统篡改规则建模为 PCFG 中的转换。因此,请随意在这段代码上大展拳脚!