跳转到内容
← 返回核心概念
安全与隐私计算机科学 · 密码学18 分钟阅读

加密基础

Encryption Basics

1977 年,Ron Rivest、Adi Shamir、Leonard Adleman 设计了后来以三人姓氏首字母命名的 RSA,并于次年发表。它利用模幂运算易算、从公开参数恢复私钥在已知经典算法下代价极高的不对称性。 RSA 是早期公开发表的实用公钥加密与签名方案之一,不是“公钥思想的唯一第一步”:Diffie–H…

密码学加密公钥密码RSA哈希

1977 年,Ron Rivest、Adi Shamir、Leonard Adleman 设计了后来以三人姓氏首字母命名的 RSA,并于次年发表。它利用模幂运算易算、从公开参数恢复私钥在已知经典算法下代价极高的不对称性。

RSA 是早期公开发表的实用公钥加密与签名方案之一,不是“公钥思想的唯一第一步”:Diffie–Hellman 密钥交换和 Merkle puzzles 均属于同一时期的突破。

在 RSA 之前,如果两个人想加密通信,必须事先通过秘密渠道交换密钥。这使得加密技术几乎专属于军事和外交。RSA(以及同时期 Diffie 和 Hellman 的密钥交换协议)改变了这一切,使得今天每一次 HTTPS 连接都能在不事先共享秘密的情况下建立加密通信。

一个被尘封的前传

RSA 是公开历史上的第一个公钥密码系统,但很可能不是人类历史上的第一个。

英国情报机构 GCHQ 的数学家其实更早走到了同一步,只是成果被列为机密。1969 年,James Ellis 在内部报告中提出"非秘密加密"(non-secret encryption)的设想:通信双方无需事先共享密钥。

1973 年 11 月,GCHQ 的 Clifford Cocks 写下一份题为《关于"非秘密加密"的笔记》的文件,给出了与 RSA 实质等价的方案,比 Rivest 等人早了约四年。次年,同事 Malcolm Williamson 又独立得到了与 Diffie-Hellman 等价的密钥交换方法。

这些工作直到 1997 年才解密。James Ellis 在公开承认前一个月去世,没能等到外界知道他做了什么。

这段历史提醒我们:密码学的突破常常同时发生在公开学界和保密机构,我们看到的"第一"往往只是冰山露出水面的部分。

破除误解:加密不是把文字混乱

人们常把加密理解为"把文字打乱,只有知道规则的人才能读懂"。这个直觉来自凯撒密码——字母循环移位——但现代密码学完全不同。

现代密码学把安全主张写成攻击模型:攻击者能查询什么、获得多少密文、是否能篡改消息、可投入多少计算,以及成功条件是什么。安全性不依赖算法保密,而依赖密钥、随机数、实现和经过分析的困难假设。

这里要补一个反直觉的事实:一个算法的数学证明通常只覆盖规定模型。真实系统还可能因随机数复用、侧信道、错误处理、降级协商、密钥泄露或端点被攻陷而失败。“使用 AES”不是完整安全论证。

先写威胁模型,再选择原语

密码系统至少要区分:

  • 资产:消息内容、身份、密钥、元数据、历史通信或软件制品;
  • 对手能力:被动监听、主动篡改、选择密文查询、控制终端、窃取长期密钥或量子计算;
  • 安全目标:机密性、完整性、来源认证、重放防护、前向保密或可审计性;
  • 信任边界:密钥生成、硬件、证书机构、构建系统、备份和恢复;
  • 寿命:数据只需保密一分钟,还是需要保密数十年。

原语只提供局部性质,协议负责组合顺序、上下文绑定、算法协商和失败处理,应用还负责授权与业务状态。三层任何一层出错,都可能让“理论安全”的算法失效。

理论上唯一被证明无条件安全(即便攻击者拥有无限算力也破不开)的密码,是一次性密码本(one-time pad)。它由 Gilbert Vernam 在 1917 年提出:用一段与明文等长、完全随机、且只用一次的密钥逐位异或。

1949 年,信息论奠基人 Claude Shannon 在《保密系统的通信理论》中用数学证明了它的"完美保密性":密文不泄露任何关于明文的信息。

代价是它几乎无法实用——密钥必须和消息一样长、真随机、用完即弃,还得安全送到对方手里。于是现代密码学选择了另一条路:放弃"无条件安全",换取可用性,转而依赖计算困难性。

