news 2026/5/11 1:17:34

口令猜测—PCFG

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
口令猜测—PCFG

PCFG 口令猜测方法介绍

1. PCFG 是什么

PCFG 全称是Probabilistic Context-Free Grammar,即概率上下文无关文法。

在口令猜测研究中,PCFG 的核心思想是:

人类设置口令并不是完全随机的,而是具有明显的结构和习惯。

例如,很多人会使用如下形式的口令:

Password123! summer2024 qwerty123 admin@123

这些口令背后通常包含以下组成部分:

  • 单词 + 数字
  • 单词 + 年份
  • 单词 + 数字 + 符号
  • 键盘路径 + 数字
  • 大小写变化 + 后缀

PCFG 的目标就是从已有的明文口令集中学习这些结构及其概率,然后按照概率从高到低生成候选口令。

2. 一个简单例子

以口令:

Password123!
为例,PCFG 可能会将它拆分为:

Password123!
进一步抽象为:

A8 D3 O1
其中:

  • A8 = 8 个字母
  • D3 = 3 个数字
  • O1 = 1 个其他符号

同时,Password还包含大小写模式:

  • password -> 字母内容
  • ULLLLLLL -> 大小写模式
  • 123 -> 数字内容
  • ! -> 符号内容

因此,Password123!的生成概率可以近似表示为:

P(A8D3O1) × P(password | A8) × P(ULLLLLLL | C8) × P(123 | D3) × P(! | O1)

PCFG 会优先生成概率更高的组合。

3. PCFG 的训练阶段

PCFG 的训练输入通常是一批明文口令,例如:

123456 password Password123 summer2020 qwerty123

训练阶段主要包括以下步骤。

3.1 数据清洗

首先需要对原始数据进行预处理:

  • 去除 hash
  • 去除用户名、邮箱等非口令字段
  • 去除空行
  • 过滤异常字符
  • 统一编码
  • 进行长度限制

训练集通常应当保留重复口令。

例如:

123456 123456 123456 password password qwerty123

其中123456出现多次,这说明它是高频弱口令。
这种频率信息对 PCFG 很重要。

3.2 口令结构切分

PCFG 会将每个口令拆分成若干片段。

例如:

  • summer2020! -> A6 Y1 O1
  • qwerty123 -> K6 D3
  • admin@123 -> A5 O1 D3

常见符号含义如下:

  • A = Alphabet,字母串
  • D = Digit,数字串
  • O = Other,特殊符号
  • Y = Year,年份
  • K = Keyboard walk,键盘路径,例如 qwerty、1qaz
  • X = Context-sensitive,上下文敏感片段,例如 #1、;p
  • C = Capitalization,大小写模式
  • M = Markov / OMEN,字符级兜底模型

3.3 统计基础结构概率

训练程序会统计不同基础结构出现的次数。

例如:

  • A6D2 出现 5000 次
  • A8D3O1 出现 3000 次
  • D6 出现 2000 次
  • A5Y1 出现 1500 次

然后将次数转换为概率:

  • P(A6D2) = 5000 / 总结构数
  • P(A8D3O1) = 3000 / 总结构数
  • P(D6) = 2000 / 总结构数
  • P(A5Y1) = 1500 / 总结构数

这些基础结构描述了人类口令的整体形状。

3.4 统计片段内部概率

除了统计整体结构,PCFG 还会统计每类片段中具体内容的概率。

例如,在所有 D3 数字片段中:

  • 123
  • 001
  • 520
  • 666
  • 888

在所有 A8 字母片段中:

  • password
  • princess
  • computer
  • iloveyou

在所有 C8 大小写模式中:

  • LLLLLLLL
  • ULLLLLLL
  • UUUUUUUU

因此,PCFG 不仅知道:

A8D3 很常见
还知道:

  • A8 中password很常见
  • D3 中123很常见
  • C8 中LLLLLLLLULLLLLLL很常见

3.5 保存规则集

训练完成后,PCFG 会将学习到的概率模型保存为规则集。

在该项目中,规则集通常保存在:

Rules/<RULESET_NAME>/
例如:

Rules/MyRule/
其中包含:

