密码学(Cryptography)是研究信息安全与数据保护的科学,涵盖加密、解密、认证、完整性验证和不可否认性等核心技术。从公元前100年的凯撒密码到今日的后量子密码学(Post-Quantum Cryptography),这门学科经历了数千年演变,成为数字时代信息安全的基石。据估计,全球每天有超过 300 EB(3×10^8 GB)的数据使用各类密码算法保护,而 2024 年全球网络安全市场规模已超过 2000 亿美元,密码学是其中最关键的技术支柱之一。
本知识库系统梳理密码学的核心概念、经典算法、安全协议和前沿方向,为学习和实践密码学提供结构化的参考。
本知识库包含以下子页面,每个页面深入讲解密码学的一个子领域:
密码学服务于五个核心安全目标,被称为 CIAAN 模型:
确保信息仅对授权方可见,未经授权的用户无法读取明文内容。对称加密和非对称加密是实现机密性的主要手段。
具体例子:Alice 通过 AES-256-GCM 加密一封邮件,密文为 a3f1b2...(256位密钥)。即使 Bob 截获了密文,没有密钥也无法恢复明文。以 AES-256 为例,若暴力破解需要尝试 个密钥,这个数量级约为 —— 比可观测宇宙中的原子总数(约 个)还要多。即使用当今最快的超级计算机(Frontier,约 1.7 EFLOPS),也需要 年才能穷举完所有密钥。
确保数据在传输或存储过程中未被篡改。哈希函数和消息认证码是实现完整性检查的主要工具。
具体例子:电商平台向用户发送一个价值 ¥500 的订单,附带 SHA-256 哈希值 e3b0c4...。攻击者试图将金额改为 ¥500000,但修改后重新计算的哈希完全不同(如 a7f3d1...),系统检测到哈希不匹配,拒绝该修改。两个哈希的差异度可以通过雪崩效应量化:明文修改 1 bit,哈希结果中平均 50% 的 bit 发生变化。
验证通信双方的身份真实可靠,防止冒充攻击。数字签名和证书是认证的核心机制。
具体例子:当你在浏览器访问 https://bank.com 时,服务器出示由受信任证书颁发机构(CA)签发的数字证书。浏览器验证证书签名后,确认你连接到的确实是 bank.com 的真实服务器,而非中间人的钓鱼网站。2024 年,全球约有 3.5 亿张活跃的 TLS 证书在保护网站通信。
确保参与者无法否认其曾经执行过的行为。数字签名是实现不可否认性的关键技术。
具体例子:张三在电子合同系统上用私钥签署了一份价值 1000 万的合同。之后张三试图否认:"这不是我签的"。但由于数字签名使用了张三独有的私钥(经 CA 验证),而且该签名需要私钥才能生成,系统可以证明这确实是张三的行为。中国《电子签名法》(2005 年施行)明确规定,可靠的电子签名与手写签名具有同等的法律效力。
研究如何分析并破解密码系统的学科。好的密码分析推动密码学进步,因为每种新旧算法都需经过严格分析才能被认为是安全的。
具体例子:MD5 哈希算法最初被认为是安全的,但随着密码分析技术的发展,2004 年王小云团队发现了 MD5 的碰撞攻击,能在 1 小时内制造两个具有相同 MD5 哈希的不同文件。这一突破直接导致 MD5 被弃用,行业加速迁移到 SHA-256。
理解密码学历史有助于把握学科的发展规律和未来趋势。下表总结了关键里程碑:
| 时期 | 代表技术 | 核心特点 | 代表性事件 |
|---|---|---|---|
| 古典密码(~1900) | 凯撒密码、维吉尼亚密码 | 手工操作、字母替换 | 凯撒大帝使用移位密码传递军令 |
| 机械密码(1900-1940) | 恩尼格玛密码机(Enigma) | 机械加密、转子系统 | 二战期间图灵破解 Enigma,缩短战争约 2 年 |
| 现代密码(1949-1975) | 一次一密、DES | 信息论基础、数据加密标准 | Shannon 发表《保密系统的通信理论》奠定基础 |
| 公钥密码(1976-至今) | RSA、ECC、Diffie-Hellman | 公钥/私钥分离、数字签名 | Diffie 和 Hellman 发表《密码学新方向》开创公钥密码 |
| 后量子密码(2010-至今) | Kyber、Dilithium、Falcon | 抗量子计算攻击 | NIST 在 2024 年正式发布后量子密码标准 |
对称加密使用同一个密钥进行加密和解密。通信双方必须事先安全地共享这个密钥。
DES(Data Encryption Standard)是 1977 年由 NIST(美国国家标准与技术研究院)发布的对称加密标准。
暴力破解时间演进:
| 年份 | 设备 | 破解时间 | 成本 |
|---|---|---|---|
| 1993 | 专用 DES 破解机(设计) | 3.5 小时 | 100 万美元 |
| 1998 | EFF Deep Crack | 56 小时 | 25 万美元 |
| 1999 | Deep Crack + 联网计算机 | 22 小时 | 共享计算 |
| 2006 | FPGA 集群 | < 10 分钟 | 1 万美元 |
| 2024 | 单 GPU(RTX 4090)+ 优化 | ~1 小时 | ~2000 美元 |
具体例子:给定明文 "HELLOCRYPTO"(12 字节),使用 DES 加密过程如下:
由于 56 位密钥在现代计算条件下轻易可破,DES 已被弃用。3DES(三重 DES)作为过渡方案,使用三个 56 位密钥进行"加密-解密-加密"操作,有效密钥长度 112 位,但速度较慢。
AES(Advanced Encryption Standard)是目前最广泛使用的对称加密算法。2001 年由 NIST 在公开竞赛中选定(原名为 Rijndael 算法)。
AES 核心参数:
| 参数 | AES-128 | AES-192 | AES-256 |
|---|---|---|---|
| 密钥长度 | 128 位 | 192 位 | 256 位 |
| 轮数 | 10 | 12 | 14 |
| 分组大小 | 128 位 | 128 位 | 128 位 |
| 密钥空间 | |||
| 暴力破解时间(假设 10^12 次/秒) | 年 | 年 | 年 |
AES 加密过程(以 AES-128 为例):
具体数值示例:
假设 AES-128 的明文是 128 位(16 字节):
明文: 32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 07 34
密钥: 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c
经过密钥扩展,第 0 轮子密钥即为原始密钥。加 AddRoundKey 后:
状态: 19 3d e3 be a0 f4 e2 2b 9a c6 8d 2a e9 f8 48 08
然后进入第 1 轮 SubBytes(通过 S-box 查找),S-box 的构造基于 不可约多项式 。例如字节 0x19(二进制 00011001)在 S-box 中映射为 0xd4。
ChaCha20 由 Daniel J. Bernstein 设计,是 Salsa20 的改良版本,在移动设备和 TLS 1.3 中广泛使用。
ChaCha20 状态矩阵:
"expand 32-byte k" | Key[0..3]
Key[4..7] | Nonce[0] | Counter
Nonce[1..2] | ...
ChaCha20 的核心操作是 quarter round,对 4 个 32 位字 执行:
a += b; d ^= a; d <<<= 16
c += d; b ^= c; b <<<= 12
a += b; d ^= a; d <<<= 8
c += d; b ^= c; b <<<= 7
ChaCha20 在 ARM Cortex-M3 等嵌入式设备上的性能(加密 16 字节数据):
| 算法 | 密钥长度 | 分组大小 | 速度(软件) | 安全状态 | 典型应用 |
|---|---|---|---|---|---|
| DES | 56 位 | 64 位 | 慢 | ❌ 已破解 | 历史遗留 |
| 3DES | 112/168 位 | 64 位 | 很慢 | ⚠️ 已弃用 | 传统金融系统 |
| AES-128 | 128 位 | 128 位 | 快 | ✅ 安全 | TLS、WPA2、磁盘加密 |
| AES-256 | 256 位 | 128 位 | 稍慢 | ✅ 安全 | 军用级、顶级机密 |
| ChaCha20 | 256 位 | 流密码 | 很快 | ✅ 安全 | TLS 1.3、移动端、物联网 |
性能基准测试(使用 OpenSSL 3.2,Intel i7-13700K):
| 算法 | 加密速度(MB/s) | 1GB 文件耗时 |
|---|---|---|
| AES-128-GCM | 8,240 MB/s | ~0.12 秒 |
| AES-256-GCM | 6,150 MB/s | ~0.17 秒 |
| ChaCha20-Poly1305 | 3,280 MB/s | ~0.31 秒 |
| 3DES | 180 MB/s | ~5.7 秒 |
选择建议:
非对称加密(又称公钥加密)使用一对密钥:公钥公开分享,私钥秘密保存。加密和解密分别由不同密钥完成。
RSA 以三位发明者 Rivest、Shamir 和 Adleman 命名的,是最早的实用的公钥密码方案之一(1977 年)。其安全性基于大整数分解问题的困难性。
RSA 密钥生成:
加密和解密:
具体数值例子:加密明文
RSA 密钥长度与安全强度:
| 密钥长度 | 等效对称安全强度 | 分解难度(以 GNFS 算法) | 2024 年状态 |
|---|---|---|---|
| 1024 位 | 80 位 | ~10^15 次操作 | ❌ 不安全(国家级可破) |
| 2048 位 | 112 位 | ~10^23 次操作 | ✅ 当前最低标准 |
| 3072 位 | 128 位 | ~10^28 次操作 | ✅ 推荐 |
| 4096 位 | 144 位 | ~10^32 次操作 | ✅ 更安全但性能下降 |
RSA 不同密钥长度的性能对比(OpenSSL 3.2,Intel i7-13700K):
| 操作 | 2048 位 | 4096 位 |
|---|---|---|
| 签名 | ~12,000 次/秒 | ~2,500 次/秒 |
| 验证 | ~300,000 次/秒 | ~85,000 次/秒 |
| 加密 | ~250,000 次/秒 | ~70,000 次/秒 |
| 解密 | ~10,000 次/秒 | ~2,000 次/秒 |
可以看到,解密比加密慢约 25 倍,这是 RSA 的实际使用限制。因此实践中 RSA 主要用于密钥交换和数字签名,加密大量数据时使用 RSA 加密对称密钥,再由对称密钥加密数据(即混合加密)。
ECC 基于椭圆曲线离散对数问题(ECDLP)的困难性,在相同安全强度下使用更短的密钥。
椭圆曲线方程:,其中
以广泛使用的 secp256k1 曲线为例(该曲线用于 Bitcoin):
密钥生成:选择一个随机整数 作为私钥(),公钥 (椭圆曲线标量乘法)。
ECC 密钥长度对比:
| ECC 密钥长度 | RSA 等效密钥 | 对称密钥等效 | 安全强度(位) |
|---|---|---|---|
| 160 位 | 1024 位 | 80 位 | 80 |
| 224 位 | 2048 位 | 112 位 | 112 |
| 256 位 | 3072 位 | 128 位 | 128 |
| 384 位 | 7680 位 | 192 位 | 192 |
| 521 位 | 15360 位 | 256 位 | 256 |
具体数值例子(简化版):
假设有一条椭圆曲线 ,生成元 ,私钥 。
计算公钥 (椭圆曲线加法):
实际的 ECC 在 256 位的有限域上进行,使用的数字远大于这个示例,但原理完全相同。
| 特性 | RSA | ECC | ElGamal |
|---|---|---|---|
| 安全基础 | 大整数分解 | ECDLP | 离散对数(DLP) |
| 256 位安全密钥长度 | 3072 位 | 256 位 | 3072 位 |
| 加密速度 | 慢(解密极慢) | 中等 | 慢 |
| 签名大小 | 大(512 字节 @ 4096 位) | 小(64 字节 @ 256 位) | 大 |
| 密钥生成 | 慢(需生成大素数) | 极快 | 慢 |
| 后量子安全 | ❌ | ❌ | ❌ |
哈希函数将任意长度的输入映射为固定长度的输出(摘要/哈希值),具有以下核心性质:
SHA-256 是 SHA-2 系列中最广泛使用的哈希函数,输出 256 位(32 字节)哈希值。
SHA-256 处理过程:
具体数值例子:计算 "abc" 的 SHA-256 哈希
输入消息 "abc" 共 3 字节(24 位):
"abc" + 0x80 + 0x00...0x00(共 423 个填充 0) + 24(长度)= 512 位SHA-256("abc") = ba7816bf8f01cfea414140de5dae2223
b00361a396177a9cb410ff61f20015ad
碰撞:验证单个字符变化的效果
SHA-256("abc") = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015adSHA-256("abd") = cb00719f3aba84b64e8ad030725476ff3d0e3aaba7906e4f27f36c7f12e3d1c2两个哈希值之间 97.3% 的 bit 不同,体现了强雪崩效应。
| 算法 | 输出长度 | 消息分组 | 安全强度(抗碰撞) | 速度(MB/s) | 安全状态 |
|---|---|---|---|---|---|
| MD5 | 128 位 | 512 位 | < 18 位 | ~500 | ❌ 已破解(碰撞可构造) |
| SHA-1 | 160 位 | 512 位 | < 63 位 | ~400 | ❌ 已破解(SHAttered 攻击) |
| SHA-256 | 256 位 | 512 位 | 128 位 | ~250 | ✅ 安全 |
| SHA-512 | 512 位 | 1024 位 | 256 位 | ~150 | ✅ 安全 |
| SHA-3-256 | 256 位 | 1088 位 | 128 位 | ~200 | ✅ 安全(新标准) |
| BLAKE2b | 可变 | 1024 位 | 最高 256 位 | ~600 | ✅ 安全(非常快) |
| BLAKE3 | 可变 | 1024 位 | 最高 256 位 | ~1000 | ✅ 安全(最快) |
实际案例——密码存储的安全演进:
| 方案 | 例子 | 安全性 | 说明 |
|---|---|---|---|
| 明文存储 | 存 "password123" |
❌ 完全危险 | 数据泄露即灾难 |
| 单次哈希 | 存 SHA-256("password123") |
⚠️ 中等 | 彩虹表可逆向 |
| 加盐哈希 | 存 SHA-256("password123" + "randomsalt") |
✅ 较好 | 彩虹表无效,但 GPU 仍可暴力跑 |
| 慢哈希(bcrypt/scrypt) | bcrypt 成本因子 12 | ✅✅ 很好 | 每次验证需要 ~100ms,GPU 加速受限 |
| 密钥派生(Argon2id) | Argon2id 参数 m=19456, t=2, p=1 | ✅✅✅ 最优 | 2015 年密码哈希竞赛获胜者,内存硬 |
消息认证码(Message Authentication Code)用于验证消息的完整性并确认消息来源。它结合了哈希函数和密钥。
HMAC(Hash-based Message Authentication Code)是目前最广泛使用的 MAC 方案。
HMAC 计算过程:
其中:
0x36 重复 次0x5c 重复 次安全性保证:即使底层哈希函数存在碰撞攻击,HMAC 的安全性不完全依赖哈希函数的抗碰撞性。
| 模式 | 操作顺序 | 安全属性 | 典型方案 |
|---|---|---|---|
| Encrypt-then-MAC | 先加密再对密文计算 MAC | ✅ 最强 | SSH、IPSec |
| Encrypt-and-MAC | 加密和 MAC 并行计算 | ⚠️ 可能泄露明文 | 不推荐 |
| MAC-then-Encrypt | 先计算 MAC 再一起加密 | ⚠️ 顺序不当 | TLS 1.2 |
| AEAD(认证加密) | 同时提供加密和认证 | ✅✅ 最简洁 | AES-GCM、ChaCha20-Poly1305 |
实际案例:AES-GCM 是最常用的 AEAD(Authenticated Encryption with Associated Data)模式,一次性完成加密和认证。GCM 使用 GHASH 和 AES-CTR 组合,输出密文 + 128 位认证标签。
数字签名提供认证、完整性和不可否认性的组合保障。
ECDSA(Elliptic Curve Digital Signature Algorithm)是基于 ECC 的数字签名方案。
签名(给定私钥 ,消息 ):
验证(给定公钥 ,消息 ,签名 ):
关键安全要求:随机数 必须真正随机且一次性使用。若两次签名使用相同的 ,即可通过简单方程 破解私钥。这并非理论可能——2010 年 Sony PlayStation 3 正是因为 ECDSA 签名使用了固定 值(),导致私钥被民间黑客团队破解,整个 PS3 安全体系崩溃。
| 算法 | 签名大小 | 签名速度 | 验证速度 | 密钥大小(公钥/私钥) | 安全状态 |
|---|---|---|---|---|---|
| RSA-2048 | 256 字节 | ~12,000/s | ~300,000/s | 256/1024 字节 | ✅ 安全 |
| RSA-4096 | 512 字节 | ~2,500/s | ~85,000/s | 512/2048 字节 | ✅ 更安全 |
| ECDSA P-256 | 64 字节 | ~30,000/s | ~15,000/s | 32/64 字节 | ✅ 推荐 |
| ECDSA P-384 | 96 字节 | ~12,000/s | ~6,000/s | 48/96 字节 | ✅ 高安全 |
| EdDSA Ed25519 | 64 字节 | ~60,000/s | ~30,000/s | 32/64 字节 | ✅✅ 推荐(更快更安全) |
| DSA 2048 | ~256 字节 | ~10,000/s | ~12,000/s | ~256/128 字节 | ⚠️ 可接受 |
EdDSA(Edwards-curve Digital Signature Algorithm) 是比 ECDSA 更优的方案,使用扭曲爱德华兹曲线。以 Ed25519 为例:
密钥交换协议允许双方在不安全的通道上安全地协商共享密钥。
Diffie-Hellman(简称 DH)是第一个公钥密码方案(1976 年),其安全性基于离散对数问题。
算法步骤(以具体数值示例说明):
假设公开参数:素数 ,生成元
| 步骤 | Alice | 公开值 | Bob |
|---|---|---|---|
| 1. 选择私钥 | 选 | 选 | |
| 2. 计算公钥 | |||
| 3. 交换公钥 | 接收 Bob 的 | 接收 Alice 的 | |
| 4. 计算共享密钥 | |||
| 5. 结果 | 共享密钥 | 共享密钥 |
即使攻击者 Eve 截获了 、、、,也无法在合理时间内计算出 或 (因为离散对数问题的困难性)。在实际使用中, 为 2048 位以上的大素数。
DH 密钥交换的关键脆弱性:无法抵抗中间人攻击(MitM)。如果 Eve 拦截了 Alice 发送给 Bob 的 ,替换为自己的 ,同时拦截 Bob 的 替换为 ,则 Eve 可以与 Alice 和 Bob 各自建立一个共享密钥。这就是为什么现代协议(如 TLS)使用经过认证的密钥交换——即 DH 结合数字证书或数字签名,确保公钥的真实性。
ECDH(Elliptic Curve Diffie-Hellman)使用椭圆曲线点乘法替代 DH 中的模幂运算。
步骤:
安全性对比:
| 方案 | 密钥长度 | 等效 RSA 密钥 | 安全性 |
|---|---|---|---|
| DH-2048 | 2048 位(p) | 2048 位 | |
| ECDH P-256 | 256 位 | 3072 位 | |
| ECDH Curve25519 | 256 位 | 3072 位 | (更快的实现) |
| DH-4096 | 4096 位(p) | 4096 位 | |
| ECDH P-521 | 521 位 | 15360 位 |
ECDH 在相同安全强度下使用更短的密钥,计算速度也比传统 DH 快数倍。
安全协议在传输层或应用层集成上述密码学组件,提供端到端的安全通信保障。
TLS(Transport Layer Security)是最广泛使用的网络安全协议,保护 HTTPS、电子邮件、即时通讯等。
TLS 1.3 握手流程(相比 TLS 1.2 减少了 2 个往返):
Client Server
| |
|----- ClientHello (key_share, sig_algs) -->|
| |
|<--- ServerHello + Cert + Finished -------|
| (key_share response, signature) |
| |
|----- Finished (encrypted) -------------->|
| |
|============= Secure Channel ==============>|
| (使用 AES-256-GCM 或 ChaCha20-Poly1305) |
TLS 1.3 改进:
TLS 1.2 与 TLS 1.3 对比:
| 特性 | TLS 1.2(2012) | TLS 1.3(2018) |
|---|---|---|
| 握手往返 | 2 RTT | 1 RTT(恢复时 0 RTT) |
| 支持的密码套件 | 37+ | 5(干净) |
| 密钥交换 | RSA、DH、ECDH(含静态) | 仅 ECDHE 和 DHE |
| 加密模式 | CBC、GCM、CCM | 仅 AEAD(GCM、ChaCha20-Poly1305) |
| 哈希 | MD5、SHA-1、SHA-256、SHA-384 | 仅 SHA-256、SHA-384 |
| 压缩 | 支持(CRIME 攻击) | 移除 |
| 重协商 | 支持(复杂) | 移除 |
加密套件举例(TLS 1.3 仅剩 5 个套件):
TLS_AES_128_GCM_SHA256(最广泛)TLS_AES_256_GCM_SHA384(高安全)TLS_CHACHA20_POLY1305_SHA256(移动设备优选)Signal Protocol 是目前最安全的端到端加密协议之一,由 Open Whisper Systems 开发,被 WhatsApp(全球 20 亿+用户)、Signal、Google Messages 等使用。
核心组件:
双棘轮算法的工作机制:
ECDH 棘轮 + 对称棘轮
|
消息 n ──► 密钥链 ──► 发送密钥 ──► 加密消息 n
│
ECDH 交换 ──► 新根密钥
│
▼
对称棘轮 ──► 接收密钥 ──► 解密消息 n+1
│
ECDH 交换 ──► 新根密钥 ──► ...
零知识证明允许一方(证明者)向另一方(验证者)证明某个陈述是真的,而无需透露任何关于该陈述的信息(除了"它是真的"这个事实)。
经典比喻——阿里巴巴洞穴(Ali Baba's Cave):
有一个环形洞穴,有两个入口 A 和 B,中间有一扇需要密码才能打开的魔法门。证明者声称知道门的密码。验证者只能观察证明者从哪个入口进、从哪个入口出。
三种零知识证明类型对比:
| 特性 | zk-SNARKs | zk-STARKs | Bulletproofs |
|---|---|---|---|
| 证明尺寸 | 100-300 字节 | 100-500 KB | 1.5 KB(但对数增长) |
| 验证时间 | 毫秒级 | 毫秒级 | 毫秒级 |
| 证明时间 | 慢(需要可信设置) | 中等 | 中等 |
| 可信设置 | ⚠️ 需要 | ✅ 不需要 | ✅ 不需要 |
| 量子安全 | ❌ | ✅ | ❌ |
| 典型应用 | Zcash、以太坊 | StarkNet | Monero、机密交易 |
具体应用案例——Zcash 隐私交易:
一笔标准的 Zcash 交易需要生成一个约 200 字节的零知识证明,证明:
量子计算机(使用 Shor 算法)可在多项式时间内破解 RSA、ECC 和 DH:
据估计,一台拥有 10,000 个稳定逻辑量子比特的量子计算机可在数小时内破解当前所有公钥密码系统。IBM 在 2024 年宣布其量子处理器 Condor 拥有 1,121 个超导量子比特(虽然物理量子比特与逻辑量子比特仍有差距)。
NIST 后量子密码标准化:
NIST 在 2016 年启动后量子密码标准化竞赛,2024 年 8 月正式发布最终标准:
| 算法 | 类型 | 公钥大小 | 密文/签名大小 | 密钥生成速度 | 适用场景 |
|---|---|---|---|---|---|
| ML-KEM(Kyber) | 格密码(MLWE) | 800-1568 字节 | 768-1568 字节 | 快 | 密钥交换 |
| ML-DSA(Dilithium) | 格密码(Fiat-Shamir) | 1312-2592 字节 | 2420-4595 字节 | 快 | 数字签名 |
| SLH-DSA(Sphincs+) | 哈希签名 | 32-64 字节 | 7856-49856 字节 | 慢 | 需要小公钥的场景 |
| FN-DSA(Falcon) | 格密码(NTRU) | 897-1793 字节 | 666-1280 字节 | 快 | 紧凑签名 |
后量子公钥 vs 传统公钥大小对比:
| 方案 | 公钥大小 | 私钥大小 | 相比 RSA-2048 |
|---|---|---|---|
| RSA-2048 | 256 字节 | 1024 字节 | 基准 |
| ECDSA P-256 | 32 字节 | 64 字节 | 10x 更小 |
| ML-KEM-512 | 800 字节 | 1632 字节 | 3x 更大 |
| ML-KEM-1024 | 1568 字节 | 3168 字节 | 6x 更大 |
| ML-DSA-65 | 2592 字节 | 4032 字节 | 10x 更大 |
可以看到,后量子密码的公钥比 RSA 和 ECC 大许多倍,这是当前 PQC 迁移的主要挑战之一。
QKD 利用量子力学原理在两点之间安全地生成共享密钥,而非依赖计算困难假设。
BB84 协议:
QKD 的技术局限:
密码分析(Cryptanalysis)是研究如何破解密码系统的学科。历史上每次重大密码分析突破都推动了密码学的进步。
| 攻击类型 | 攻击者能力 | 针对算法 | 例子 |
|---|---|---|---|
| 暴力破解(Brute Force) | 只有密文 | 密钥空间小的算法 | 破解 DES(56 位密钥) |
| 字典攻击(Dictionary) | 只有密文 | 弱密码/常见口令 | 破解 MD5 存储的密码 |
| 彩虹表攻击(Rainbow Table) | 只有哈希 | 无盐哈希 | 预计算破解哈希值 |
| 中间人攻击(MitM) | 可拦截通信 | 无认证的密钥交换 | 未认证的 Diffie-Hellman |
| 侧信道攻击(Side-Channel) | 可测量物理参数 | 任何未防护实现 | 功耗分析破解 AES |
| 线性/差分密码分析 | 大量明文-密文对 | 分组密码 | 线性攻击对 DES 有效 |
| 量子攻击(Quantum) | 有量子计算机 | 传统公钥密码 | Shor 算法破解 RSA |
| 重放攻击(Replay) | 可监听网络 | 无时间戳协议 | 重复发送支付请求 |
SHAttered 攻击(2017 年):
Google 安全团队利用 SHAttered 攻击在 次 SHA-1 计算后找到了第一对公开的 SHA-1 碰撞。两个不同的 PDF 文档具有相同的 SHA-1 哈希值 38762cf7f55934b34d179ae6a4c80cadccbb7f0a。这次攻击使用了 Google 约 1.1 亿次 GPU 计算,证明 SHA-1 不再安全。
Efail 攻击(2018 年):
利用被动的 HTML 电子邮件特性(加载远程图片),攻击者通过修改加密邮件的 CBC 模式密文,将猜测的明文内容嵌入到远程图片 URL 中,当邮件客户端自动加载图片时将明文泄露给攻击者。每次修改相当于在电文中"打补丁",逐个字节地猜测明文。这一攻击推动行业全面转向 AEAD 加密模式。
| 等级 | 对称密钥 | RSA 密钥 | ECC 密钥 | 安全性 | 适用场景 |
|---|---|---|---|---|---|
| 1 | 80 位 | 1024 位 | 160 位 | ❌ 不安全 | 历史数据(需迁移) |
| 2 | 112 位 | 2048 位 | 224 位 | ⚠️ 可接受 | 2024 年最低标准 |
| 3 | 128 位 | 3072 位 | 256 位 | ✅ 安全 | 商业安全(2030 年前) |
| 4 | 192 位 | 7680 位 | 384 位 | ✅ 高标准 | 政务/金融 |
| 5 | 256 位 | 15360 位 | 521 位 | ✅ 极高级 | 国家秘密/长期保护 |
NIST SP 800-57 推荐:2024 年起的密码强度和算法选择建议,新系统应使用至少安全等级 3 的算法。
密码学在现代数字生活的方方面面发挥着关键作用:
| 应用领域 | 使用的密码技术 | 实际产品/标准 |
|---|---|---|
| 网页安全(HTTPS) | TLS 1.3 + ECDHE + AES-GCM | Chrome、Firefox、Safari |
| 电子邮件加密 | OpenPGP、S/MIME | ProtonMail、Thunderbird |
| 即时通讯 | Signal Protocol + 双棘轮 | WhatsApp、Signal、Google Messages |
| 区块链 | SHA-256 + ECDSA + 哈希链 | Bitcoin、Ethereum、Solana |
| 文件加密 | AES-256 + RSA/ECC | BitLocker、FileVault、VeraCrypt |
| 身份认证 | WebAuthn/FIDO2 + ECDSA | YubiKey、Apple Passkey |
| 数字版权(DRM) | 混合加密 + 安全执行环境 | Widevine、FairPlay |
| VPN/远程访问 | IPsec/IKEv2 + WireGuard | OpenVPN、Mullvad、Tailscale |
区块链是密码学的综合性应用,以下以比特币为例:
比特币挖矿难度计算:
以下是实际系统开发中推荐的密码算法组合:
| 用途 | 推荐方案 | 备注 |
|---|---|---|
| 对称加密 | AES-256-GCM 或 ChaCha20-Poly1305 | 必须使用 AEAD 模式 |
| 密钥交换 | X25519(ECDH Curve25519) | 需前向安全性(Ephemeral) |
| 数字签名 | Ed25519 | 或 P-256 用于合规场景 |
| 哈希 | SHA-256、SHA-512、BLAKE2b | 密码存储用 Argon2id |
| 消息认证 | HMAC-SHA256 | 或直接使用 AEAD |
| 证书 | ECDSA P-256 证书 | SHA-256 签名的 X.509 v3 |