同音替换密码示例

探索互动示例并从大密码等历史应用中学习。

Live Encryption Demo

Watch how the same plaintext produces different ciphertext each time

Plaintext

HELLO

Encryption #1

6339031527

Encryption #2

6925325324

Encryption #3

2500241440

Notice how the letter L in HELLO gets different symbols each time, making frequency analysis much harder.

Historical Context: The Great Cipher

1626-1890: The Great Cipher (Grande Chiffre) was used by Louis XIV of France with over 600 symbols. It remained unbroken for more than 200 years.

Key Innovation: Combined homophonic substitution with nomenclators (code words) for extreme security.

Final Decryption: French cryptanalyst Etienne Bazeries broke it in 1890 using statistical analysis and pattern recognition.

大密码(Grande Chiffre)

大密码作为历史上最成功的加密系统之一,保护法国国家机密长达 200 余年。

历史概述

大密码由父子密码学家 Antoine 和 Bonaventure Rossignol 于 1626 年创建,为路易十四的外交和军事通信服务。该系统具有以下特点:

  • 587 个唯一符号:远超 26 个英文字母的数量
  • 同音替换:常见字母(如 'E')拥有 10-12 种不同的符号选项
  • 命名符(Nomenclators):代表整个单词、名称或短语的特殊符号
  • 陷阱符号:用于迷惑密码分析者的空值和诱饵符号
  • 符号复用:某些符号根据上下文可以代表多个字母

为何有效

大密码的安全性来自多个层面:

  1. 频率掩蔽:'E' 有 12 个符号,每个只出现约 1% 的时间,掩盖了该字母 12.7% 的出现频率
  2. 复杂性:庞大的符号数量使穷举测试在实践中不可行
  3. 命名符:直接的词汇替换彻底消除了字母模式
  4. 刻意的模糊性:陷阱符号制造虚假模式,误导密码分析者

264 年的秘密

从 1626 年到 1890 年,大密码始终未被破解。在此期间:

  • 法国外交通信对敌人而言几乎无从破译
  • 缴获的信件无法透露任何军事计划
  • 该系统的声誉令人望而却步,打消了密码分析的念头
  • 密码知识仅限于法国王室和受信任的密码学家

Bazeries 的突破(1890 年)

Étienne Bazeries 最终通过以下方法组合破解了这一密码:

  • 统计坚持:多年耐心的频率分析
  • 历史研究:理解加密信件的政治背景
  • 模式识别:识别常见单词的重复序列
  • 有根据的猜测:测试关于命名符含义的假设

关键突破在于 Bazeries 意识到某些符号序列代表地名。一旦他识别出"les ennemis"(敌人),整个系统便迎刃而解。

理解频率平衡

上方的互动演示展示了为何同音密码能如此有效地抵抗频率分析。

工作原理

  1. 符号分配:与其将 A→X、B→Y、C→Z(一一对应)不同,同音密码根据字母频率为每个字母分配多个符号
  2. 随机选择:加密 'E' 时,密码从其 12 个指定符号中随机选取
  3. 平坦输出:密文的符号分布变得近乎均匀,隐藏了字母频率

与简单替换密码的比较

简单替换密码:

  • 一个符号始终代表同一个字母
  • 字母频率直接转化为符号频率
  • 'E' 出现 12.7% → 其密码符号出现 12.7%
  • 极易被频率分析破解

同音密码:

  • 多个符号代表常见字母
  • 频率分散到多个符号中
  • 'E' 出现 12.7% → 分散到 12 个符号中(每个约 1%)
  • 频率分析变得无效

亲自试试

使用上方的互动演示多次加密"HELLO",注意:

  1. 变化性:每次加密产生不同的密文
  2. 符号多样性:同一字母使用不同的符号
  3. 频率平坦性:没有单一符号主导输出

这种随机性是同音密码安全性的关键。

命名符:超越字母层面

高级同音系统融入了命名符——代表整个单词或短语的特殊符号。

什么是命名符?

命名符是以下类型的代码元素:

  • 代表完整单词(例如 ⊕ = "ATTACK",⊗ = "RETREAT")
  • 编码专有名词(例如 ⊙ = "NAPOLEON",◎ = "PARIS")
  • 表示常用短语(例如 ⊛ = "IMMEDIATELY",⊚ = "TOP SECRET")

命名符的优势

  1. 压缩:"ATTACK IMMEDIATELY" 变为仅两个符号
  2. 额外安全性:消除常见词语模式
  3. 语义隐藏:消息结构变得不透明
  4. 灵活性:可轻松为新出现的需求添加代码

历史用途

