当前位置: 首页 > news >正文

口令猜测—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 通过学习“人类口令的结构概率”和“各类片段的出现概率”,按概率顺序生成最可能的人类口令候选。

http://www.jsqmd.com/news/792819/

相关文章:

  • PCB前期构思:用AI绘制元器件布局与排布参考简图的实操教程
  • 在Windows上完美使用Switch手柄:JoyCon-Driver完整指南
  • 第一章 物理学困境分析
  • 开源知识图谱系统KnowledgeCanvas:构建个人与团队的网状知识库
  • 一文吃透软件工程:从理论到实战,新手也能快速入门
  • 从零开始做毕业答辩 PPT,用哪几个生成工具效率最高?
  • Dive开源MCP主机:统一AI工具调用,打造跨模型智能体桌面应用
  • Claude Code 安装与配置
  • GPU上高效模拟FP64计算:INT8硬件加速科学计算
  • ARM9EJ-S调试架构与时钟同步机制详解
  • YoMo框架实战:基于QUIC构建毫秒级实时数据流处理应用
  • Qt动画效果基础:不用QPropertyAnimation,如何用update()和坐标系平移让图片动起来?
  • 2026最新VR设备实测TOP4:避坑指南+安徽观影权威认证
  • YOLOv11最新创新改进系列:YOLOv11多模态(RGB+IR)融合BoTNet,保留CNN在特征提取、平移不变性等方面的优势,同时注入Transformer强大的全局建模能力!
  • Go语言Saga模式实践:Conforme库实现分布式数据一致性
  • 智能体关键实现技术合集
  • 如何零成本将各种 AI 编程工具接入免费大模型?
  • 从“找不到盘”到“秒进系统”:一次GPT/MBR分区表转换的实战救赎
  • Flutter for OpenHarmony 三方库实战:使用 axios 构建校园通讯录成员列表
  • 开源AI导航站:从数据结构到社区协作的实战解析
  • 【Ultralytics】「14」数据增强策略:马赛克、混合、仿射变换与分类增强
  • IP5387微立芯支持三路C口快充的140W新国标移动电源管理芯片
  • 抛弃玩具级引擎!高危化工安全仿真如何利用UE5粒子系统与底层优化实现毫秒级防抖?
  • 基于对 goweb3 框架代码的深入分析,我为您提供以下评价
  • CoPaw:开源本地AI工作站部署与多智能体协作实战指南
  • Proteus仿真新手必看:从电阻到LCD,这30个元器件你放对了吗?
  • 基于开源AiChat搭建私有化AI对话应用:从架构设计到部署调优全指南
  • ctf show web入门37
  • 不到成衣价买定制?希颜西装体验:899起,商务休闲两穿
  • 企业团队如何利用Taotoken统一管理API密钥与下载用量报告