对称加密:共享秘密

对称加密:加密和解密使用相同的密钥。速度快,适合大量数据。

AES(Advanced Encryption Standard):NIST 在 2001 年标准化的分组密码,支持 128、192、256 位密钥。2^128 描述理想暴力搜索空间,不应换算成一个固定“多少年”结论;实际安全还受密钥熵、模式、实现和攻击预算限制。

还有个常见误解值得澄清:加密本身并不保证数据没被篡改。只做加密,攻击者虽然读不懂内容,却可能悄悄改动密文,让你解出错误甚至危险的明文。

因此现代系统使用带认证的加密(AEAD),如 AES-GCM 或 ChaCha20-Poly1305,同时提供机密性和密文完整性,并把协议头等未加密上下文作为附加认证数据绑定。

AEAD 仍有严格前提。以 GCM 为例,同一密钥下复用 nonce 会泄露明文关系并破坏认证;接收端必须在认证标签验证成功前拒绝使用明文。nonce 生成、密钥轮换和失败行为都是协议的一部分。

对称加密的根本问题是密钥分发:如何把密钥安全地传递给对方?在互联网上,这需要非对称加密来解决。

非对称加密:公钥革命

非对称密码学使用公私钥对实现加密、签名或密钥建立,但并非每种算法都同时支持三者。ECDH 用于密钥协商,Ed25519 用于签名,不能因为都有“公钥”就互换用途。

RSA:安全性基于大数分解的困难性。设 n=p×qn = p \times q$p$$q$ 是大质数),公钥包含 $n$ 和加密指数 $e$,私钥包含解密指数 $d$(满足 ed1(modϕ(n))ed \equiv 1 \pmod{\phi(n)},其中 ϕ(n)=(p1)(q1)\phi(n) = (p-1)(q-1))。

加密:c=memodnc = m^e \bmod n

解密:m=cdmodnm = c^d \bmod n

安全性依赖于:已知 $n$$e$,在不知道 $p$$q$ 的情况下,无法有效计算 $d$

这个"困难"是有具体刻度的。2020 年 2 月,一个国际团队用数域筛法分解了 RSA-250(一个 250 位十进制、829 位二进制的数字),耗费约 2700 个 CPU 核心年。

密钥长度必须由目标安全强度、标准、数据寿命和互操作要求决定。2048 位 RSA 仍广泛使用,但长期保密或迁移规划不能只靠盲目增大 RSA 位数,因为足够强的量子计算会改变问题类别。

还要注意:直接对消息做 memodnm^e \bmod n 的"教科书 RSA"并不安全。真实系统会先加入随机化填充(如 OAEP),否则相同明文每次都产生相同密文,且易受多种攻击。

椭圆曲线密码(ECC,Elliptic Curve Cryptography):基于椭圆曲线离散对数问题的密码体系,可以用更短的密钥(256 位 ECC 约等于 3072 位 RSA 的安全性)实现同等安全性。TLS 1.3、比特币、Signal 协议广泛使用 ECC。

椭圆曲线(定义在有限域 Fp\mathbb{F}_p 上):y2x3+ax+b(modp)y^2 \equiv x^3 + ax + b \pmod{p}

密钥交换:Diffie-Hellman

Diffie-Hellman 密钥交换(Whitfield Diffie 和 Martin Hellman,1976)解决了一个看似不可能的问题:两个人在公开信道上通信,怎么能共同生成一个只有他们知道的秘密?

直觉类比:Alice 和 Bob 各自持有一种颜料的私有部分,在公开颜料的基础上各自混合,结果混合出相同的颜色,而旁观者无法从看到的两种公开颜色推断出最终混合色。

数学上,Diffie-Hellman 利用了模幂运算的交换性和离散对数的困难性:

设公开参数 $g$$p$(大质数)。Alice 选私钥 $a$,发出 A=gamodpA = g^a \bmod p。Bob 选私钥 $b$,发出 B=gbmodpB = g^b \bmod p。共享密钥 K=Bamodp=Abmodp=gabmodpK = B^a \bmod p = A^b \bmod p = g^{ab} \bmod p

