1.5 维吉尼亚密码:多表替换的巅峰


1.5 维吉尼亚密码:多表替换的巅峰

本节摘要:维吉尼亚密码用密钥词轮换使用多个凯撒移位表,让同一明文字母在不同位置变成不同密文字母,把单表替换的死穴——频率尖峰——磨平了。它顶着"不可破译"的名声近三百年。本节讲透它的方阵结构、加解密过程与自动密钥变体,同时亲手埋下它真正的死因:密钥的周期性。

先看一段"神话级"密文的工作过程

单表替换的教训(1.3 节)是:一张表用到底,频率分析迟早找上门。维吉尼亚的回答是备一整柜替换表,按节奏轮换使用。具体做法:选定一个密钥词(例如 LEMON),把它在明文上方反复平铺到等长;加密第几个字母,就看该位置上方密钥字母指定哪一行移位表——A 行即移 0 位,B 行移 1 位,依此类推,L 行即移 11 位。

拿经典示例走一遍:明文 ATTACKATDAWN,密钥 LEMONLEMONLE。

明文: A T T A C K A T D A W N 密钥: L E M O N L E M O N L E 移位: 11 4 12 14 13 11 4 12 14 13 11 4 密文: L X F O P V E F R N H R

看首字母 A 的遭遇:它在位置一遇到 L 行(移 11 位)变成 L,在位置四遇到 O 行(移 14 位)变成 O,在位置七遇到 E 行(移 4 位)变成 E。同一个明文字母,三处密文各不相同——频率分析的立足点被抽掉了。反过来,密文里两处出现的 R,一处来自 A、一处来自 D。字母频率的尖峰被摊平成丘陵,这就是它被称为"不可破译之密码"(le chiffre indéchiffrable)的底气。

图:维吉尼亚方阵与密钥行的选取

图:维吉尼亚方阵与密钥行的选取

二、结构与变体:一套方阵,多种玩法

完整方阵共 26 行,每行都是一张凯撒移位表,密钥词相当于把 26 张表编排成一条循环使用的队列。历史上它常被归到法国外交官维吉尼亚名下(因此得名),但密码史研究普遍认为 1553 年意大利人贝拉索提出的方案才是这一构造的源头,维吉尼亚后来贡献的其实是自动密钥变体:密钥词用完之后,接着用明文本身继续充当密钥,让"轮换节奏"不再简单重复。这一改动确实堵住了卡西斯基测试的一部分攻击面——代价是错一位、后面全错,十九世纪的电报员并不喜欢它。

密钥词的每个字母对应 26 种可能,五个字母的密钥理论上有 26⁵ ≈ 1188 万种组合——用人力逐个试遍依然不现实,与单表替换一样,它的安全性缺口不在穷举面,而在结构面。

用 Python 把加解密写出来,顺便验证上面那段经典示例:

def vigenere(text, key, decrypt=False): text = "".join(c for c in text.upper() if c.isalpha()) key = key.upper() shift = -1 if decrypt else 1 out = [] for i, ch in enumerate(text): k = ord(key[i % len(key)]) - 65 # 第 i 位密钥字母决定的移位 out.append(chr((ord(ch) - 65 + shift * k) % 26 + 65)) return "".join(out) ct = vigenere("ATTACKATDAWN", "LEMON") print(ct) # LXFOPVEFRNHR print(vigenere(ct, "LEMON", decrypt=True)) # ATTACKATDAWN

⚠️ 常见误解:维吉尼亚"打破"了频率分析。它只是推迟了频率分析——只要摸清密钥长度,把密文按位置切成若干组,每组恰好是一张单表替换(甚至只是一张凯撒表),频率分析原样适用。真正让频率分析彻底失效的方案要等到第 3 章之后才出现。

变体图谱与三个实战问答

  • 格朗斯福特密码:密钥换成数字串,移位量只有 0 到 9 十种,方便士兵记忆;代价是密钥空间骤缩为十的 n 次方,十八世纪军中常用,也因此更早沦陷。
  • 博福特变体:把加法换成"密钥字母减明文字母",加密解密共用同一张方阵,海军偏爱它的对称性,攻防性质与原版几乎相同。
  • 滚钥密码:密钥不再循环,而是一段与明文等长的约定文本。周期性彻底消失,卡西斯基测试随之失效——但它引入了新软肋:密钥文本自身的语言频率会渗入密文,且一整本书的密钥分发难题比密码本身更难。

问答一:既然密钥越长越安全,为什么不直接用超长密钥?因为维吉尼亚的密钥仍需人工传递与保管,长密钥的泄露概率与分发成本会吞掉安全增益——这个困境要到一次一密才在理论上、到公钥密码才在工程上被解开。

问答二:自动密钥为什么没有普及?密钥接明文续走,错听半个字母之后整段全错,电报时代的高误码率让它成了纸上最优、线上最难用的方案。

问答三:为什么卡西斯基测试需要足够长的密文?重复片段对齐是概率事件,密文越长,同一密钥相位两次命中的机会越多——百字以内的维吉尼亚密文几乎测不出周期,这也是它能靠短报文苟活多年的原因。

从维吉尼亚到流密码的一步之遥

把维吉尼亚的密钥词换成"永不重复的伪随机字节流",它就蜕变成了流密码:逐位掩码的形状完全一样,改变的只有密钥流的生成方式与质量。这个视角能解释两件事:其一,卡西斯基攻击的本质是密钥流周期性,流密码用足够长的非重复密钥流直接免疫它;其二,密钥流的统计质量成了新的命门——5.2 节 RC4 的输出偏差与 3.4 节的教训,都是维吉尼亚时代"密钥文本自身会泄密"这一古老观察的现代化身。古典与现代之间没有断层,只有参数与器件的升级。

一个动手小验证

把本节的加解密函数与 1.3 节的凯撒频率打分器组合起来:对密文 LXFOPVEFRNHR 这样十来个字母的短样本做逐组频率打分,命中率极低;换一段两百字母以上、用同一密钥加密的文本,命中率立刻回升。亲手跑一遍就能体会到:维吉尼亚的安全感几乎全部来自"样本不足",而不是来自结构强度——这正是下一节统计攻击要乘胜追击的缺口。

本节要点回顾

  • 多表替换:密钥词的每个字母对应一行凯撒移位表,逐位轮换使用,同一明文字母在不同位置产生不同密文字母;
  • 经典示例:ATTACKATDAWN 用 LEMON 加密得 LXFOPVEFRNHR,可动手复核;
  • 自动密钥变体用明文接续密钥,缓解周期性但引入误差扩散;
  • 命门伏笔:密钥的周期性重复会让密文留下可供测量的规律——这正是下一节卡西斯基测试的切入点。

神话维持了近三百年。下一节换到破译者一侧,看频率分析与卡西斯基测试如何联手终结整个古典时代。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U