密码学概述与历史演进
密码学作为信息安全领域的基石,其核心使命是在存在潜在 adversaries 的环境中,通过数学变换确保信息的保密性、完整性、认证性与不可否认性。这一古老而又年轻的科学,起源于人类对秘密通信的永恒需求,历经从简单替换到复杂数学结构的深刻变革,如今已成为数字时代信任基础设施的核心组成部分。现代密码学不仅支撑着每日数十亿次的互联网交易与通信,更在国家安全、金融体系、隐私保护等关键领域扮演着不可替代的角色。理解密码学的基本原理、安全范式与历史脉络,是深入掌握其后继技术——从对称加密到公钥基础设施,从哈希函数到量子安全——的必要前提。本章将系统阐述密码学与密码分析的基本界定,剖析信息论安全与计算安全两大范式的核心思想,回顾从古代凯撒密码到恩尼格玛机直至现代公钥革命的历史演进,阐释 Kerckhoffs 原则及其对当代密码系统设计的深远影响,并最终勾勒出密码学四大安全目标的应用图景与全书整体架构。
密码学与密码分析的基本界定
密码学(Cryptography)与密码分析(Cryptanalysis)共同构成密码科学(Cryptology)的二元核心。密码学专注于设计密码系统以实现特定的安全目标,而密码分析则致力于以各种攻击手段破解这些系统。两者处于永恒的对抗与共生之中:每一次成功的密码分析都推动密码学向更坚实的设计原则演进,而每一次密码学的创新又为密码分析提出新的挑战。从学科本质看,密码学是一门交叉学科,融合了数学、计算机科学、信息论与工程学,其核心工具是数学变换,核心目标是构建在对抗性环境中仍能维持安全属性的系统。
一个密码系统(Cipher System)通常由三元组 $(\mathcal{K}, \mathcal{E}, \mathcal{D})$ 定义,其中 $\mathcal{K}$ 是密钥空间,$\mathcal{E}$ 是加密算法集合,$\mathcal{D}$ 是解密算法集合,满足对所有密钥 $k \in \mathcal{K}$ 和明文 $m \in \mathcal{M}$,有 $\mathcal{D}_k(\mathcal{E}_k(m)) = m$。密钥 $k$ 是系统的秘密参数,算法 $\mathcal{E}$ 和 $\mathcal{D}$ 通常是公开的。现代密码学强调算法公开性,这正是 Kerckhoffs 原则的体现。密码分析的目标则是从攻击者视角,通过获取密文 $c = \mathcal{E}_k(m)$ 或相关辅助信息,推断出明文 $m$ 或密钥 $k$。
攻击模型(Attack Models)的精确刻画是评估密码系统安全性的基础。根据攻击者所能获取的信息,经典分类包括:
- **唯密文攻击(Ciphertext-Only Attack)**:攻击者仅持有若干密文片段,试图推断明文或密钥。这是信息最少的攻击场景。
- **已知明文攻击(Known Plaintext Attack)**:攻击者同时持有若干对应的明文-密文对 $(m_i, c_i)$。
- **选择明文攻击(Chosen Plaintext Attack, CPA)**:攻击者可选择任意明文并获取其对应的密文,从而主动探知系统行为。
- **选择密文攻击(Chosen Ciphertext Attack, CCA)**:攻击者更进一步,可选择任意密文并获取其解密结果(除目标密文外)。CCA 是更强攻击模型,尤其针对公钥系统。
在实际评估中,攻击者的计算资源也需考量。现代密码学通常假设攻击者是概率多项式时间(Probabilistic Polynomial Time, PPT)的,即其运行时间由安全参数的多项式界定。这一假设构成了计算安全范式的基石。
信息安全的核心目标
密码学的应用最终服务于信息安全的四大核心目标,这些目标相互关联又各有侧重,共同构成了信息安全的理论框架。
保密性(Confidentiality) 是密码学最古老的目标,旨在确保信息仅被授权实体访问,防止未授权泄露。其经典实现是加密(Encryption):将明文通过加密算法和密钥转换为密文,使得未持有密钥的观察者无法从密文中获知明文内容。例如,在传输层安全(TLS)协议中,客户端与服务器协商会话密钥后,所有应用层数据均通过对称加密(如 AES-256)保护,即使数据包被网络嗅探,攻击者也无法解读其内容。保密性不仅针对通信内容,也适用于存储数据(如全盘加密)和计算过程(如同态加密中的密文计算)。
完整性(Integrity) 确保信息在存储或传输过程中未被未授权篡改、插入或删除。完整性验证通常通过消息认证码(Message Authentication Code, MAC)或密码学哈希函数实现。MAC 生成一个依赖于密钥和消息的短标签,接收方通过相同密钥验证标签是否匹配。例如,在 IPsec 协议中,AH(认证头)和 ESP(封装安全载荷)均使用 HMAC(基于哈希的消息认证码)保障数据包完整性。哈希函数(如 SHA-256)则通过单向性和抗碰撞性提供完整性证据:即使消息发生微小变化,其哈希值也会剧烈改变,从而易于检测篡改。
认证性(Authentication) 包含两个层面:数据源认证 验证信息的发送者身份,实体认证 验证通信对方的身份。数字签名是实现数据源认证的核心机制,其基于非对称密码学:发送方使用私钥对消息摘要签名,任何持有对应公钥的验证者均可确认签名有效性,从而确信消息来自声称的发送方。例如,在软件分发中,开发者使用代码签名证书对安装程序签名,操作系统在安装前验证签名,确保软件未被篡改且来源可信。实体认证则常见于登录协议,如基于挑战-响应的机制或基于证书的相互认证(TLS 中的客户端证书)。
不可否认性(Non-repudiation) 防止通信一方事后否认其已执行的操作,如发送过某消息或签署过某合同。数字签名提供法律认可的不可否认性,因为私钥仅由签名者持有,签名行为可被第三方验证。在电子政务和电子商务中,符合《电子签名法》的 digital signature 具有与手写签名同等的法律效力。例如,欧盟的 eIDAS 条例明确认可合格电子签名的不可否认性。
这四大目标并非孤立,实际系统常需同时满足多项。TLS 1.3 协议即是一个综合范例:握手阶段通过数字证书实现服务器认证(及可选的客户端认证),通过签名保证握手消息完整性,通过密钥交换建立共享密钥,随后所有应用数据均受加密(保密性)和 MAC(完整性)保护。理解这些目标的区别与联系,是设计安全协议的关键。
安全范式的二元划分:信息论安全与计算安全
密码系统安全性的评估存在两个根本不同的范式:信息论安全(Information-theoretic Security) 与 计算安全(Computational Security)。这一区分源于克劳德·香农(Claude Shannon)1949年的开创性工作《保密系统的通信理论》,至今仍是密码学理论的基石。
信息论安全:基于熵的无条件保障
信息论安全不依赖于攻击者的计算能力限制,即使攻击者拥有无限算力,也无法破解系统。其核心思想是:密文不泄露关于明文的任何信息。形式化地,设 $M$ 为明文随机变量,$C$ 为密文随机变量,若满足 $I(M;C) = 0$(互信息为零),或等价地 $H(M|C) = H(M)$(给定密文后明文的条件熵等于明文本身的熵),则系统具有信息论安全性。
唯一被证明具有信息论安全性的加密方案是 一次一密(One-Time Pad, OTP),由香农证明。其工作原理为:密钥 $K$ 是与明文等长的随机比特串,加密时 $C = M \oplus K$(按位异或),解密时 $M = C \oplus K$。OTP 的安全性证明直接而优美:当密钥完全随机、仅使用一次、且长度不小于明文时,密文 $C$ 在统计上独立于明文 $M$,因此攻击者无法从 $C$ 推断 $M$ 的任何信息。例如,若明文空间为所有 128 位字符串,密钥空间为所有 128 位随机字符串,则对任意可能的密文,所有可能的明文均等可能,攻击者的后验概率等于先验概率。
然而,OTP 的实践局限性极为显著:密钥长度必须与明文相同,导致密钥管理(生成、分发、存储)的代价与明文本身相当,这在大数据时代几乎不可行。因此,信息论安全更多作为理论基准和特定场景(如极高安全需求的 diplomatic 通信)的解决方案,而非通用加密方案。
计算安全:基于困难性假设的实用保障
计算安全是当代密码学的默认范式。其核心思想是:任何有效攻击(在合理时间内)的成功概率均可忽略,因为这需要解决某个公认的计算困难问题。形式化定义依赖于安全参数 $\lambda$(通常为密钥长度)和概率多项式时间(PPT)攻击者。
一个密码方案是 语义安全(Semantic Security) 的(等价于 IND-CPA 安全),如果对任意 PPT 攻击者,其从密文中获取的任何关于明文的信息,与其在未见到密文时获取的信息无显著差异。更严格的定义通过 安全游戏(Security Game) 给出:挑战者与攻击者交互,攻击者输出两个明文 $m_0, m_1$,挑战者随机选择 $b \in \{0,1\}$ 并返回 $c = \mathcal{E}_k(m_b)$,攻击者尝试猜测 $b$。攻击者的优势定义为 $\text{Adv}_{\mathcal{A}}^{\text{ind-cpa}}(\lambda) = |\Pr[\mathcal{A}\text{ outputs } b] - 1/2|$。若对所有 PPT 攻击者 $\mathcal{A}$,该优势是可忽略函数 $\text{negl}(\lambda)$(即比任何多项式衰减更快),则方案是 IND-CPA 安全的。
计算安全的安全性归约(Reduction)到数学难题是证明的关键。例如:
- **RSA 问题**:给定模 $n=pq$ 和 $c = m^e \mod n$,求 $m$。其困难性基于大整数分解问题(Integer Factorization):分解 $n$ 为 $p$ 和 $q$。
- **离散对数问题(DLP)**:在循环群 $G$ 中,给定生成元 $g$ 和 $h = g^x$,求 $x$。其变体 **计算性 Diffie-Hellman 问题(CDH)** 要求计算 $g^{xy}$ 给定 $g^x, g^y$。
- **椭圆曲线离散对数问题(ECDLP)**:在椭圆曲线群上求解离散对数,目前比经典 DLP 更难,因此 ECC 可用更短密钥达到同等安全级别。
这些困难问题的“公认”地位源于长期研究未发现亚指数时间算法,且与 P vs NP 等复杂性理论问题相关。然而,计算安全本质上是“暂时安全”——若未来出现高效算法或量子计算机,当前方案可能被攻破。这引出了后量子密码学的紧迫性。
两种范式的对比与融合
| 维度 | 信息论安全 | 计算安全 | |------|------------|----------| | 安全假设 | 无(无条件) | 计算困难性假设(如 P ≠ NP) | | 攻击者能力 | 无限算力 | 概率多项式时间(PPT) | | 典型方案 | 一次一密(OTP) | AES、RSA、ECC | | 密钥管理 | 密钥长度≥明文,难以实践 | 密钥短,易于管理 | | 安全性持久性 | 永恒安全 | 依赖计算能力进展 | | 主要应用 | 极高安全需求场景(如核命令) | 绝大多数实际系统 |
值得注意的是,某些方案可同时具备两种安全属性。例如,量子密钥分发(QKD) 基于量子物理原理(如不可克隆定理),可实现信息论安全的密钥分发,但其实际系统仍受设备缺陷影响,常需结合计算安全协议。此外,掩码(Masking) 等侧信道防御技术试图在物理层面逼近信息论安全。
历史演进:从古典到现代
密码学的历史是一部人类智识与对抗技术的壮阔史诗,其发展可划分为五个关键阶段,每个阶段都标志着安全理念与技术的深刻变革。
古代与古典密码:手工时代的智慧
最早的文字密码可追溯至古埃及(约公元前1900年)使用非标准象形文字的 inscription,以及斯巴达的 scytale(约公元前5世纪):将羊皮纸条缠绕在特定直径的棍上书写,展开后字符顺序混乱,仅相同直径的棍可复原。这些早期尝试依赖物理媒介的保密性。
凯撒密码(Caesar Cipher) 是历史上最著名的替换密码,据称由尤利乌斯·凯撒用于高卢战争中的军事通信。其加密函数为 $E_k(m) = (m + k) \mod 26$,其中 $m$ 为字母在字母表中的位置(A=0, B=1, …),$k$ 为固定移位(通常为3)。例如,明文 "HELLO" 加密为 "KHOOR"。凯撒密码的安全性极低,仅因算法保密而有效,完全违反 Kerckhoffs 原则。
维吉尼亚密码(Vigenère Cipher)(16世纪)引入了多表替换概念,使用一个关键词重复扩展为密钥流,每个字母决定不同的凯撒移位表。其加密公式为 $c_i = (m_i + k_{i \mod \ell}) \mod 26$,其中 $\ell$ 为密钥长度。维吉尼亚密码曾被称为“不可破译的密码”,直至19世纪中叶,弗里德里希·卡西斯基(Friedrich Kasiski)和查尔斯·巴贝奇(Charles Babbage)独立发现 周期检测法:通过分析密文中相同片段重复出现的间隔,推断密钥长度,进而分解为多个凯撒密码逐个攻破。这一突破标志着密码分析从艺术向科学的转变。
机械密码时代:恩尼格玛的兴衰
20世纪初,机电转子机的发明将密码学带入机械化时代。恩尼格玛机(Enigma Machine) 是纳粹德国在二战中广泛使用的
恩尼格玛的兴衰与密码学的科学化转型
恩尼格玛机的构造体现了机械密码学的巅峰,其核心由多个可旋转的转子(Rotors)、反射器(Reflector)和插接板(Plugboard)组成。以商用Enigma I型为例,它配备三个转子(从六种转子中选三),每个转子内部有26个触点的复杂布线,实现字母间的非循环置换。当操作者按下键盘上某个字母键,电流依次通过插接板(实现额外置换)、三个转子(实现多级替换)、反射器(将信号折返通过转子),最终点亮一个字母灯,显示密文。每敲击一次按键,至少一个转子会前进一步(类似里程表),改变后续所有字符的置换映射,从而产生周期极长的密钥流。
恩尼格玛的安全性曾被认为"不可破译",其优势在于:
- **庞大的密钥空间**:仅转子排列组合就达 $6 \times 5 \times 4 = 120$ 种,转子初始位置 $26^3 = 17,576$ 种,插接板配对约 $1.5 \times 10^{14}$ 种,总密钥空间超过 $10^{23}$。
- **动态加密**:每次按键后转子转动,使得相同明文字母加密为不同密文字母,有效抵抗频率分析。
然而,恩尼格玛存在两个致命设计缺陷:反射器导致明文与密文永不对应(即若明文A加密为D,则D加密为A),以及密钥管理的灾难性漏洞——德军operator常选择简单密钥(如"AAA")、重复设置,甚至使用固定手册密钥。这些人为失误为盟军破译提供了突破口。
波兰密码学家马里安·雷耶夫斯基(Marian Rejewski)、亨里克·佐加尔斯基(Henryk Zygalski)和耶日·鲁日茨基(Jerzy Różycki)在1932年率先突破恩尼格玛,他们利用法国情报获取的每日密钥表,结合数学群论分析转子 permutations,发明了"炸弹"(Bomba)机电设备进行密钥搜索。1939年波兰将成果移交英国,布莱切利园(Bletchley Park)的艾伦·图灵(Alan Turing)等人在此基础上改进,设计出更强大的"炸弹"(Bombe)机器,并发展出概率密码分析技术(如"banburismus")。据估计,盟军破译恩尼格玛缩短二战至少两年,拯救数百万生命。
恩尼格玛的破译揭示了密码学的根本教训:系统的安全性不应依赖于算法的保密,而应仅依赖于密钥的保密。这一原则由荷兰密码学家奥古斯特·柯克霍夫斯(Auguste Kerckhoffs)于1883年在《军事密码学》中系统阐述,成为现代密码学的基石。
Kerckhoffs原则:密码系统设计的黄金准则
柯克霍夫斯在19世纪末提出了密码系统设计的六条原则,其中第二条最为著名:"密码系统的安全性应依赖于密钥的保密,而非算法的保密。" 这一原则看似简单,却深刻改变了密码学的设计哲学。
原则的完整表述与内涵
柯克霍夫斯的六条原则全文如下: 1. 系统应 practically 不可破译,即使被敌人掌握。 2. 安全性不应依赖于算法的保密,而应依赖于密钥的保密。 3. 密钥应易于记忆和修改,无需编写新指令。 4. 密钥应可适用于电报通信。 5. 系统应便于携带和操作。 6. 系统应易于使用,无需特殊人员或复杂设备。
第二条原则的核心逻辑是:算法公开可接受广泛审查,从而暴露潜在弱点;而算法保密仅能提供"隐蔽安全"(Security through Obscurity),一旦泄露则系统彻底崩溃。历史反复证明,依赖算法保密的系统终将失败:恩尼格玛的算法被缴获后迅速被破译;美国加密机C-36(1930年代)因算法保密且设计缺陷被威廉·弗里德曼(William Friedman)团队攻破;甚至现代某些"自创加密算法"也常因未经公开审查而存在隐蔽漏洞。
现代诠释:柯克霍夫斯原则的实践意义
在当代密码学中,柯克霍夫斯原则体现为:
- **算法公开与标准化**:AES、RSA、SHA-3等国际标准均经过公开征集和全球密码学家的多年审查,其安全性建立在集体智慧之上。NIST(美国国家标准与技术研究院)的AES竞赛(1997-2000)收到15个候选算法,经过多轮公开分析和讨论,最终Rijndael算法胜出。
- **"攻击者模型"假设**:现代密码分析假设攻击者完全了解算法细节(除了密钥),这迫使设计者必须确保即使算法完全公开,系统依然安全。这种"公开设计、秘密密钥"的模式,类似于现代锁具:锁的构造公开,但钥匙(密钥)独特。
- **开源密码库的兴起**:OpenSSL、Libsodium等开源密码库接受全球社区审计,漏洞修复更快。相比之下,闭源实现常因缺乏外部审查而遗留严重问题(如2014年OpenSSL的Heartbleed漏洞虽为实现缺陷,但开源使其被快速发现)。
柯克霍夫斯原则的边界与争议
柯克霍夫斯原则并非绝对。在某些场景下,算法保密仍有价值:
- **临时保护**:在新算法标准化前,临时保密可防止早期攻击。
- **深度防御**:算法保密作为多层防御的一环,与密钥保密结合。
- **专有系统**:某些商业产品(如游戏DRM)依赖算法保密增加破解难度