未经认证的 Diffie–Hellman 会遭受中间人攻击:攻击者可分别与 Alice、Bob 建立两个秘密。TLS 将密钥交换与证书签名、握手 transcript、域名验证和密钥派生绑定,才把“共享随机秘密”提升为经过认证的安全信道。

临时 (EC)DHE 可提供前向保密:长期签名密钥日后泄露,不自动暴露过去会话密钥。但 RFC 8446 明确指出,TLS 1.3 的 psk_ke 预共享密钥模式不满足前向保密。0-RTT 数据还具有重放风险,应用不能把非幂等操作无条件放进早期数据。

哈希函数:单向变换

密码学哈希函数(Cryptographic Hash Function) 把任意长度的输入映射到固定长度的输出,且满足:

  1. 单向性:给定哈希值,无法逆推原输入
  2. 确定性:相同输入始终产生相同哈希
  3. 雪崩效应:输入微小改变导致输出完全不同
  4. 抗碰撞性:极难找到两个不同输入产生相同哈希

SHA-256(Secure Hash Algorithm 256-bit):NIST 标准,输出 256 位(32 字节)。比特币区块链用它来链接区块。

哈希函数并非一劳永逸——它们会随攻击进步而"老化"。MD5 早已被攻破。

2017 年 2 月,CWI Amsterdam 与 Google 公布了 SHA-1 的首个实际碰撞(代号 SHAttered):他们构造出两个内容不同、SHA-1 却完全相同的 PDF,计算量约 263.12^{63.1} 次压缩,在云端约花费 11 万美元。这宣告 SHA-1 不再可用于安全场景,业界随之全面转向 SHA-256 和 SHA-3。

哈希的应用: - 密码存储:使用 Argon2id、scrypt、bcrypt 或合规场景的 PBKDF2 等专用密码派生函数,为每个密码生成随机盐并校准成本;快速 SHA-256 即使加盐也便于离线穷举 - 文件完整性:下载文件后对比哈希,确认未被篡改 - 数字签名:对文件哈希签名而非对整个文件签名 - 区块链:每个区块包含前一个区块的哈希,形成不可篡改的链

数字签名与证书

数字签名(Digital Signature)让验证者检查消息是否由对应私钥生成且签名后未改变。它证明的是“某个密钥对这段带上下文的数据产生了有效签名”,不自动证明某个自然人的意图,也不自动提供法律上的不可否认性。密钥共享、恶意软件、签名服务越权和证书错误都会削弱身份归因。

数字证书(X.509 Certificate):把公钥与身份(域名、组织)绑定的文件,由受信任的证书颁发机构(CA)签名。当你访问 https://example.com,你的浏览器验证服务器出示的证书:该证书是否由可信 CA 签发?证书中的域名是否匹配?证书是否过期?

CA 体系(PKI,Public Key Infrastructure)是整个互联网信任的基础,也是它的脆弱点:一旦某个 CA 被攻击或行为不当,可以签发假证书。2011 年荷兰 CA DigiNotar 被攻击并签发了大量假证书(包括 google.com),最终导致该公司倒闭。

量子计算的威胁

量子计算机利用量子叠加和纠缠,可以高效运行 Shor 算法,在多项式时间内分解大数和解离散对数——这将使 RSA 和 ECC 完全失效。

这不是遥远的威胁。NIST 在 2024 年 8 月正式发布了头三个后量子密码(Post-Quantum Cryptography,PQC)标准: - FIPS 203:ML-KEM(基于 CRYSTALS-Kyber,密钥封装) - FIPS 204:ML-DSA(基于 CRYSTALS-Dilithium,数字签名) - FIPS 205:SLH-DSA(基于 SPHINCS+,数字签名)

第四个签名标准 FN-DSA(基于 FALCON,计划编号 FIPS 206)仍在制定;NIST 还于 2025 年选择 HQC 作为额外密钥封装方案。标准化表示算法经过公开评估并确定参数,不表示已经证明对所有经典与量子攻击永远安全。

威胁的紧迫性还来自"先收割,后解密"(harvest now, decrypt later):攻击者可以今天就截获并存储加密流量,等未来有了量子计算机再回头破解。因此对需要长期保密的数据,迁移到 PQC 必须现在就开始。

代价与争议

异常访问之争:为执法设计额外访问能力会引入新的密钥、软件、治理和滥用风险。争论不能压缩成一句“数学上绝对不可能”,但任何方案都必须明确谁能触发、如何审计、怎样抗内部人和跨境滥用,以及失败时影响多少用户。2016 年 FBI 与苹果的 iPhone 解锁争议集中体现了这种系统性权衡。

