ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

从凯撒到维吉尼亚:经典密码学入门与实战破解指南

从凯撒到维吉尼亚:经典密码学入门与实战破解指南 1. 项目概述为什么今天还要学“经典密码”最近在整理资料翻到以前学习信息安全时做的笔记看到“凯撒密码”、“维吉尼亚密码”这些名字突然有点感慨。现在一提到密码学大家脑子里蹦出来的都是AES、RSA、椭圆曲线这些现代密码算法感觉这些老古董早就该进博物馆了。但说实话我干了这么多年安全带过不少新人发现一个挺普遍的问题很多朋友一上来就想啃透非对称加密的原理结果在模逆运算、离散对数这些概念上卡壳越学越迷糊最后信心受挫。这其实就引出了“经典密码体制”学习的核心价值它不是让你去用这些已经被破解的算法而是为你搭建一套理解密码学最底层思维的“脚手架”。你可以把经典密码想象成密码学的“经典力学”而现代密码是“量子力学”。不搞清楚牛顿三定律直接去学波函数那肯定是云里雾里。经典密码体制上这部分通常涵盖从古代到20世纪初的密码它们结构相对简单原理直观正好用来建立几个关键认知什么是加密和解密什么是密钥攻击者密码分析者是如何思考的弄明白了这些你再去看现代密码中复杂的数学变换和计算安全性就会有一种“哦原来它想解决的是这个问题”的通透感。所以无论你是信息安全专业的学生还是对技术感兴趣的开发者甚至是产品经理想了解基本的加密概念花点时间捋一遍经典密码都是一笔非常划算的投资。它不会教你立刻写出一个安全的系统但能帮你培养出最珍贵的“密码学直觉”。2. 核心思想与设计原则的演进经典密码的发展史本质上就是一部“道高一尺魔高一丈”的攻防对抗史。其设计原则的演进清晰地反映了人们对于“安全”理解的深化。2.1 从“保密算法”到“保密密钥”的范式转移最早的密码比如斯巴达人用的“天书”Skytale其安全性完全依赖于加密算法本身的保密。一旦敌人知道了你是把羊皮条缠在特定粗细的木棍上写字这个密码体系就彻底崩溃了。这被称为“隐蔽式安全”它非常脆弱因为算法一旦泄露毫无挽回余地。一个巨大的进步出现在文艺复兴时期即“柯克霍夫斯原则”的雏形在实践中被意识到并在19世纪被明确阐述一个密码系统的安全性不应依赖于算法的保密而应依赖于密钥的保密。这意味着即使敌人完全知道你的加密和解密方法只要他不知道你这次用的具体密钥他依然无法破解密文。维吉尼亚密码就是这一原则的早期体现。虽然它的算法查表移位是公开的但密钥一个单词或短语成了安全的唯一支柱。这是现代密码学的基石我们今天使用的所有密码如AES其算法都是完全公开的经过全球密码学家审视的安全只系于那一串密钥。2.2 混乱与扩散古典手工时代的朴素实现在现代密码学中“混乱”和“扩散”是分组密码设计的核心原则。混乱指密文与密钥之间的关系尽可能复杂扩散指明文一位的改变能影响密文中多位的改变。在经典密码中我们能看到这些思想的朴素起源。单表替换密码如凯撒密码、仿射密码只提供了非常初级的“混乱”。它将明文字母按照一个固定的规则映射到密文字母一旦这个映射被通过频率分析等手段破解整个密文就一览无余。它缺乏“扩散”明文中的一个字母变化只影响密文中的一个字母。多表替换密码如维吉尼亚密码则向前迈进了一大步。它通过周期性地使用不同的替换表在一定程度上实现了“扩散”。明文中的同一个字母在不同位置会被加密成不同的密文字母这有效破坏了单字母的频率特征。你可以认为其密钥长度决定了“扩散”的周期。维吉尼亚密码的破解方法如卡西斯基试验正是去寻找这个周期的长度一旦周期被找到它就退化成多个单表替换即可被分别击破。置换密码如栅栏密码、矩阵转置密码则纯粹体现了“扩散”的思想。它不改变明文符号本身而是打乱其顺序。这种密码对频率分析免疫因为字母的统计特性被保留了。但它容易被“分片攻击”或通过猜测单词结构、试探常见模式来破解。2.3 手工计算的极限与机械密码的曙光经典密码后期如维吉尼亚密码其加密解密过程已经需要查表或计算相当繁琐。为了应对越来越复杂的战场和外交通信需求密码开始从纯手工走向机械化。恩尼格玛密码机是这一阶段的巅峰之作。它通过转轮、反射板等机械结构实现了极其复杂对于当时而言的多表替换其密钥空间巨大手动分析几乎不可能。恩尼格玛的破译如由艾伦·图灵等人领导的工作标志着密码分析从“巧妙的技巧”走向“系统性的科学计算”也预示着密码学即将进入电子时代。注意学习经典密码时切忌死记硬背具体移位数字或密钥。重点在于理解其背后的模型替换、置换、多表、机械状态机。思考“如果我是设计者我如何增加破解难度”“如果我是攻击者我会从哪里寻找弱点”这种双向思维训练才是精髓。3. 核心密码体制详解与手工演练纸上得来终觉浅我们直接上手“盘”几个最经典的密码通过手工计算来感受其设计精妙与脆弱之处。我建议你准备好纸笔跟着一起算。3.1 凯撒密码一切的原点凯撒密码是一种移位密码属于单表替换。其算法非常简单将明文字母在字母表中向后或向前移动一个固定的位数这个位数就是密钥。加密C (P K) mod 26解密P (C - K) mod 26其中P代表明文数字A0, B1, ..., Z25C代表密文数字K是密钥移位值mod 26表示除以26取余数。手工演练 假设密钥 K3明文是HELLO。转数字H7, E4, L11, L11, O14。加密计算(73) mod 26 10 - K(43) mod 26 7 - H(113) mod 26 14 - O(113) mod 26 14 - O(143) mod 26 17 - R密文KHOOR。为什么它不安全因为它只有26种可能的密钥K0无意义攻击者即使不知道密钥也可以通过穷举攻击简单地把所有25种移位结果都试一遍肉眼就能找出有意义的明文。更重要的是它保留了原始语言的字母单字母频率统计特征。在英文中E的出现频率远高于其他字母在密文里出现频率最高的那个字母很可能就对应明文的E。通过频率分析几乎可以秒破。3.2 仿射密码增加一点数学复杂度仿射密码是移位密码的升级版它引入了一次函数形式为C (a * P b) mod 26。这里有两个密钥a和b。b就是移位量而a是一个乘法因子。核心限制为了能够解密即函数可逆a必须与26互质最大公约数为1。在0-25中满足条件的a有1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25。共12个。因此密钥空间为 12 * 26 312个。比凯撒密码的26个大了不少。手工演练 设密钥 a5, b8。明文AFFINE。A0, F5, F5, I8, N13, E4。加密计算C (5*P 8) mod 26(5*08) mod 26 8 - I(5*58) mod 26 33 mod 26 7 - H(5*58) mod 26 33 mod 26 7 - H(5*88) mod 26 48 mod 26 22 - W(5*138) mod 26 73 mod 26 21 - V(5*48) mod 26 28 mod 26 2 - C密文IHHWVC。解密需要求逆。解密公式为P a^{-1} * (C - b) mod 26。其中a^{-1}是a在模26下的乘法逆元。5的模26逆元是21因为 5*21105, 105 mod 26 1。所以解密函数是P 21 * (C - 8) mod 26。读者可以自行验证。安全性分析 密钥空间扩大到312穷举攻击对人来说有点麻烦但对计算机来说仍是瞬间的事。最关键的是它依然是单表替换明文和密文字母是一一对应的固定关系。因此它完全无法抵御频率分析。在足够长的密文面前它和凯撒密码一样脆弱。3.3 维吉尼亚密码多表替换的里程碑维吉尼亚密码是经典密码中的一个高峰它首次系统性地采用了多表替换来对抗频率分析。它使用一个关键词Keyword作为密钥。加密时将关键词重复书写在明文上方每个明文字母根据下方对应的密钥字母进行不同位移量的凯撒加密。这个位移量由密钥字母决定A0, B1, ..., Z25。手工演练 设密钥KEY明文ATTACKATDAWN。将密钥重复至明文长度KEYKEYKEYKEYK。对应加密A(明文) K(密钥值10) A(0)1010 - KT(19) E(4) 23 - XT(19) Y(24) 43 mod 26 17 - RA(0) K(10) 10 - KC(2) E(4) 6 - GK(10) Y(24) 34 mod 26 8 - I...后续同理得到密文KX RK GIKVKX通常写作KXRKGIKVKX。它的巧妙之处同一个明文字母比如T在第一次对应密钥E被加密为X在第二次对应密钥Y被加密为R。这破坏了单字母的频率统计特征使得直接频率分析失效。3.4 置换密码栅栏与矩阵转置与替换密码改变字母本身不同置换密码只改变字母的位置。栅栏密码将明文按“之”字形写在多行栅栏上再按行读出。加密“HELLO WORLD” (忽略空格为HELLOWORLD)设栏数为3。第1行: H . . . O . . . R . - H O R 第2行: . E . L . W . L . D - E L W L D 第3行: . . L . . . O . . . - L O按行连接HOR ELWLD LO- 密文常连写为HORELWLDLO。解密需要知道栏数推算出每行的长度然后按“之”字形路径还原。矩阵转置密码将明文按固定列数写入矩阵然后按不同的顺序密钥决定按列读出。加密明文ATTACKATDAWN密钥3124表示列顺序。按4列写入列1 列2 列3 列4 A T T A C K A T D A W N按密钥顺序3,1,2,4读出各列 列3: T A W - T A W 列1: A C D - A C D 列2: T K A - T K A 列4: A T N - A T N 密文TAW ACD TKA ATN-TAWACDTKAATN。安全性分析置换密码保留了所有字母的原始频率但打乱了相邻关系。对于短密文通过猜测可能的单词、试探常见的双字母组合如TH, HE, AN等可以破解。对于长密文可以结合频率分析和对语言结构的了解进行攻击。4. 经典密码的通用破解思路与实战分析学习加密另一半的乐趣在于破解。了解攻击者的思路你才能真正理解一个密码体制的强弱。下面我们系统性地梳理针对经典密码的“降维打击”方法。4.1 针对单表替换密码的“频率分析”这是破解凯撒、仿射等所有单表替换密码的“银弹”。其核心依据是在任何一种自然语言中字母的出现频率都有稳定的统计规律。英文单字母大致频率从高到低 E, T, A, O, I, N, S, H, R, D, L, C, U, M, W, F, G, Y, P, B, V, K, J, X, Q, Z。 其中E的频率通常在12%左右T、A、O、I都在8%-9%左右而J、Q、Z等低于1%。**双字母组合Digram和三字母组合Trigram**也有高频组合如TH, HE, IN, ER, AN; THE, ING, AND, HER, ENT等。破解步骤统计对截获的密文进行单字母频率统计列出频率最高的几个密文字母。假设假设最高频的密文字母对应明文E次高频的对应T或A等。代入验证将这个假设的映射关系代入密文替换出一部分“明文”。看是否出现有意义的单词片段。利用语言模式观察密文中重复出现的短词可能是THE,AND或者常见的字母模式如Q后面极大概率是U。迭代修正根据部分破译出的单词修正或补充字母映射关系像玩填字游戏一样逐步还原整个替换表。实操心得频率分析对密文长度有要求。通常密文长度需要达到至少100个字母统计规律才会比较明显。对于很短的消息频率分析会失效但穷举攻击对凯撒或基于单词模式的猜测攻击会更有效。4.2 破解维吉尼亚密码的“卡西斯基试验”与“重合指数法”维吉尼亚密码的破解是一个经典的两步过程第一步确定密钥长度第二步将问题简化为多个单表替换分别破解。4.2.1 卡西斯基试验寻找重复片段原理如果明文中相同的单词或短语如THE恰好被密钥中相同的部分加密那么它们会产生相同的密文片段。这些相同密文片段之间的距离很可能是密钥长度的整数倍。操作步骤在密文中搜索长度至少为3的重复出现的字母串。记录每对重复串的起始位置计算它们之间的距离。找出所有这些距离的公约数。最可能出现的那个公约数就是密钥长度。举例假设在长密文中发现ABC这个串在第10位和第50位出现距离是40又在第30位和第90位出现距离是60。40和60的最大公约数是20而20的约数有1,2,4,5,10,20。再结合其他重复串的距离分析很可能密钥长度就是5或10。4.2.2 重合指数法验证并精炼密钥长度重合指数是衡量一段文本中字母分布随机性的指标。对于自然语言如英文其重合指数大约为0.065因为字母分布不均随机抽取两个字母相同的概率较高。对于完全随机的字母序列这个值约为0.038。操作步骤假设一个密钥长度L比如从卡西斯基试验得到的候选值。将密文按L分组第1组包含第1, L1, 2L1,...个字母第2组包含第2, L2, 2L2,...个字母以此类推。分别计算每一组的重合指数。如果L猜对了那么每一组都是由同一个密钥字母加密的单表替换密文其字母分布应接近英文重合指数应接近0.065。如果L猜错了那么每组字母是多个不同密钥字母加密的混合分布更随机重合指数会接近0.038。选择那个使得各组平均重合指数最接近0.065的L即为最可能的密钥长度。4.2.3 分解为单表替换并破解一旦确定密钥长度L密文就被分成了L组每组都是用同一个固定位移密钥字母加密的凯撒密码。对每一组单独使用频率分析找出最可能的位移量这个位移量就对应一个密钥字母。将L个密钥字母组合起来就得到了完整的密钥。4.3 针对置换密码的“模式猜测”与“分片攻击”置换密码不改变字母只改变位置。攻击者可以利用语言的内在结构。分析密文频率如果密文的单字母频率分布与明文语言如英语高度吻合那很可能就是置换密码或经过某种简单替换但结合其他手段判断。试探常见模式双字母/三字母试探尝试将密文中高频出现的双字母组合与明文语言中的高频组合TH, HE, AN, IN, ER等进行匹配推测可能的相邻关系。单词边界猜测如果密文中有空格或标点有时没有可以尝试猜测短词如A,I,THE,AND,OF等。这些词有独特的长度和字母构成。已知明文攻击如果攻击者能猜测出密文中某一部分对应的明文比如情报头尾的固定格式、日期、地名那么通过对比明文和密文的对应位置可以直接反推出置换的规律比如栅栏的栏数或转置的列顺序。分片攻击对矩阵转置如果密钥长度列数较短可以尝试所有可能的列排列组合。对于列数n有n!种排列。当n5时5! 120手工尝试已很费力但计算机可轻松穷举。对每种排列尝试解密肉眼识别有意义的明文。5. 从经典到现代的桥梁经验、教训与思维模型学完这些具体的密码和破解方法我们最后来提炼一下它们给现代密码学设计和我们的安全思维留下了哪些遗产。5.1 经典密码为何被淘汰—— 安全性根本缺陷总结密钥空间过小凯撒密码26种仿射密码312种维吉尼亚密码的密钥空间取决于关键词长度和字母表但相对于现代计算机的算力依然微不足道。现代密码的密钥空间如AES-128的2^128是天文数字穷举攻击在理论上不可行。无法抵抗统计攻击单表替换泄露频率多表替换如果周期不够长泄露重复模式。现代密码如AES的设计目标之一就是让密文在统计上与随机序列无法区分任何一位的改变都会“扩散”到整个输出块。算法结构线性/简单经典密码的运算大多是简单的移位、替换、置换其数学结构简单容易被分析。现代密码大量使用非线性变换如S盒、复杂的轮函数和密钥扩展算法极大地增加了分析的数学复杂度。5.2 经典密码学留给我们的核心思维模型尽管算法本身过时但其蕴含的思维模型历久弥新攻击者模型这是密码学第一课。你必须明确“对手的能力是什么”经典密码学假设攻击者拥有密文并知道加密算法柯克霍夫斯原则。现代密码学进一步细化了模型如选择明文攻击、选择密文攻击等。始终从攻击者的角度思考是设计安全系统的前提。安全性与效率的权衡恩尼格玛密码机在保证一定安全性的同时还要满足战场加密解密的效率。今天我们依然在平衡加密强度、计算开销、通信延迟和能耗尤其在物联网设备上。“安全链”概念维吉尼亚密码的安全性完全系于密钥。这引申出一个更广泛的原理一个系统的安全强度取决于其最薄弱的一环。今天即使你用了AES-256如果密钥在传输中被窃听或在服务器上以明文存储整个系统依然不堪一击。密钥管理的重要性在经典密码时代就已凸显。编码与加密的区分经典密码中如栅栏密码有时会被误认为是加密但它只是编码Transposition。这一点在今天依然重要比如Base64是编码不是加密URL编码是编码不是加密。它们不提供机密性只是改变了数据的表示形式。5.3 手工实现的现代意义与教育价值在今天为什么我们还要用手工去计算凯撒移位、去画维吉尼亚表建立直觉亲手计算一遍你对“模运算”、“多表”、“置换”的理解远比读十遍定义要深刻。你能真切感受到“为什么多表能对抗频率分析”。理解自动化当你用Python写一个脚本来自动化破解维吉尼亚密码时你会真正理解卡西斯基试验和重合指数法每一步的数学含义而不是仅仅调用一个库函数。风险评估的感性认识当你发现一个简单的频率分析就能轻松破译一段看似混乱的密文时你会对“什么样的加密是弱的”产生一种本能的警惕。这种警惕性在面对某些自制加密方案或配置不当的弱加密时能救你一命。我个人在给团队做内部分享时总会从经典密码的几个小实验开始。看着大家从最初觉得“这么简单谁不会”到后来亲自尝试破解时抓耳挠腮最后理解原理后的恍然大悟这个过程比直接讲AES的轮结构有效得多。它搭建了一座从直观到抽象、从手工到自动化、从历史到现代的桥。过了这座桥再去看现代密码学那些严谨的数学定义和复杂协议你心里就有底了——你知道它们究竟在解决一个什么样的问题以及前人为解决这个问题走过哪些弯路。这或许就是学习经典密码体制上最大的价值。
返回列表