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:安全性基于大数分解的困难性。设 ($p$、$q$ 是大质数),公钥包含 $n$ 和加密指数 $e$,私钥包含解密指数 $d$(满足 ,其中 )。
加密:
解密:
安全性依赖于:已知 $n$ 和 $e$,在不知道 $p$、$q$ 的情况下,无法有效计算 $d$。
这个"困难"是有具体刻度的。2020 年 2 月,一个国际团队用数域筛法分解了 RSA-250(一个 250 位十进制、829 位二进制的数字),耗费约 2700 个 CPU 核心年。
密钥长度必须由目标安全强度、标准、数据寿命和互操作要求决定。2048 位 RSA 仍广泛使用,但长期保密或迁移规划不能只靠盲目增大 RSA 位数,因为足够强的量子计算会改变问题类别。
还要注意:直接对消息做 的"教科书 RSA"并不安全。真实系统会先加入随机化填充(如 OAEP),否则相同明文每次都产生相同密文,且易受多种攻击。
椭圆曲线密码(ECC,Elliptic Curve Cryptography):基于椭圆曲线离散对数问题的密码体系,可以用更短的密钥(256 位 ECC 约等于 3072 位 RSA 的安全性)实现同等安全性。TLS 1.3、比特币、Signal 协议广泛使用 ECC。
椭圆曲线(定义在有限域 上):
密钥交换:Diffie-Hellman
Diffie-Hellman 密钥交换(Whitfield Diffie 和 Martin Hellman,1976)解决了一个看似不可能的问题:两个人在公开信道上通信,怎么能共同生成一个只有他们知道的秘密?
直觉类比:Alice 和 Bob 各自持有一种颜料的私有部分,在公开颜料的基础上各自混合,结果混合出相同的颜色,而旁观者无法从看到的两种公开颜色推断出最终混合色。
数学上,Diffie-Hellman 利用了模幂运算的交换性和离散对数的困难性:
设公开参数 $g$、$p$(大质数)。Alice 选私钥 $a$,发出 。Bob 选私钥 $b$,发出 。共享密钥 。
未经认证的 Diffie–Hellman 会遭受中间人攻击:攻击者可分别与 Alice、Bob 建立两个秘密。TLS 将密钥交换与证书签名、握手 transcript、域名验证和密钥派生绑定,才把“共享随机秘密”提升为经过认证的安全信道。
临时 (EC)DHE 可提供前向保密:长期签名密钥日后泄露,不自动暴露过去会话密钥。但 RFC 8446 明确指出,TLS 1.3 的 psk_ke 预共享密钥模式不满足前向保密。0-RTT 数据还具有重放风险,应用不能把非幂等操作无条件放进早期数据。
哈希函数:单向变换
密码学哈希函数(Cryptographic Hash Function) 把任意长度的输入映射到固定长度的输出,且满足:
- 单向性:给定哈希值,无法逆推原输入
- 确定性:相同输入始终产生相同哈希
- 雪崩效应:输入微小改变导致输出完全不同
- 抗碰撞性:极难找到两个不同输入产生相同哈希
SHA-256(Secure Hash Algorithm 256-bit):NIST 标准,输出 256 位(32 字节)。比特币区块链用它来链接区块。
哈希函数并非一劳永逸——它们会随攻击进步而"老化"。MD5 早已被攻破。
2017 年 2 月,CWI Amsterdam 与 Google 公布了 SHA-1 的首个实际碰撞(代号 SHAttered):他们构造出两个内容不同、SHA-1 却完全相同的 PDF,计算量约 次压缩,在云端约花费 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/