后门也不只是假设。DualECDRBG 是一个曾被 NIST 收录为标准的随机数生成器,密码学家很早就指出它的结构疑似留有只有设计者能利用的后门。

2013 年斯诺登泄密后,路透社报道称 NSA 曾在 2004 年付给安全公司 RSA Security 一千万美元,让这个有问题的算法成为其 BSAFE 库的默认选项。NIST 于 2013 年 9 月撤回了该标准。这是"后门会被设计进真实标准"的一个有力实证。

"加密战争"(Crypto Wars):1990 年代,美国政府试图把强加密算法列为军火出口管制对象。学术界的反抗方式之一是:有人把 RSA 算法印在 T 恤上,穿着 T 恤过海关,以证明"算法是言论自由"。出口管制在 2000 年代基本解除。

跨域连接

  • 数论:安全性不是"分解很难"这句话本身,而是一条未被证明的假设:至今没人给出高效算法,也没人证明它不存在。可检验推论:所谓安全是相对于已知算法与已知计算模型的经验判断,一次算法突破就能一次性作废整类系统。所以密钥长度应由数据的保密年限决定,而不是由当下够不够用决定。
  • 量子退相干:能威胁公钥体系的算法早已存在,真正的瓶颈是退相干——量子态与环境纠缠会毁掉叠加,因此必须把一个逻辑比特摊到大量物理比特上做纠错。这决定了"何时能破"是工程问题,也决定了"先收割、后解密"现在就成立。
  • 零知识证明:同一批困难性假设还能造出更奇怪的东西:证明我知道某个秘密,却不透露它是什么。可见密码学提供的不只是"读不到",而是可裁剪的信息披露——代价同样是计算困难性,而非信息论意义上的绝对。同理,"用了某某算法"从来不是完整的安全论证,还要看协议怎样组合它。
  • 数字伦理:为执法保留异常访问通道,必然新增密钥、软件与治理主体,攻击面随之扩大。争论的正确形式不是"数学上可不可能",而是谁能触发、如何审计、如何抗内部人滥用,以及一旦失效会波及多少无关的用户。
  • 网络战:标准制定过程本身就是攻击面——一个被写进规范的可疑随机数生成器,会因为默认信任而扩散多年。对策不是更强的算法,而是公开评审、可复现的参数生成与多来源标准,把信任从单点挪到过程上。推论是:默认选项一旦被写进库里,它的影响力远超任何一份技术建议。

参考文献

  • Rivest, R., Shamir, A., Adleman, L. A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. CACM 21(2), 1978.
  • Diffie, W. & Hellman, M. New Directions in Cryptography. IEEE Transactions on Information Theory 22(6), 1976.
  • Shannon, C. E. Communication Theory of Secrecy Systems. Bell System Technical Journal 28(4), 1949.
  • Kerckhoffs, A. La cryptographie militaire. Journal des sciences militaires, 1883.
  • Cocks, C. A Note on 'Non-Secret Encryption'. CESG/GCHQ, 1973(1997 年解密).
  • Stevens, M., Bursztein, E., Karpman, P., Albertini, A., Markov, Y. The First Collision for Full SHA-1. CRYPTO 2017.
  • Boudot, F., Gaudry, P., Guillevic, A., Heninger, N., Thomé, E., Zimmermann, P. Factorization of RSA-250. 公告(caramba.loria.fr/rsa250.txt),2020 年 2 月.
  • NIST. FIPS 203 (ML-KEM)、FIPS 204 (ML-DSA)、FIPS 205 (SLH-DSA). 2024 年 8 月.
  • NIST. Post-Quantum Cryptography Standardization. csrc.nist.gov. (后量子算法标准化进展)
  • Rescorla, E. The Transport Layer Security (TLS) Protocol Version 1.3. RFC 8446, IETF, 2018.
  • NIST. Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode. SP 800-38D.

延伸阅读

  • Paar, C. & Pelzl, J. Understanding Cryptography. Springer, 2010. (最好的入门教材之一)
  • Boneh, D. & Shoup, V. A Graduate Course in Applied Cryptography. 免费在线:https://toc.cryptobook.us/