关键字密码频率分析和密码分析

分析关键字密码文本中的字母频率以识别模式并破解替换字母表。此互动工具可视化字符分布,将其与英语语言规范进行比较,并建议最可能的关键字候选。

Keyword Cipher Frequency Analysis & Cryptanalysis

Analyze text to detect encryption patterns, break keyword ciphers, and perform statistical cryptanalysis

Characters: 0 | Letters: 0
Quick samples:

关键词密码频率分析:高级密码分析指南

频率分析是破解关键词密码和其他单表替换系统最强大、最基本的技术。本综合指南探讨古典密码现代密码分析中使用的数学基础、实际实现和高级技术。

理论基础

频率分析的数学基础

频率分析的有效性源于自然语言中字母的非均匀分布。英文文本表现出即使经过单表替换后依然存在的可预测模式,形成密码分析师可以利用的统计指纹。

字母频率分布

标准英文字母频率(每 100 个字母):

字母频率字母频率字母频率
E12.70%T9.06%A8.17%
O7.51%I6.97%N6.75%
S6.33%H6.09%R5.99%
D4.25%L4.03%C2.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。这构成了基于频率攻击的基础。

映射策略

  1. 识别最频繁的密码字母 → 可能代表 E
  2. 第二频繁 → 可能是 T 或 A
  3. 第三频繁 → 完成 E-T-A 三元组
  4. 继续映射频率层次
常用词模式识别

三字母词

  • 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

关键词恢复技术

一旦建立了足够的字母映射,重建原始关键词:

重建算法

  1. 从已建立的映射识别密码字母表
  2. 提取关键词部分(字母表字母顺序之前出现的字母)
  3. 验证关键词,检查是否为常见词或模式

示例重建: 若密码字母表为: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+ 个字母

分析过程

  1. 频率分析:Q(3)、J(3)、G(2) 最频繁
  2. 模式识别:"QGJ"出现两次
  3. 词语猜测:QGJ = THE 可能性很高
  4. 扩展:使用 Q=T,G=H,J=E 揭示更多模式
  5. 验证:新出现的文本在英文中有意义

结果:成功解密揭示"THE QUICK BROWN FOX JUMPS OVER THE LAZY ROLL"

案例研究 3:长文本分析

统计可靠性:有了 100+ 个字母,频率分析变得高度可靠。

方法论

  1. 纯频率匹配成为主要技术
  2. 卡方检验验证映射
  3. 双字母分析确认语言模式
  4. 自动评分对解答质量排序

防御频率分析

关键词密码的局限性

固有脆弱性

  • 单表性质:每个字母始终映射到相同的密码字母
  • 频率保留:英文字母模式在加密后依然存在
  • 模式维持:词语结构和常见序列保持可见
加强技术

更长的关键词

  • 增加密钥空间大小
  • 降低字母排列的可预测性
  • 使字典攻击效果较差

随机关键词

  • 避免出现在字典中的常见词
  • 使用无意义的字母组合
  • 以密码学方式生成关键词

消息准备

  • 删除空格和标点
  • 使用专业词汇
  • 采用空字符或填充
历史对策

nomenclator:将替换与代码词结合 同音替换:为常见明文字母使用多个密码字母 多字图系统:对字母组而非单个字母进行加密

现代应用

教育价值

关键词密码的频率分析为以下方面提供了出色的入门:

  • 密码学中的统计推理
  • 模式识别技术
  • 安全的数学方法
  • 密码学演变的历史背景
CTF 和竞赛用途

夺旗竞赛通常包含:

  • 古典密码挑战
  • 频率分析谜题
  • 多阶段密码问题
  • 限时破解竞赛
研究应用

历史密码分析用于:

  • 考古文件分析
  • 军事历史研究
  • 外交往来研究
  • 文学分析加密文本

高级主题

多语言分析

非英文文本

  • 不同的频率分布
  • 语言识别技术
  • 多语言密码检测
  • 文化语言模式
计算复杂性

时间复杂度:完全暴力破解的 O(26!) 空间复杂度:映射存储的 O(26) 实际限制:字典攻击显著减少搜索空间

现代相关性

虽然关键词密码在密码学上已过时,但频率分析原理适用于:

  • 对现代系统的侧信道攻击
  • 加密通信的流量分析
  • 作者归属的文体分析
  • 数据压缩算法设计

频率分析仍然是密码分析中最优雅、最强大的技术之一,展示了数学洞察力如何能够克服看似安全的加密方法。关键词密码是理解这些基本原理的完美教学载体,这些原理继续影响着现代密码分析。