绪论:保密、通信与信任——密码学的定义、历史使命与核心问题
每天清晨,当你用指纹解锁手机,查看朋友发来的加密消息;当你在购物网站输入密码,完成一笔安全支付;当你通过视频通话与远方的亲人交谈,确信对话内容未被第三方窃取——你实际上已经生活在一个由密码学(Cryptography)构筑的隐形堡垒之中。保密,这个人类文明史上最古老的需求之一,已经从蜡封的羊皮纸、复杂的机械转轮,演变为屏幕上流动的二进制数字。密码学,这门古老而又年轻的科学,正是实现保密通信的基石。它并非仅仅是间谍小说中的神秘符号,而是现代数字社会信任体系的底层支柱。本章将带你穿越时空,从日常的保密需求出发,界定密码学的真正范畴,回顾其从古至今的演进历程,并揭示其保障机密性、完整性、认证性与不可否认性的核心目标。最终,我们将提出密码学的基本模型——通信双方与窃听者之间的永恒博弈,为你理解全书后续的算法、协议与思想碰撞,奠定坚实的历史与概念基础。
密码学与密码分析:一对孪生学科
在深入历史之前,我们必须首先明确两个核心概念:密码学(Cryptography)与密码分析(Cryptanalysis)。这两者如同一枚硬币的两面,共同构成了密码科学的主旋律。
密码学,源自希腊语“kryptós”(隐藏)和“gráphein”(书写),指的是设计密码系统(密码方案)的科学与艺术。其核心目的是将可读的原始信息(明文)转换为不可理解的杂乱形式(密文),从而在不可信的信道中实现安全通信。现代密码学远不止于“隐藏”,它更是一套严谨的数学框架,用于构建各种安全服务。
密码分析,则是指破解密码、分析密码系统安全性的科学与艺术。它扮演着“攻击者”或“审查者”的角色,试图从密文中恢复明文,或从密码系统中找出弱点。密码分析是密码学发展的驱动力——一个密码系统是否安全,必须经过密码分析最严苛的检验。
二者的关系是动态的、对抗性的。历史上,每一次密码分析的重大突破,都迫使密码学设计出更复杂的系统;而每一个新密码系统的诞生,又为密码分析提供了新的挑战对象。这种“道高一尺,魔高一丈”的永恒博弈,推动着密码技术不断向前演进。因此,本书将交替呈现密码的设计与破解,让你在双方的视角切换中,深刻理解“安全”的相对性与动态性。
保密通信的千年演进:从战场密令到数字签名
保密通信的需求贯穿整个人类文明史。从古代战争的军情传递、帝王将相的外交密信,到现代互联网的金融交易、个人隐私保护,其形态随技术而变,但核心诉求始终未改。
古代:手工密码的萌芽(公元前~19世纪)
最早的密码实践可追溯到古埃及、古巴比伦和古罗马。这些密码完全依赖手工操作,其安全性主要依赖于算法的保密(即“隐写术”理念),而非现代意义上的密钥保密。
一个典型的早期例子是斯巴达的塞塔巴(Scytale)密码。传说斯巴达将领将一条狭长的羊皮纸螺旋缠绕在特定直径的木棍上,沿木棍纵向书写密文;解开羊皮纸后,文字变得杂乱无章。只有持有相同直径木棍的接收者才能将其重新缠绕,还原出原始信息。其原理类似于现代的转置密码,但安全性极低,一旦木棍规格被敌方获知,密码即被破解。
更著名且具有数学雏形的是凯撒密码(Caesar Cipher)。公元前1世纪,古罗马将军尤利乌斯·凯撒在指挥高卢战争时,使用了一种简单的字母替换密码:将明文中的每个字母在字母表中向前(或向后)固定偏移3位。例如,A变为D,B变为E,…,X变为A,Y变为B,Z变为C。这种密码的本质是单表替换密码(Monoalphabetic Substitution Cipher),其加密过程可形式化为: $$C = (P + k) \mod 26$$ 其中 $P$ 是明文字母在字母表中的位置(A=0, B=1, …, Z=25),$k$ 是密钥(偏移量,凯撒使用3),$C$ 是密文字母位置,$\mod 26$ 表示结果在26个字母内循环。解密则为 $P = (C - k) \mod 26$。
历史故事:凯撒密码的实战与破解 据古罗马历史学家苏维托尼乌斯记载,凯撒曾用此密码与西塞罗等盟友通信。然而,这种密码的致命弱点是偏移量k的可能取值极少(仅25种有效可能,k=0为无加密),即使不知道k,攻击者只需尝试最多25次即可暴力破解。公元9世纪,阿拉伯学者阿尔·金迪(Al-Kindi)在其著作《破译加密信息手稿》中,首次系统性地阐述了频率分析法(Frequency Analysis),这是密码分析史上划时代的突破。由于不同语言中字母出现频率不同(如英语中E最常见),攻击者通过统计密文中各字母的出现频率,并与明文语言字母频率表对比,即可推断出替换映射关系,从而轻松破解任何单表替换密码,无论其偏移量k是多少。凯撒密码因此彻底失去保密性。
中世纪至文艺复兴:多表替换与机械雏形(5世纪~19世纪)
频率分析法的出现,宣告了简单单表替换密码的终结。密码设计者开始寻求更复杂的方案,以混淆字母频率统计特征。
多表替换密码(Polyalphabetic Substitution Cipher) 应运而生。其核心思想是:使用多个不同的替换表(字母表),根据某个规则依次切换,使得同一个明文字母在不同位置可能被加密为不同的密文字母,从而打乱频率分布。
最著名的例子是维吉尼亚密码(Vigenère Cipher),由法国外交官布莱斯·德·维吉尼亚于1586年提出。它使用一个关键词(如“SECRET”)作为密钥。加密时,将关键词重复排列,与明文逐字母对齐,每个明文字母根据对应密钥字母在维吉尼亚方阵(一个26x26的字母表矩阵)中进行替换。例如,密钥字母为S(对应偏移量18),则明文字母A加密为S(0+18=18→S),B加密为T,依此类推。
维吉尼亚密码曾被誉为“不可破的密码”,因为它有效地消除了单表替换的频率特征。然而,它仍存在结构性弱点。1863年,普鲁士军官弗里德里希·卡西斯基(Friedrich Kasiski)提出了著名的卡西斯基试验(Kasiski Examination):通过寻找密文中相同字符串重复出现的位置间隔,推断出密钥的长度。一旦密钥长度被确定,密文即可被拆分为多个单表替换密码分别破解。这标志着密码分析从单纯频率分析向统计分析结合模式识别的深化。
与此同时,机械密码设备开始出现。16世纪,意大利建筑师阿尔伯蒂发明了最早的密码磁盘(Cipher Disk),通过两个同轴旋转的字母圆盘实现动态替换。19世纪,美国发明家杰斐逊设计了“杰斐逊轮(Jefferson Wheel)”,由多个刻有字母的轮子组成,通过选择轮子组合生成密文。这些机械装置虽然复杂,但其原理本质上仍是多表替换的机械化实现,安全性仍依赖于操作者的纪律和密钥的保密。
战争与情报:现代密码学的催化剂(20世纪初~20世纪中叶)
两次世界大战,尤其是第二次世界大战,成为密码学发展的巨大加速器。密码战成为决定战争胜负的关键因素之一,催生了从机械到电子、从手工到自动的密码系统革命。
恩尼格玛密码机(Enigma Machine) 是这一时期的标志性发明。由德国工程师阿瑟·谢尔比乌斯于1918年发明,恩尼格玛是一种复杂的机电转子密码机。它通过多个可旋转的转子(通常3-5个)、一个反射器和一个插接板,实现极其复杂的多表替换。其加密过程是多转子联动的代换-置换网络,密钥空间巨大(理论上可达 $10^{23}$ 量级),且每日密钥更换,使得手动破解几乎不可能。
然而,恩尼格玛的致命弱点在于其设计缺陷:反射器导致密文字母永远不会映射为自身(即A不可能加密为A),且转子结构存在“循环”特性。波兰密码学家马里安·雷耶夫斯基、耶日·鲁日茨基和亨里克·佐加尔斯基在1932年率先利用“重复消息”和“指示器设置”等密码分析技巧,成功破译了早期恩尼格玛。他们的成果(包括著名的“炸弹”分析机械)后来移交英国,为英国布莱切利园的密码破译中心(包括艾伦·图灵)奠定了基础。图灵等人设计并建造了更强大的“图灵机”(Bombe),结合德国操作员的失误(如使用可预测的报文开头、密钥设置错误),最终实现了对恩尼格玛的持续、大规模破译。历史学家估计,这一突破将二战结束时间提前了至少两年,挽救了数百万生命。
历史故事:图灵与“Ultra”情报 艾伦·图灵,这位计算机科学之父,在布莱切利园的工作远不止于改进破译机。他领导了对德国海军恩尼格玛(使用更复杂转子)的破译,并直接参与了“Ultra”情报系统的运作。破译出的情报被严格保密,仅以“Ultra”为代号传递给盟军高层。最著名的应用之一是1941年破译的德国海军机密,帮助英国皇家海军在击沉德国战列舰“俾斯麦”号时精准定位其位置。图灵的工作完美诠释了密码分析如何成为改变历史进程的“ silent weapon”(无声武器)。
信息时代:数字密码与公钥革命(20世纪70年代至今)
1970年代以前,密码学主要服务于政府和军事部门,其核心思想是对称密码(Symmetric Cryptography):通信双方使用同一个密钥进行加解密。这个密钥必须通过绝对安全的渠道预先共享(如外交信使护送),这被称为密钥分发问题(Key Distribution Problem)。在互联网时代,全球数十亿用户两两之间安全通信的需求,使得预先共享密钥变得完全不现实。
1976年,斯坦福大学的惠特菲尔德·迪菲(Whitfield Diffie)和马丁·赫尔曼(Martin Hellman)发表了里程碑式论文《密码学的新方向》,提出了公钥密码学(Public-Key Cryptography) 的革命性思想,彻底解决了密钥分发难题。其核心是使用一对 mathematically related 的密钥:公钥(Public Key)和私钥(Private Key)。公钥可以公开分发给任何人,用于加密信息或验证签名;私钥必须严格保密,用于解密信息或生成签名。用公钥加密的信息,只有对应的私钥能解密;用私钥签名的信息,只有对应的公钥能验证。这一思想的数学基础是陷门单向函数(Trapdoor One-Way Function):正向计算容易,逆向计算在缺乏“陷门”(私钥)信息的情况下极其困难。
1977年,麻省理工学院的罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)基于此思想,提出了第一个实用的公钥加密算法——RSA算法,其安全性基于大整数质因数分解的困难性。给定一个大合数 $N = p \times q$(p、q为大质数),计算N很容易;但已知N,分解出p和q在计算上极其困难,尤其当p和q足够大时(如2048位)。RSA的加密过程可简化为:$C = M^e \mod N$,其中M是明文消息(转换为整数),e和N是公钥;解密为 $M = C^d \mod N$,其中d是私钥,且 $e \times d \equiv 1 \mod \phi(N)$。
公钥密码学的诞生,不仅解决了密钥分发问题,还天然地支持了数字签名功能,为电子交易、身份认证、不可否认性等现代安全服务提供了数学基石。它与对称密码(如1970年代后期美国国家标准局NIST制定的数据加密标准DES,及其后继者高级加密标准AES)结合,形成了现代密码学的标准架构:使用公钥密码安全地交换一个对称会话密钥,然后使用高速的对称密码加密实际通信数据。这种混合体制兼顾了安全性与效率,构成了当今互联网安全(如TLS/SSL协议)的底层。
密码学的四大核心安全目标
现代密码系统不再满足于单一的“保密”,而是致力于实现一组相互关联、共同构成“安全通信”的安全目标。国际标准组织(如ISO/OSI)将其归纳为四大支柱:机密性、完整性、认证性和不可否认性。理解这四者,是理解密码学价值的核心。
1. 机密性(Confidentiality)
定义:确保信息仅能被授权方访问,防止非授权方(窃听者)获取信息内容。这是密码学最原始、最直观的目标。
实现方式:主要通过加密(Encryption) 实现。发送方使用密钥和加密算法将明文转换为密文;接收方使用相应密钥解密密文恢复明文。即使密文在传输过程中被截获,攻击者也无法理解其内容。
日常例子:
- 手机短信(如iMessage、WhatsApp的端到端加密)
- 无线网络连接(Wi-Fi密码使用WPA2/WPA3协议加密)
- 网上银行登录(HTTPS协议加密登录凭证)
- 加密硬盘(BitLocker、FileVault)
简单示例: 假设爱丽丝(Alice)想给鲍勃(Bob)发送一条秘密消息“HELLO”。他们事先共享一个对称密钥,例如凯撒密码的偏移量 $k=5$。 加密过程: H (7) +5 → M (12) E (4) +5 → J (9) L (11) +5 → Q (16) L (11) +5 → Q (16) O (14) +5 → T (19) 密文为“MJJQQ”。 即使窃听者夏娃(Eve)截获了“MJJQQ”,在没有密钥k的情况下,无法还原出“HELLO”。
2. 完整性(Integrity)
定义:确保信息在传输或存储过程中未被篡改、插入或删除。即使攻击者无法读取信息内容,也可能试图修改它以达到破坏目的。
实现方式:主要通过密码学散列函数(Cryptographic Hash Function) 和消息认证码(Message Authentication Code, MAC) 实现。散列函数将任意长度输入映射为固定长度的唯一“指纹”(哈希值),具有单向性(从哈希值无法反推原文)和抗碰撞性(极难找到两个不同输入产生相同哈希值)。MAC则结合密钥与散列,确保只有持有密钥的通信方才能生成或验证有效的认证标签。
日常例子:
- 软件下载时的MD5/SHA-256校验码,验证文件是否被篡改。
- 区块链中每个区块包含前一区块的哈希,形成不可篡改的链式结构。
- 数字证书使用散列确保内容完整。
简单示例: Alice发送消息“转账100元给Bob”给银行。如果仅加密(保证机密性),Eve可能截获密文,将其篡改为“转账10000元给Eve”后转发。如果同时附加一个基于共享密钥的MAC(如HMAC-SHA256),银行收到后重新计算MAC并与收到的MAC比较。若消息被篡改,计算出的MAC将不匹配,银行即可拒绝执行。这确保了消息的完整性。
3. 认证性(Authentication)
定义:确认通信对方的真实身份,防止冒充(伪装成他人)。在数字世界中,认证是建立信任的第一步。
实现方式:主要通过数字证书、数字签名和挑战-响应协议实现。公钥基础设施(PKI)是核心框架:可信的证书颁发机构(CA)对用户的公钥进行数字签名,形成数字证书。当A想与B通信时,B出示其证书,A验证CA签名以确认B的公钥及身份真实性。数字签名(用私钥签名,公钥验证)本身也提供了身份认证。
日常例子:
- 网站HTTPS锁图标:浏览器验证网站服务器证书,确认其属于“example.com”而非钓鱼网站。
- 登录双因素认证(2FA):密码(所知)加上手机验证码(所有)或生物特征(所是)。
- 软件代码签名:开发者用私钥签名软件,操作系统用公钥验证来源可信。
简单示例: Bob收到一条消息“我是Alice,请转账1000元到账户X”。Bob如何确信消息确实来自Alice,而非Eve冒充?如果Alice在消息后附加自己的数字签名(用Alice的私钥对消息摘要进行加密),Bob使用Alice的公钥验证签名。验证成功则证明:1)消息来自持有对应私钥的Alice(认证);2)消息在签名后未被篡改(完整性)。这同时实现了认证与完整性。
4. 不可否认性(Non-repudiation)
定义:防止通信方事后否认其曾经执行过的操作或发送过的消息。这是商业交易、法律电子文件等场景的关键需求。
实现方式:主要通过数字签名实现。由于私钥仅由签名者持有,其数字签名在数学上无法被伪造。因此,签名者无法否认其签名行为,因为只有其私钥能生成该签名。可信的第三方(如时间戳服务机构)可提供额外证据。
日常例子:
- 电子合同签署(如DocuSign):各方数字签名后,无法否认签署意愿。
- 电子邮件数字签名(S/MIME, PGP):证明邮件发件人身份,且发件人无法抵赖。
- 区块链交易:用户用私钥签名交易,网络验证后记录在不可篡改的账本上,用户无法否认该交易。
简单示例: Alice通过数字签名授权了一笔电子支付。事后,若Alice声称“我的私钥被盗用,这不是我操作的”,在法律和 technical 层面,她需要证明私钥确实被盗且未授权。但在密码学层面,有效的数字签名本身即构成强烈证据,因为私钥在理论上仅由Alice控制。这为纠纷解决提供了技术依据。
四目标关系图示 这四个目标相互关联,共同构成安全通信的完整图景。一个理想的安全协议(如TLS)通常同时提供全部四项保障。下图展示了它们与基本密码操作(加密、解密、签名、验证)的对应关系:
```mermaid graph TD A[发送方 Alice] -->|1. 加密| B[密文] B -->|2. 传输| C[接收方 Bob] C -->|3. 解密| D[明文]
A -->|4. 生成数字签名| E[签名] A -->|5. 附加签名| B C -->|6. 验证签名| F[验证结果]
B -->|Eve 窃听/篡改| G[攻击]
D --> H[实现目标] F --> H
H --> I[机密性] H --> J[完整性] H --> K[认证性] H --> L[不可否认性]
I -.->|加密保护| D J -.->|MAC/签名保护| F K -.->|签名/证书保护| F L -.->|数字签名保护| A ```
密码学的基本模型:通信双方与窃听者
为了系统化地研究密码,我们需要一个简洁而普适的抽象模型。现代密码学的基础是香农(Claude Shannon)于1949年提出的通信模型,其核心由三方组成:
1. 发送方(Sender):通常称为 Alice,拥有要秘密传输的明文消息 $M$。 2. 接收方(Receiver):通常称为 Bob,是期望收到正确明文的合法方。 3. **窃听者/攻击