大密码广泛使用命名符:

  • 军事术语:军衔、武器、战术
  • 外交词汇:条约、联盟、大使
  • 专有名词:欧洲统治者、城市、将领
  • 行政短语:付款命令、物资请求

这使得密码几乎无法被渗透,即使部分字母映射被发现也无济于事。

练习题

通过以下挑战测试您的理解:

练习 1:简单同音加密

使用以下映射加密单词"TREE":

  • T: ①, ②
  • R: ③, ④
  • E: ⑤, ⑥, ⑦, ⑧

可能产生多少种不同的密文?(答案:2 × 2 × 4 × 4 = 64)

练习 2:频率分析

给定密文:① ② ③ ④ ⑤ ⑥ ③ ⑦ ④ ⑧

已知:

  • 符号 ③ 和 ④ 各出现两次(最高频)
  • 其他符号各出现一次

最可能由 ③ 和 ④ 代表的字母是哪个?为什么?

练习 3:模式识别

如果您知道"THE"在英语中频繁出现,并且在密文中多次看到符号序列 ㉑ ㉒ ㉓ 重复出现,您能推断出什么?

(答案:如果密码每个字母使用单个符号,这可能就是"THE"。如果每个字母使用多个符号,则不那么确定——但仍是有价值的线索!)

代码实现示例

Python:简单同音加密

import random

# 定义同音映射
homophonic_map = {
    'E': ['①', '②', '③', '④', '⑤'],
    'T': ['⑥', '⑦', '⑧'],
    'A': ['⑨', '⑩', '⑪'],
    # ... 添加更多字母
}

def encrypt_homophonic(plaintext):
    ciphertext = []
    for char in plaintext.upper():
        if char in homophonic_map:
            # 从可用符号中随机选取
            symbol = random.choice(homophonic_map[char])
            ciphertext.append(symbol)
        else:
            ciphertext.append(char)  # 保留空格/标点
    return ''.join(ciphertext)

# 使用示例
message = "HELLO WORLD"
encrypted = encrypt_homophonic(message)
print(f"明文:  {message}")
print(f"密文:  {encrypted}")

JavaScript:频率分布计算器

function calculateFrequency(text) {
  const frequency = {};
  let totalCount = 0;

  for (const char of text) {
    if (char !== ' ') {
      frequency[char] = (frequency[char] || 0) + 1;
      totalCount++;
    }
  }

  // 转换为百分比
  for (const char in frequency) {
    frequency[char] = (frequency[char] / totalCount) * 100;
  }

  return frequency;
}

// 比较简单替换与同音替换
const simple = "ABCABC";
const homophonic = "①②③①②③";

console.log("简单替换频率:", calculateFrequency(simple));
console.log("同音替换频率:", calculateFrequency(homophonic));

常见问题

问:为什么相同的明文每次产生不同的密文?

答:同音密码在字母有多个符号选项时使用随机选择。这是一个安全特性——它防止了模式识别,使每次加密都是唯一的。

问:安全的同音密码应该使用多少个符号?

答:历史系统使用了 50-600 个符号。符号越多,安全性越好,但加密速度越慢,密钥管理也越困难。手工系统的实用范围是 100-200 个符号。

问:我可以将同音密码与其他技术结合吗?

答:可以!历史上的密码员经常将同音替换与以下技术结合:

  • 命名符(代码词)
  • 换位(重新排列符号顺序)
  • 空符号(无意义的诱饵)
  • 超级加密(对已加密文本再次加密)

问:同音密码和代码有什么区别?

答:同音密码在字母层面操作,每个字母对应多个符号。代码在单词层面操作,整个单词对应唯一符号。命名符将两种方法结合在一起。

问:同音密码能抵抗量子计算吗?

答:不能。虽然同音密码能抵抗传统频率分析,但对量子计算攻击没有防护。现代加密标准(如 AES-256)才是量子抵抗所必需的。

问:历史上的密码员如何管理庞大的符号集?

答:他们使用密码本——列出所有符号及其含义的实体书籍。发送方和接收方都需要相同的副本。密码本的安全至关重要;一旦被缴获,所有过去和未来的消息都可能被解密。

问:有史以来使用的最大同音密码系统是什么?

答:拥有 587 个符号的大密码是有据可查的最大系统之一。据称某些军事系统使用了 1000 个以上的符号,但这些说法在历史上难以核实。

问:现代人工智能能轻松破解同音密码吗?

答:机器学习可以通过快速识别模式和测试假设来协助密码分析。然而,设计良好的、拥有 500 个以上符号的同音密码仍需要大量计算资源和密文才能破解。