What is Cryptography, Anyway?
想象一下这个场景:你正在用 WhatsApp 和远在国外的朋友密聊,屏幕上显示“消息已加密”;你下载一个大型软件安装包,系统提示“发行者已验证,文件完整”;你在电子合同上签下名字,法律效力等同于亲笔签名;你登录银行 App 时,指纹或面部识别瞬间通过。这些瞬间——加密、验证、签名、认证——看似简单,却是现代数字生活的隐形守护者。它们共同指向一个深邃而迷人的领域:密码学(Cryptography)。但密码学仅仅是“加密”吗?它如何在我们看不见的地方构建信任?为什么说没有密码学,整个互联网将瞬间崩塌?本章将带你穿越表象,理解密码学的本质、核心目标、基本术语与威胁模型,为后续的技术深潜奠定坚实的认知基础。
密码学:从“隐秘书写”到“数字信任基石”
密码学(Cryptography)一词源自希腊语 *kryptós*(隐藏的)和 *gráphein*(书写),字面意思是“隐秘的书写”。这一古老概念可追溯至公元前,凯撒大帝使用简单的移位密码(Caesar Cipher)保护军事通信,其原理是将字母表固定偏移(如 A→D,B→E),接收方只需反向偏移即可解密。这种古典密码学(Classical Cryptography)的核心目标是保密性:确保信息在传输过程中不被第三方理解。
然而,现代密码学(Modern Cryptography)的范畴早已远超“保密”。20世纪中叶,克劳德·香农(Claude Shannon)的划时代论文《保密系统的通信理论》(Communication Theory of Secrecy Systems)将密码学从艺术转变为科学。他提出了完善保密性(Perfect Secrecy) 的严格定义:即使攻击者拥有无限计算能力,密文也不泄露任何关于明文的信息。著名的“一次性密码本(One-Time Pad)”是唯一可实现完善保密性的方案,其原理是使用与明文等长、真正随机的密钥进行异或运算。但实际中,密钥分发和存储的难题使其难以大规模应用。
香农的贡献在于引入了信息论(Information Theory) 和概率论来分析密码系统。他定义了冗余度(Redundancy) 和不确定性,指出密码系统的安全性取决于密钥空间的大小和明文的统计特性。例如,英语文本有大量冗余(如“the”高频出现),攻击者可利用频率分析破解古典密码。
现代密码学建立在计算复杂性理论(Computational Complexity Theory) 之上。它不再追求“绝对安全”,而是计算安全(Computational Security):在合理时间内(如宇宙寿命内),攻击者无法破解系统,除非解决某个公认的数学难题。这些难题构成了当代密码学的基石:
- **大整数分解问题(Integer Factorization Problem)**:给定大合数 $n = p \times q$($p, q$ 为大素数),求 $p$ 和 $q$。RSA 算法即基于此。
- **离散对数问题(Discrete Logarithm Problem, DLP)**:在有限域或椭圆曲线上,给定 $g, g^x \mod p$,求 $x$。Diffie-Hellman 密钥交换和 ElGamal 加密基于此。
- **椭圆曲线离散对数问题(Elliptic Curve Discrete Logarithm Problem, ECDLP)**:在椭圆曲线群上求解离散对数,比经典 DLP 更难,因此可用更短密钥实现相同安全强度。
这些难题的“困难性”并非数学证明(如 P≠NP 未解),而是基于数十年攻击未果的经验信任。密码学家使用安全归约(Security Reduction) 将密码方案的安全性归约到这些难题上:若方案可破,则难题可解。这种“可证明安全(Provable Security)”范式是现代密码学的核心方法论。
值得注意的是,密码学(Cryptography) 与密码编码学(Cryptology) 常被混淆。密码学是密码编码学的子集,专注于设计安全算法;密码编码学还包括密码分析(Cryptanalysis)——研究如何破解密码系统。两者是攻防永续的“军备竞赛”:DES 被差分密码分析破解后,AES 取而代之;RSA 面临量子计算威胁时,后量子密码学(Post-Quantum Cryptography)正在崛起。
四大核心目标:构建数字信任的支柱
现代密码学系统通常旨在实现四个相互关联但独立的核心目标。理解它们是分析任何安全协议的基石。下图展示了四者的关系与区别:
```mermaid graph TD A[密码学核心目标] --> B[机密性<br>Confidentiality] A --> C[完整性<br>Integrity] A --> D[认证<br>Authentication] A --> E[不可否认性<br>Non-repudiation]
B --> F[防止未授权访问] C --> G[防止未授权修改] D --> H[验证身份与来源] E --> I[防止发送方抵赖]
D --> J[常与完整性结合<br>如数字签名] E --> J ```
机密性(Confidentiality):确保“只有你能看”
定义:保证信息仅对授权方可见,防止未授权方(包括被动窃听者)获取内容。
经典实现:加密(Encryption)。明文(Plaintext)通过算法和密钥转换为密文(Ciphertext),解密需相应密钥。加密分两类:
- **对称加密(Symmetric Encryption)**:加密与解密用同一密钥。代表算法:AES(高级加密标准),密钥长度 128/192/256 位,速度快,用于 bulk 数据加密(如磁盘加密、TLS 记录层)。
- **非对称加密(Asymmetric Encryption)**:使用公钥/私钥对。公钥公开,私钥保密。加密用公钥,解密用私钥。代表算法:RSA,基于大数分解;ECC(椭圆曲线密码学),基于 ECDLP,密钥更短效率更高。用于密钥交换、小数据加密(如会话密钥)。
威胁模型:窃听(Eavesdropping)。攻击者在通信链路(如 Wi-Fi、光纤)上截获密文。若加密算法安全,密文应接近随机分布,不泄露明文统计信息。
实例:HTTPS 连接建立时,客户端与服务器通过非对称加密(如 RSA 或 ECDHE)安全协商一个会话密钥(Session Key),后续通信使用对称加密(AES-GCM)加密,兼顾安全与效率。若此过程被窃听,攻击者仅得密文,无法解密。
关键点:机密性依赖密钥保密性(Kerckhoffs 原则:安全应仅依赖密钥,而非算法保密)。密钥管理(生成、分发、存储、销毁)是实践中最薄弱环节。
完整性(Integrity):确保“数据未被篡改”
定义:保证信息在存储或传输过程中未被未授权修改(插入、删除、替换),无论有意或无意。
经典实现:密码散列函数(Cryptographic Hash Function) 和消息认证码(Message Authentication Code, MAC)。
- **密码散列函数**:将任意长度输入映射为固定长度输出(哈希值/digest),特性包括:
- **确定性**:相同输入必得相同输出。
- **快速计算**:输入任意长度,输出固定(如 SHA-256 输出 256 位)。
- **抗碰撞(Collision Resistance)**:难找两个不同输入产生相同输出。
- **抗第二原像攻击(Second Preimage Resistance)**:已知输入 $m$,难找 $m' \neq m$ 使 $\text{hash}(m) = \text{hash}(m')$。
- **抗原像攻击(Preimage Resistance)**:已知哈希值 $h$,难反推任一输入 $m$ 使 $\text{hash}(m)=h$。
代表算法:SHA-2(SHA-256, SHA-384, SHA-512)、SHA-3(Keccak)。用于验证文件完整性(如下载后比对哈希值)、数字签名中的“摘要”计算。
- **MAC**:使用密钥的散列函数,提供完整性+认证。常见构造:HMAC(基于散列的 MAC)、CMAC(基于块密码的 MAC)。接收方用共享密钥计算 MAC,比对接收到的 MAC 值。
威胁模型:篡改(Tampering)。攻击者修改数据后,需同时修改 MAC 或哈希值才能蒙混过关。若使用密钥(MAC),攻击者无密钥则无法伪造有效 MAC。
实例:软件更新。开发者计算安装包的 SHA-256 哈希值并发布。用户下载后独立计算哈希,若与官方值一致,则包未被篡改(完整性)。若同时使用签名(见下文),还可验证来源(认证)。
关键点:仅用散列函数(无密钥)只能检测意外错误,无法防御主动攻击。防御主动篡改需 MAC 或数字签名。
认证(Authentication):确保“你是你,数据来自声称方”
定义:验证实体(人、设备、系统)身份或数据来源的真实性。分两类:
- **身份认证(Entity Authentication)**:验证通信对方身份(如登录时密码、生物特征、令牌)。
- **数据源认证(Data Origin Authentication)**:验证消息确实来自声称的发送方(常与完整性结合)。
经典实现:数字签名(Digital Signature) 是核心工具。使用非对称加密:发送方用私钥对消息(或其哈希)签名;接收方用发送方公钥验证签名。若验证通过,则证明: 1. 消息来自持有对应私钥的实体(认证)。 2. 消息未被篡改(因签名基于消息内容,完整性)。 3. 发送方事后不能否认(因仅其私钥能生成有效签名,不可否认性)。
标准算法:RSA-PSS、ECDSA(椭圆曲线)、EdDSA(Ed25519 高效安全)。流程: 1. 发送方计算消息哈希 $h = \text{Hash}(m)$。 2. 用私钥 $sk$ 对 $h$ 签名:$\sigma = \text{Sign}(sk, h)$。 3. 发送 $(m, \sigma)$。 4. 接收方用公钥 $pk$ 验证:$\text{Verify}(pk, m, \sigma)$ 返回真/假。
实例:PGP/GPG 电子邮件签名。发件人用私钥签名邮件,收件人用公钥验证,确保邮件来自发件人且未中途被邮件服务器或攻击者修改。
其他机制:
- **证书(Certificates)**:由可信第三方(证书颁发机构,CA)绑定公钥与身份,解决公钥真实性问题(防止公钥替换攻击)。
- **挑战-应答(Challenge-Response)**:如 SSH 登录,服务器发随机挑战,客户端用私钥签名响应,证明持有私钥。
威胁模型:假冒(Impersonation)、中间人攻击(Man-in-the-Middle, MitM)。攻击者伪装成合法方(如伪造网站),或拦截并篡改通信。数字签名与证书体系是防御关键。
不可否认性(Non-Repudiation):确保“不能抵赖”
定义:防止发送方事后否认其曾执行的操作(如发送消息、签署合同)。这是法律和商业场景的核心需求。
实现:主要依赖数字签名,因其使用发送方独有私钥生成,理论上仅发送方能创建有效签名。但需注意:
- 私钥必须严格保密。若私钥泄露,攻击者可伪造签名,发送方可辩称“非我所为”。
- 需结合**可信时间戳(Trusted Timestamp)**:由权威时间戳服务机构对签名加时间戳,证明签名在某个时刻已存在,防止发送方声称“签名是事后伪造的”。
- 法律层面需符合电子签名法规(如 eIDAS、ESIGN),认可特定数字签名的法律效力。
实例:区块链交易。用户用私钥对交易签名,全网验证。一旦交易写入区块,用户无法否认曾转移资产。
与认证的区别:认证关注实时验证身份或来源;不可否认性关注事后法律举证。数字签名同时提供两者,但实现不可否认性需额外保障(如私钥管理、时间戳、法律框架)。
威胁模型:抵赖(Repudiation)。发送方否认行为,接收方无法举证。数字签名提供技术证据,但需配合审计日志、密钥托管政策等。
威胁模型:谁在攻击?如何攻击?
设计密码系统前,必须明确定义威胁模型(Threat Model):假设攻击者能力、目标、可获取资源。不同场景模型不同(如军事通信 vs 移动支付)。主要分类:
按攻击方式
- **被动攻击(Passive Attack)**:窃听或监控通信,不改变数据。目标:获取机密性。防御:加密。检测难,需依赖加密强度。
- **主动攻击(Active Attack)**:篡改、伪造、重放、拒绝服务。目标:破坏完整性、认证、可用性。防御:完整性检查(MAC/签名)、序列号、认证协议。可检测(如 MAC 校验失败)。
按攻击者知识
- **唯密文攻击(Ciphertext-Only Attack)**:仅见密文。最弱,现代算法应能抵抗(如 AES)。
- **已知明文攻击(Known Plaintext Attack)**:有若干明文-密文对。
- **选择明文攻击(Chosen Plaintext Attack, CPA)**:可自选明文获取对应密文(如加密服务)。现代加密方案(如 AES-CTR 需唯一 nonce)需抗 CPA。
- **选择密文攻击(Chosen Ciphertext Attack, CCA)**:可自选密文获取解密结果(如解密服务)。更强,公钥加密需抗 CCA(如 RSA-OAEP、NTRU)。
按攻击者能力
- **计算能力**:经典计算机 vs 量子计算机。Shor 算法可破 RSA/ECC,Grover 算法将对称密钥搜索减半(AES-256 仍安全)。
- **侧信道攻击(Side-Channel Attack)**:不攻击算法本身,而利用实现泄露信息:
- **时序攻击(Timing Attack)**:测量操作时间差异(如 RSA 模幂运算时间依赖私钥位)。
- **功耗分析(Power Analysis)**:分析设备功耗曲线(如 DPA 破智能卡)。
- **电磁泄漏(EM Leakage)**:捕获电磁辐射。
- **故障攻击(Fault Attack)**:诱导错误(如激光照射芯片),分析错误输出推导密钥。
防御:常数时间实现、掩码(Masking)、屏蔽。
- **社会工程学(Social Engineering)**:欺骗人类而非机器(如钓鱼攻击获取密码)。密码学无法直接防御,需结合安全意识。
实际攻击案例
1. Heartbleed 漏洞(2014):OpenSSL 的 Heartbeat 扩展实现缺陷,允许攻击者读取服务器内存(含私钥、会话 Cookie),破坏机密性。非算法弱点,而是协议实现 bug。 2. ROCA 漏洞(2017):Infineon 智能卡 RSA 密钥生成算法缺陷,导致密钥易被恢复,影响 Estonia 国民身份证等。凸显实现重要性。 3. 量子威胁预演:2019 年,IBM 用 53 量子比特处理器完成小规模整数分解(21=3×7),虽离破解 RSA-2048 尚远,但推动 NIST 后量子密码标准化(CRYSTALS-Kyber、Dilithium 等入选)。
密码学在现代数字社会中的关键角色
密码学已从军事、外交的“黑科技”渗透至数字社会的每个毛细血管,成为信任的基石。其作用可概括为:
1. 通信安全:互联网的“防弹衣”
- **TLS/SSL**:保护 Web(HTTPS)、邮件(SMTP over TLS)、即时通讯(Signal 协议)。提供握手阶段认证与密钥交换,记录层加密与完整性。
- **VPN**:通过 IPsec、OpenVPN 等建立安全隧道,保护远程访问与跨网络通信。
- **端到端加密(E2EE)**:如 Signal、WhatsApp,服务商也无法解密内容,实现最高级别隐私。
2. 数据保护:静态与动态的“保险箱”
- **磁盘加密**:BitLocker(Windows)、FileVault(macOS)、LUKS(Linux),使用 AES-XTS 模式,防止设备丢失导致数据泄露。
- **数据库加密**:透明加密(TDE)或应用层加密,保护敏感字段(如信用卡号)。
- **云存储加密**:客户端加密(用户控制密钥)与服务端加密(服务商管理密钥)模型不同,信任假设迥异。
3. 身份与访问管理:数字世界的“身份证”
- **单点登录(SSO)**:基于 SAML、OAuth 2.0、OpenID Connect,使用数字签名和加密令牌,安全跨域认证。
- **零知识证明(Zero-Knowledge Proof, ZKP)**:证明自己知道秘密(如密码)而不泄露秘密。Zcash 等隐私币使用 zk-SNARKs 实现交易隐私。
- **生物特征保护**:指纹/面部模板不存储原始图像,而存储不可逆的**模板保护(Template Protection)** 特征或加密存储。
4. 金融与区块链:价值转移的“公证人”
- **数字货币**:比特币使用 ECDSA 签名交易,SHA-256 哈希链接区块,实现去中心化账本。智能合约(如以太坊)依赖密码学保证代码执行不可篡改。
- **支付协议**:EMV(芯片卡)使用动态数据认证(DDA/CDA)防克隆。
- **央行数字货币(CBDC)**:设计需平衡隐私与监管,常采用匿名凭证或可控匿名方案。
5. 软件与供应链安全:防止“毒苹果”
- **代码签名**:开发者用私钥签名软件,操作系统验证后才允许安装,防止恶意篡改(如 macOS Gatekeeper、Windows Defender Application Guard)。
- **供应链安全**:sigstore 等项目为开源软件构件提供透明签名,确保从源码到二进制未被植入后门。
- **固件验证**:UEFI Secure Boot 使用 PKI 验证引导加载程序,防御固件级恶意软件(如 LoJax)。
6. 法律与合规:电子证据的“压舱石”
- **电子签名法**:各国法律(如欧盟 eIDAS、