Grammar/grammar.txt # 基础结构概率 Alpha/*.txt # 字母串概率 Digits/*.txt # 数字串概率 Other/*.txt # 特殊符号概率 Capitalization/*.txt # 大小写模式概率 Keyboard/*.txt # 键盘路径概率 Years/*.txt # 年份概率 Context/*.txt # 上下文敏感片段概率 Omen/ # Markov / OMEN 模型

4. PCFG 的猜测阶段

训练完成后,PCFG 就可以根据规则集生成候选口令。

猜测阶段的核心目标是:

按照概率从高到低生成候选口令。

4.1 按基础结构排序

假设模型学习到以下结构概率:

  1. D6 概率最高
  2. A8
  3. A6D2
  4. A8D3
  5. A8D3O1

那么猜测器会优先考虑这些高概率结构。

4.2 组合具体片段

例如结构:

A8D3
可能生成:

  • password123
  • princess123
  • computer001
  • iloveyou520

其中:

  • password 来自 A8 字母串
  • 123 来自 D3 数字串

如果再加入大小写模式,可能生成:

  • password123
  • Password123
  • PASSWORD123

4.3 候选口令概率计算

以:

Password123
为例,它可能由以下部分组成:

  • 基础结构:A8D3
  • 字母内容:password
  • 大小写模式:ULLLLLLL
  • 数字内容:123

其概率可表示为:

P(Password123) = P(A8D3) × P(password | A8) × P(ULLLLLLL | C8) × P(123 | D3)

PCFG 会优先输出概率更高的候选口令。

5. PCFG 相比普通字典攻击的优势

普通字典攻击通常只是尝试已有词表:

  • password
  • 123456
  • qwerty

规则攻击可能会做一些简单变换:

  • password1
  • password123
  • password!

PCFG 则会学习更系统的规律:

  • 哪些整体结构常见
  • 哪些单词常见
  • 哪些数字后缀常见
  • 哪些符号常见
  • 哪些大小写模式常见
  • 哪些键盘路径常见

因此,PCFG 能够自然生成类似下面的候选口令:

  • Summer2024!
  • Password123
  • welcome@123
  • Qwerty123

它不是简单照搬训练集,而是根据学到的结构和片段进行组合。

6. OMEN / Markov 的作用

传统 PCFG 有一个问题:

如果某个字母串在训练集中从未出现过,PCFG 可能无法生成它。

例如测试集中有:

blueforest2025
如果训练集中没有出现过blueforest,传统 PCFG 很可能无法生成这个候选。

因此,很多 PCFG 系统会结合 Markov 模型或 OMEN 模型作为兜底。

Markov 模型学习的是字符之间的转移概率,例如:

  • p -> a
  • pa -> s
  • pas -> s
  • pass -> w

它不依赖完整单词是否出现过,而是学习字符序列是否“像人类口令”。

在该项目中,coverage参数用于控制 PCFG 与 OMEN 的比例:

  • -c 1.0只使用 PCFG,不使用 Markov / OMEN
  • -c 0.6默认设置,主要使用 PCFG,同时加入一部分 OMEN
  • -c 0.0基本只使用 OMEN

7. PCFG 的经典局限

PCFG 是经典方法,但也有局限。

7.1 依赖训练集

PCFG 的效果高度依赖训练集。

  • 如果训练集和目标测试集相似,效果通常较好;
  • 如果跨语言、跨地区、跨网站,效果可能明显下降。

7.2 容易受到高频口令影响

如果训练集中存在大量重复弱口令,例如:

  • 123456
  • password
  • qwerty

那么 PCFG 在曲线前段可能表现很好。

但这并不一定说明模型的泛化能力强,因此实验中通常需要同时报告:

  • 按样本计的成功率
  • 按唯一口令计的成功率

7.3 对复杂语义变换建模较弱

传统 PCFG 对以下变换的建模能力有限:

  • password -> p@ssw0rd
  • love -> luv
  • company name + year + !
  • username + birthday

这些更复杂的变换往往需要更强的上下文建模或神经网络模型。

7.4 生成速度相对较慢

PCFG 为了按概率顺序生成候选,需要维护概率排序和组合展开。
因此它通常比 GPU 上的大规模暴力猜测或简单规则攻击更慢。

8. PCFG 的发展方向

PCFG 后续的研究主要围绕“更准确地模拟人类口令生成行为”。

