关键词密码频率分析:高级密码分析指南
频率分析是破解关键词密码和其他单表替换系统最强大、最基本的技术。本综合指南探讨古典密码现代密码分析中使用的数学基础、实际实现和高级技术。
理论基础
频率分析的数学基础
频率分析的有效性源于自然语言中字母的非均匀分布。英文文本表现出即使经过单表替换后依然存在的可预测模式,形成密码分析师可以利用的统计指纹。
字母频率分布
标准英文字母频率(每 100 个字母):
| 字母 | 频率 | 字母 | 频率 | 字母 | 频率 |
|---|---|---|---|---|---|
| E | 12.70% | T | 9.06% | A | 8.17% |
| O | 7.51% | I | 6.97% | N | 6.75% |
| S | 6.33% | H | 6.09% | R | 5.99% |
| D | 4.25% | L | 4.03% | C | 2.78% |
关键洞察:E 和 Z 的频率比约为 180
,为密码分析提供了强大的统计杠杆。统计测量
重合指数(IC) 从文本中随机选取两个字母相同的概率:
IC = Σ(ni(ni-1)) / (N(N-1))
其中:
- ni = 字母 i 的频率
- N = 文本总长度
英文文本:IC ≈ 0.065 随机文本:IC ≈ 0.038 关键词密码:IC ≈ 0.065(保持英文特征)
卡方拟合优度 测量观测频率与预期英文模式的匹配程度:
χ² = Σ((Observed - Expected)² / Expected)
较低的 χ² 值表示与英文文本模式更好的匹配。
密码分析方法论
第一阶段:初始评估
文本长度分析
可靠频率分析所需的最小文本长度:
- 25-50 个字母:基本模式识别成为可能
- 50-100 个字母:频率分析变得可靠
- 100+ 个字母:高置信度统计分析
- 300+ 个字母:成功密码分析几乎确定
初步统计评估
第一步:计算基本频率
def calculate_frequencies(text):
clean_text = ''.join(c.upper() for c in text if c.isalpha())
total = len(clean_text)
frequencies = {}
for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
count = clean_text.count(letter)
frequencies[letter] = (count / total) * 100 if total > 0 else 0
return frequencies
第二步:重合指数计算
def index_of_coincidence(text):
clean_text = ''.join(c.upper() for c in text if c.isalpha())
n = len(clean_text)
if n <= 1:
return 0
letter_counts = {}
for letter in clean_text:
letter_counts[letter] = letter_counts.get(letter, 0) + 1
ic = sum(count * (count - 1) for count in letter_counts.values())
return ic / (n * (n - 1))
第二阶段:模式识别
高频字母识别
密文中最频繁的字母可能对应明文中的 E、T、A、O。这构成了基于频率攻击的基础。
映射策略:
- 识别最频繁的密码字母 → 可能代表 E
- 第二频繁 → 可能是 T 或 A
- 第三频繁 → 完成 E-T-A 三元组
- 继续映射频率层次
常用词模式识别
三字母词
- THE(最常见):寻找重复的三字母模式
- AND:第二常见的三字母词
- FOR、ARE、BUT:其他常见模式
双字母 英文中常见的双字母:LL、SS、EE、OO、TT、FF、RR
词尾
- -ING:非常常见的词尾模式
- -ION:在正式文本中常见
- -TION:较长的常见词尾
示例分析过程
考虑这段密文:
QGJ OUFLV YPMEH AMW DUITS MQJP QGJ KCXS BAZ
第一步:频率计数 最频繁的字母:Q、J、M、G、E(多次出现)
第二步:模式识别
- "QGJ"出现两次 → 可能是"THE"
- 若 Q=T,G=H,J=E,则:
- T→Q,H→G,E→J 已确定
第三步:扩展 使用 Q=T,G=H,J=E,部分解密得到:
THE ?U??E ?H?E? ??E ?U??? ??EH THE ????E ???
第四步:词语识别 "THE ?U??E"提示"THE QUICK",确认更多映射。
第三阶段:高级技术
双字母和三字母分析
最常见的英文双字母: TH、HE、IN、ER、AN、RE、ED、ND、ON、EN
双字母频率分析:
def analyze_bigrams(text):
clean_text = ''.join(c.upper() for c in text if c.isalpha())
bigrams = {}
for i in range(len(clean_text) - 1):
bigram = clean_text[i:i+2]
bigrams[bigram] = bigrams.get(bigram, 0) + 1
total_bigrams = len(clean_text) - 1
return {bg: (count/total_bigrams)*100
for bg, count in bigrams.items()}
常见英文三字母组: THE、AND、ING、HER、HAT、HIS、THA、ERE、FOR、ENT
关键词恢复技术
一旦建立了足够的字母映射,重建原始关键词:
重建算法:
- 从已建立的映射识别密码字母表
- 提取关键词部分(字母表字母顺序之前出现的字母)
- 验证关键词,检查是否为常见词或模式
示例重建: 若密码字母表为:SECRETABDFGHIJKLMNOPQUVWXYZ 则关键词为:SECRET
高级统计方法
互相关重合指数 比较两段文本以测量相似性:
def mutual_ic(text1, text2):
# Calculate how similar two texts are in terms of letter distribution
freq1 = calculate_frequencies(text1)
freq2 = calculate_frequencies(text2)
mic = sum(freq1[letter] * freq2[letter] for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
return mic / 10000 # Normalize
自动化密码分析工具
评分函数
英文文本可能性评分
def english_score(text):
# Standard English letter frequencies
english_freq = {
'E': 12.7, 'T': 9.1, 'A': 8.2, 'O': 7.5, 'I': 7.0,
'N': 6.7, 'S': 6.3, 'H': 6.1, 'R': 6.0, 'D': 4.3
}
text_freq = calculate_frequencies(text)
score = 0
for letter, expected in english_freq.items():
observed = text_freq.get(letter, 0)
score += abs(observed - expected)
return 100 - score # Higher score = more English-like
字典词检测
def count_english_words(text):
common_words = {'THE', 'AND', 'FOR', 'ARE', 'BUT', 'NOT', 'YOU', 'ALL'}
words = text.upper().split()
english_word_count = sum(1 for word in words if word in common_words)
return english_word_count / len(words) if words else 0
字典攻击集成
字典攻击
def dictionary_attack(ciphertext, word_list):
best_score = 0
best_result = None
for keyword in word_list:
cipher = KeywordCipher(keyword)
decrypted = cipher.decrypt(ciphertext)
score = english_score(decrypted)
if score > best_score:
best_score = score
best_result = (keyword, decrypted, score)
return best_result
实际案例研究
案例研究 1:短消息分析
密文:"GJKKF VFEKX" 长度:9 个字母(非常短)
分析方法:
- 由于长度原因,频率分析不可靠
- 模式识别是主要方法
- "GJKKF"有双字母 → 提示常见英文词
- "LL"是英文中常见的双字母
- 猜测:"HELLO" → J=L,G=H 等
结果:通过模式匹配识别出关键词"ZEBRA"。
案例研究 2:中等文本分析
密文:"QGJ OUFLV YPMEH AMW DUITS MQJP QGJ KCXS XMKK" 长度:35+ 个字母
分析过程:
- 频率分析:Q(3)、J(3)、G(2) 最频繁
- 模式识别:"QGJ"出现两次
- 词语猜测:QGJ = THE 可能性很高
- 扩展:使用 Q=T,G=H,J=E 揭示更多模式
- 验证:新出现的文本在英文中有意义
结果:成功解密揭示"THE QUICK BROWN FOX JUMPS OVER THE LAZY ROLL"
案例研究 3:长文本分析
统计可靠性:有了 100+ 个字母,频率分析变得高度可靠。
方法论:
- 纯频率匹配成为主要技术
- 卡方检验验证映射
- 双字母分析确认语言模式
- 自动评分对解答质量排序
防御频率分析
关键词密码的局限性
固有脆弱性:
- 单表性质:每个字母始终映射到相同的密码字母
- 频率保留:英文字母模式在加密后依然存在
- 模式维持:词语结构和常见序列保持可见
加强技术
更长的关键词:
- 增加密钥空间大小
- 降低字母排列的可预测性
- 使字典攻击效果较差
随机关键词:
- 避免出现在字典中的常见词
- 使用无意义的字母组合
- 以密码学方式生成关键词
消息准备:
- 删除空格和标点
- 使用专业词汇
- 采用空字符或填充
历史对策
nomenclator:将替换与代码词结合 同音替换:为常见明文字母使用多个密码字母 多字图系统:对字母组而非单个字母进行加密
现代应用
教育价值
关键词密码的频率分析为以下方面提供了出色的入门:
- 密码学中的统计推理
- 模式识别技术
- 安全的数学方法
- 密码学演变的历史背景
CTF 和竞赛用途
夺旗竞赛通常包含:
- 古典密码挑战
- 频率分析谜题
- 多阶段密码问题
- 限时破解竞赛
研究应用
历史密码分析用于:
- 考古文件分析
- 军事历史研究
- 外交往来研究
- 文学分析加密文本
高级主题
多语言分析
非英文文本:
- 不同的频率分布
- 语言识别技术
- 多语言密码检测
- 文化语言模式
计算复杂性
时间复杂度:完全暴力破解的 O(26!) 空间复杂度:映射存储的 O(26) 实际限制:字典攻击显著减少搜索空间
现代相关性
虽然关键词密码在密码学上已过时,但频率分析原理适用于:
- 对现代系统的侧信道攻击
- 加密通信的流量分析
- 作者归属的文体分析
- 数据压缩算法设计
频率分析仍然是密码分析中最优雅、最强大的技术之一,展示了数学洞察力如何能够克服看似安全的加密方法。关键词密码是理解这些基本原理的完美教学载体,这些原理继续影响着现代密码分析。