古典密码入门:从凯撒到维吉尼亚,揭秘替换与置换的核心原理
1. 项目概述从“凯撒”到“维吉尼亚”古典密码的魅力与基石如果你对密码学感兴趣或者想了解现代加密技术背后的历史脉络那么古典密码绝对是一个无法绕开的起点。这不仅仅是历史课更是理解密码学核心思想的绝佳途径。古典密码顾名思义指的是在计算机出现之前主要依靠纸笔、简单工具或机械装置实现的加密方法。它们不像今天的AES、RSA那样复杂但其设计思想——替换、移位、置换——却构成了现代密码学的基石。我最初接触密码学就是从亲手用纸笔“破解”一段凯撒密码开始的那种亲手揭开秘密的成就感至今难忘。“古典密码一”这个标题意味着我们将系统性地深入这个领域。本文的目标是为你搭建一个清晰、实用的古典密码知识框架。我们将从最基础的凯撒密码出发逐步深入到更复杂的多表替换密码如维吉尼亚密码。我不会只停留在“是什么”的层面而是会详细拆解“为什么”这么设计以及“如何”手工实现和破解。无论你是计算机专业的学生、信息安全爱好者还是单纯对谜题和逻辑感兴趣的朋友都能从这些看似简单的“游戏”中窥见信息隐藏与保护的原始智慧。你会发现在没有计算机的时代人类的智慧是如何在保密通信的攻防中不断演进的。2. 古典密码的核心思想与分类体系在深入具体算法之前我们必须先理解古典密码赖以生存的两种最核心、最根本的操作思想替换和置换。几乎所有古典密码都是这两种思想的组合或变体。2.1 替换让字母“改头换面”替换顾名思义就是将明文中的每一个字母按照某种固定的规则替换成另一个字母或符号。这是古典密码中最直观、也最常用的方法。核心原理建立一个从明文字母表到密文字母表的一一映射。例如规定 A-D, B-E, C-F, ... Z-C。生活类比就像我们小时候玩的“密码本”把“苹果”写成“香蕉”把“回家”写成“出门”。只要通信双方持有同一本“密码本”即相同的替换规则就能进行秘密通信。安全性根源替换密码的安全性完全依赖于这个映射规则的保密性。一旦规则泄露所有加密信息将一览无余。更致命的是由于规则固定密文中字母的统计特性频率分布与明文一致这为破解留下了巨大漏洞。2.2 置换给字母“重新排队”置换也称为“重排”或“换位”它不改变字母本身而是打乱字母在明文中的出现顺序。核心原理按照某种算法重新排列明文中的字符位置。解密时再按照逆序规则排列回来。生活类比想象你把一句话的每个字写在单独的卡片上然后像洗牌一样彻底打乱顺序再把打乱后的卡片序列交给对方。对方只有知道你是怎么“洗牌”的才能把卡片按原顺序排好读出原文。安全性根源置换密码保留了明文的所有字符因此密文的字母频率分布与明文完全相同。破解者的主要任务是找出那个“洗牌”的规律。单纯的置换密码通常比单纯的替换密码更容易被破解因为它不改变字符的“身份”。在实际应用中古典密码常常将替换和置换结合使用以增强安全性。例如先对明文进行一次替换加密再对结果进行一次置换加密这样能同时扰乱字符的“身份”和“位置”。2.3 古典密码的三大分类基于上述核心思想我们可以将古典密码分为三大类这有助于我们建立清晰的学习路径单表替换密码整个加密过程只使用一个固定的替换表。这是最简单也最脆弱的一类。凯撒密码是其最著名的代表而仿射密码则为其增加了一点数学复杂度。多表替换密码使用多个替换表在加密过程中根据某个密钥动态地选择使用哪个表。这极大地破坏了密文的统计特性安全性显著提高。维吉尼亚密码是这一类中的佼佼者在几个世纪内都被认为是“不可破译”的。置换密码专注于打乱字符顺序。栅栏密码和矩阵置换密码是典型的例子。它们通常不单独使用而是作为增强其他密码安全性的辅助手段。理解这个分类体系就像拿到了一张地图。接下来我们将沿着这条路径逐一深入探索。3. 单表替换密码的典范凯撒密码与仿射密码让我们从最简单的单表替换密码开始这是理解所有替换密码的基石。3.1 凯撒密码位移的艺术凯撒密码得名于古罗马的凯撒大帝据说他曾用此方法传递军情。它的规则简单到令人惊讶将明文中的每个字母在字母表中向后或向前移动一个固定的位数。加密公式数学描述C (P K) mod 26P: 明文字母的序号A0, B1, ..., Z25K: 偏移量密钥例如凯撒常用的是3C: 密文字母的序号mod 26: 取模26运算确保结果仍在0-25的字母表范围内。手工实操示例明文HELLO密钥偏移量K3加密过程H(7) - (73)10 - KE(4) - (43)7 - HL(11) - (113)14 - OL(11) - (113)14 - OO(14) - (143)17 - R密文KHOOR解密公式P (C - K) mod 26。收到“KHOOR”后将每个字母序号减3再取模即可恢复“HELLO”。注意这里的“mod”是取余运算。例如(253)28, 28 mod 26 2对应字母C。这保证了字母表循环衔接。为什么凯撒密码不安全因为它只有26种可能的密钥偏移量0-25其中偏移0等于没加密。攻击者甚至不需要任何高深技巧简单地尝试所有26种可能的偏移称为“暴力破解”或“穷举攻击”最多几分钟就能得到原文。此外它完全保留了明文的词频、单词边界等统计特征有经验的分析者一眼就能看出端倪。3.2 仿射密码为凯撒增加一道乘法锁仿射密码可以看作是凯撒密码的升级版它在加法移位的基础上增加了一个乘法运算使得替换规则不再仅仅是平移而是一次线性变换。加密公式C (a * P b) mod 26a和b是密钥。a必须与26互质即最大公约数 gcd(a, 26) 1否则会导致多个明文字母加密到同一个密文字母解密时无法唯一确定。为什么要求a与26互质这是为了保证加密函数是一个“双射”即每个明文字母唯一对应一个密文字母且每个密文字母也唯一对应一个明文字母。如果a与26有公因数比如a2gcd(2,26)2那么明文A(0)和明文N(13)加密后都是(2*0b) mod 26 b和(2*13b) mod 26 (26b) mod 26 b都对应同一个密文解密时遇到密文b你无法确定它来自A还是N信息就丢失了。解密公式P a^(-1) * (C - b) mod 26这里的a^(-1)不是简单的倒数而是指a在模26下的乘法逆元。即寻找一个数x使得(a * x) mod 26 1。手工实操示例假设密钥a5,b8。首先验证 gcd(5,26)1符合要求。明文AFFINE (对应 A0, F5, F5, I8, N13, E4)加密过程A(0) - (5*08) mod 26 8 - IF(5) - (5*58)33 mod 26 7 - HF(5) - 同上 - HI(8) - (5*88)48 mod 26 22 - WN(13) - (5*138)73 mod 26 21 - VE(4) - (5*48)28 mod 26 2 - C密文IHHWVC仿射密码的安全性提升了吗确实比凯撒密码好。因为密钥空间变大了。a有12种可能与26互质的小于26的数1,3,5,7,9,11,15,17,19,21,23,25b有26种可能总密钥数为12*26312个。虽然对于计算机来说仍是瞬间可破但手工穷举的难度大大增加。然而它依然是单表替换密文中字母的频率分布与明文完全对应通过统计频率分析例如英文中E的出现频率最高结合可能的单词试探依然可以较容易地被破解。4. 多表替换的里程碑维吉尼亚密码当人们意识到单表替换的致命缺陷——固定的频率特征——之后密码设计者开始思考如何让同一个明文字母在不同的位置被替换成不同的密文字母。这就是多表替换的思想而维吉尼亚密码是其最经典、最系统的实现。4.1 核心原理用密钥决定“哪张表”维吉尼亚密码的本质是使用了26个不同的凯撒密码表。这26张表分别对应密钥字母A到Z。A表是偏移量为0的凯撒表即明文密文B表是偏移量为1的凯撒表……Z表是偏移量为25的凯撒表。加密时你需要一个关键词比如“KEY”。然后用这个关键词来决定对明文的每一个字母使用哪一张凯撒表进行加密。加密公式C_i (P_i K_i) mod 26P_i: 明文中第i个字母的序号K_i: 密钥中对应第i个字母的序号。密钥会被循环重复使用以覆盖整个明文。C_i: 密文中第i个字母的序号手工实操示例使用维吉尼亚方阵表 维吉尼亚方阵是一个26x26的表格第一行是明文行A-Z第一列是密钥字母列A-Z。每一行就是一个以该行首字母为密钥的凯撒密码表。明文ATTACKATDAWN密钥LEMON (循环使用LEMONLEMONLE)加密过程查表法明文字母A对应密钥字母L找到L行与A列交叉点L明文字母T对应密钥字母E找到E行与T列交叉点X明文字母T对应密钥字母M找到M行与T列交叉点F明文字母A对应密钥字母O找到O行与A列交叉点O明文字母C对应密钥字母N找到N行与C列交叉点P... 以此类推。密文LXFOPVEFRNHR维吉尼亚密码的威力何在它成功地掩盖了字母的频率特征。在明文里字母T出现了多次。在密文里因为对应不同的密钥字母E, M, O...这些T被加密成了X, F, V等完全不同的字母。这使得单纯的频率分析方法失效安全性得到了质的飞跃。在长达数百年里它被誉为“不可破译的密码”。4.2 破解维吉尼亚密码的钥匙卡西斯基试验与重合指数法没有绝对安全的密码。19世纪查尔斯·巴贝奇和弗里德里希·卡西斯基几乎同时独立发现了破解维吉尼亚密码的方法。其核心思路是如果密钥长度被猜出或求出那么维吉尼亚密码就退化成了多个独立的凯撒密码。第一步确定密钥长度——卡西斯基试验原理在密文中寻找重复出现的、长度至少为3的字母片段。这些重复很可能是因为明文中相同的单词如“THE”恰好被密钥中相同的部分加密所致。操作记录这些重复片段起始位置之间的距离。例如“ABC”在位置5和20出现距离为15。计算所有这些距离的最大公约数GCD这个GCD很可能就是密钥的长度。举例假设多次计算得到的距离有153045那么GCD是15密钥长度很可能为15或15的因数53等。第二步分割与频率分析——重合指数法分割假设密钥长度为L。将密文字母按位置分成L组第1组第1 1L 12L ... 个字母第2组第2 2L 22L ... 个字母...第L组第L 2L 3L ... 个字母 由于每组内的字母都是用同一个密钥字母即同一张凯撒表加密的因此每一组都是一个单表替换密码。分析对每一组密文计算其重合指数。重合指数是文本中随机抽取两个字母相同的概率。对于一段有意义的英文文本这个值大约在0.065左右对于完全随机的字母串这个值约为0.038。破解对每一组尝试所有26种可能的凯撒偏移即假设该组密钥字母是A到Z分别计算解密后文本的重合指数。当偏移正确时解密出的文本接近英文重合指数会接近0.065偏移错误时文本杂乱重合指数接近0.038。从而可以确定每一组的密钥字母。还原将各组求出的密钥字母按顺序组合就得到了完整的密钥。再用此密钥解密整个密文即可。实操心得手工进行卡西斯基试验和重合指数计算非常繁琐但却是理解多表密码破解精髓的最佳方式。现代我们可以用Python等工具快速实现这些算法。真正动手算一遍你会对“密钥空间”、“统计特性”这些概念有刻骨铭心的理解。这也是为什么古典密码教学价值极高的原因——它把复杂的密码学原理浓缩成了可触摸、可计算的过程。5. 置换密码的代表栅栏密码最后我们来看另一大类置换密码。它不改变字符本身只改变顺序。栅栏密码是最简单的置换密码它的加密过程就像把文字写在栅栏的栏杆上。加密步骤以深度2为例将明文按“之”字形写成两行。按行读出形成密文。示例明文HELLOWORLD写成两行 第一行H L O O L 第二行E L W R D按行读出密文HLOOLELWRD解密步骤计算密文长度10深度为2则每行应约有5个字母。将密文前半部分HLOOL放在第一行后半部分ELWRD放在第二行。按“之”字形先第一行第一个再第二行第一个然后第一行第二个...的规则竖着读即可恢复明文。栅栏密码的安全性极低。它不提供任何语义上的混淆只是打乱了顺序。对于较短的文本可能造成阅读困难但一旦意识到是换位密码通过尝试不同的“栅栏深度”234...很容易破解。它通常作为其他加密方法的一层额外混淆或用于趣味谜题。6. 古典密码的实战演练与手工破解体验理解了原理最好的巩固方式就是动手。这里我设计一个综合性的手工破解练习带你体验一次完整的“密码分析员”工作。挑战你截获了一段密文并怀疑它使用的是古典密码。密文如下WKH HDVLHVW PHWKRG RI HQFLSKHULQJ D PHVVDJH LV WR UHSODFH HDFK OHWWHU EB DQRWKHU XVLQJ D ILAHG UXOH.第一步初步观察与判断密文由字母和空格组成保留了单词分隔。这提示我们它可能是一种简单替换密码单表替换因为复杂的多表或现代加密通常会处理掉这种自然语言特征。密文中有一些非常短的单词如WKHLVEB。在英文中三字母单词极有可能是THEISBY等。这给了我们突破口。第二步频率分析与单词猜测统计单字母频率可以借助简单工具或手工粗略估算。你会发现出现次数最多的字母可能是HWD等。关键猜测密文开头的WKH极大概率对应英文中最常见的单词THE。如果W T,K H,H E。代入验证看密文第三行D PHVVDJH根据猜测D对应T这不太对因为T在英文中频率很高D在这里是单独一个字母很可能对应A。让我们先保留WKHTHE的假设。寻找其他高频词密文中有HQFLSKHULQJ根据HE这个词里有多个H可能是ing结尾的动词。PHWKRG根据HE可能是method。假设PMWO这与之前WT冲突。说明我们的WKHTHE假设需要调整。第三步系统性的替换尝试基于凯撒猜想既然可能是单表替换我们试试最简单的凯撒密码。写一个字母表然后尝试不同的偏移量。尝试偏移量3凯撒本人的偏好A - D, B - E, C - F, ..., W - Z, X - A, Y - B, Z - C。将密文W替换为TK替换为HH替换为E。看WKH变成了THE成功了第一步。继续全文替换WKH HDVLHVW PHWKRG...-THE EASIEST METHOD...全文解密后为THE EASIEST METHOD OF ENCIPHERING A MESSAGE IS TO REPLACE EACH LETTER BY ANOTHER USING A FIXED RULE.语义完全通顺破解完成这段密文使用的正是偏移量为3的凯撒密码。它本身是一句描述密码学的话“最简单的加密信息的方法就是使用一个固定的规则将每个字母替换成另一个字母。” 这恰恰是对单表替换密码的完美诠释。这个练习给你的启示模式识别是关键短词、高频字母、常见词缀如-ing, -tion是破解单表替换的突破口。先假设后验证密码分析是一个提出假设并用证据验证或推翻的过程。从WKHTHE开始是一个合理的起点。凯撒密码的脆弱性一旦识别出是凯撒移位26次尝试内必破。在实际中攻击者会编写脚本瞬间完成所有尝试。7. 从古典到现代核心思想的传承与演变当我们回顾凯撒、仿射、维吉尼亚这些密码时绝不能仅仅视其为过时的玩具。它们所蕴含的思想至今仍在深刻地影响着现代密码学。混淆与扩散这是香农提出的密码设计两大原则。混淆指密文与密钥之间的关系应尽可能复杂如仿射密码中的乘法和加法维吉尼亚的多表让攻击者无法从密文推知密钥。扩散指明文中的微小改变应引起密文的巨大变化古典密码中这点较弱但在现代分组密码如AES中至关重要。古典密码的替换操作是“混淆”的雏形置换操作是“扩散”的雏形。密钥与算法分离维吉尼亚密码清晰地区分了算法维吉尼亚方阵/模加运算和密钥那个关键词。算法可以公开但密钥必须保密。这正是现代密码学的基石——“柯克霍夫原则”的体现系统的安全性不应依赖于算法的保密而应依赖于密钥的保密。即使敌人知道你的加密机算法只要他拿不到密钥就无法破译信息。统计分析与安全性古典密码的破解史就是一部与统计特征斗争的历史。单表替换败于字母频率分析维吉尼亚密码通过多表消除了单一频率特征但又因重复使用密钥而暴露出周期性被卡西斯基试验攻破。这直接推动了现代密码设计必须能够抵抗各种统计攻击。现代加密算法如AES的输出在统计上看应该与真正的随机序列无法区分。计算安全与理论安全古典密码在计算能力低下的时代有其价值。但随着计算能力的飞跃它们的密钥空间太小在暴力搜索面前不堪一击。这引出了计算安全性的概念一个密码系统在当前和可预见的未来计算能力下是安全的即可认为是安全的。与之相对的是信息论安全如一次一密那是理论上绝对不可破的但实用性很差。现代密码学追求的是在实用性和计算安全性之间取得平衡。亲手实现并破解这些古典密码是一个不可替代的学习过程。它让你直观地感受到一个微小的设计变化比如从单表到多表如何带来安全性的巨大提升也让你深刻理解为何现代加密算法会设计得如此复杂——它们是在与无数聪明绝顶的攻击者进行长达数十年的攻防博弈中进化而来的产物。当你下次使用HTTPS连接网站时或许会想起这条安全通道的起点正是源于千百年前人们用纸笔进行的、关于秘密的朴素思考。