常见改进方向包括:

  • 更好的口令分词算法
  • 更好的 leetspeak 检测
  • 更好的大小写与变形规则建模
  • 更好的 Markov / OMEN 混合策略
  • 结合用户名、邮箱、网站名等上下文信息
  • 结合 RNN、GAN、Transformer 等神经网络模型
  • 优化概率排序和候选生成速度

可以将传统 PCFG 理解为一种早期但非常经典的可解释口令生成模型。

它最大的优点是:

每一个候选口令为什么被优先猜测,都是可以解释的。

例如:

为什么先猜Password123
因为:

  • A8D3 这种结构很常见
  • password 这个字母串很常见
  • ULLLLLLL 这种大小写模式很常见
  • 123 这个数字后缀很常见

9. 总结

PCFG 口令猜测方法可以概括为:

  • 训练阶段
    从明文口令集中学习人类口令的结构、片段和概率。

  • 猜测阶段
    按照概率从高到低组合这些结构和片段,生成候选口令。

  • 核心优势
    比普通字典攻击更能模拟人类设置口令的习惯。

  • 核心局限
    依赖训练集,生成速度较慢,对复杂语义变换建模有限。

一句话总结

PCFG 通过学习“人类口令的结构概率”和“各类片段的出现概率”,按概率顺序生成最可能的人类口令候选。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 1:17:34

Dive开源MCP主机:统一AI工具调用,打造跨模型智能体桌面应用

1. 项目概述&#xff1a;Dive&#xff0c;一个开源的MCP主机桌面应用如果你和我一样&#xff0c;每天都在和各种大语言模型打交道&#xff0c;从ChatGPT到Claude&#xff0c;再到本地部署的Ollama&#xff0c;那你肯定也遇到过这样的烦恼&#xff1a;每个模型都有自己的界面&am…

作者头像 李华
网站建设 2026/5/11 1:14:31

开源知识图谱系统KnowledgeCanvas:构建个人与团队的网状知识库

1. 项目概述&#xff1a;一个面向个人与团队的知识管理新范式最近在整理个人项目和团队文档时&#xff0c;我再次被信息碎片化的问题困扰。笔记散落在不同软件&#xff0c;项目文档版本混乱&#xff0c;查找一个过去的决策依据要翻遍聊天记录、邮件和云盘。我相信这是很多开发者…

作者头像 李华
网站建设 2026/5/11 1:11:30

AI 让执行变廉价了,但判断力没有

你有没有过这样的时刻&#xff1a; 让 AI 帮你写完一个方案&#xff0c;做完一份报告&#xff0c;生成一段代码。完成后你扫了一眼&#xff0c;觉得还不错&#xff0c;就发出去了。 然后有人问你&#xff1a;为什么选这个方案&#xff0c;不是另一个&#xff1f; 你停了一下。 …

作者头像 李华
网站建设 2026/5/11 1:10:44

开源材料信息学工具OpenClaw:模块化设计与机器学习流水线实践

1. 项目概述&#xff1a;一个面向材料科学研究的开源协作实验室最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫cranesun1226/openclaw-materials-lab。光看这个名字&#xff0c;就透着一股浓浓的“硬核”味儿——“OpenClaw”和“Materials Lab”组合在…

作者头像 李华
网站建设 2026/5/11 1:06:42

Cursor AI 编辑器规则集:提升代码生成效率与标准化实践

1. 项目概述&#xff1a;一个为 Cursor 编辑器定制的规则集如果你和我一样&#xff0c;日常重度依赖 Cursor 这款 AI 驱动的代码编辑器&#xff0c;那你一定对它的“规则”&#xff08;Rules&#xff09;功能又爱又恨。爱的是&#xff0c;它能通过一套预设的指令&#xff0c;精…

作者头像 李华
网站建设 2026/5/11 0:58:39

Next.js 16.2 AI智能体实战:从反模式诊断到自动化性能优化

1. 项目背景与核心价值最近在折腾一个挺有意思的Demo项目&#xff0c;它来自Vercel的工程师Aurora Scharff&#xff0c;叫“nextjs-16.2-ai-improvements”。这名字听起来有点拗口&#xff0c;但说白了&#xff0c;这就是一个专门用来“钓鱼”的Next.js应用。项目本身是一个小型…

作者头像 李华