对称、非对称与哈希:三大原语
密码学按密钥使用方式分为对称密钥密码、非对称(公钥)密码和哈希函数三大类:
对称加密:加解密使用同一密钥,执行效率高,适合海量数据加密。AES(Rijndael,由 Joan Daemen 与 Vincent Rijmen 设计)于 2001 年经 NIST 公开竞赛从 15 个候选算法中胜出,支持 128/192/256 位密钥长度,广泛应用于 TLS、磁盘加密(BitLocker/LUKS)、Wi-Fi WPA2/3。AES 的生命力体现了公开评审的价值——至今侧信道攻击比数学攻击更实用。国密 SM4 是中国国家密码管理局发布的对称加密标准,分组长度 128 位、密钥长度 128 位,在等保 2.0 等政企合规场景广泛使用。
非对称加密:使用公私钥对的数学技巧。RSA(1977,Rivest-Shamir-Adleman)基于大整数分解难题,推荐密钥长度 2048 位以上。ECC(椭圆曲线密码)于 1985 年由 Koblitz 和 Miller 独立提出,在同等安全强度下密钥远短于 RSA——256 位 ECC ≈ 3072 位 RSA。SM2 是中国国密公钥算法,基于 ECC 曲线 SM2-P256。基于身份的密码(Identity-Based Encryption, IBE)由 Shamir 于 1984 年提出愿景,Boneh-Franklin 于 2001 年首次实现。SM9 是中国自主 IBE 标准。
哈希函数:将任意长度输入映射为固定长度输出(指纹),必须满足抗原像性、抗第二原像性和抗碰撞性。MD5(128 位输出)在 2004 年被王小云团队实现碰撞攻击;SHA-1 于 2017 年由 Google 与 CWI 实现首个碰撞(SHAttered),现已从主流 TLS 证书中移除。
密码协议与工程实践
现实世界的安全不取决于单个密码算法的强度,而取决于它们如何组合成协议。
TLS 握手是一个教科书级案例:客户端与服务器先用非对称密钥交换(ECDHE)协商一个临时对称密钥(Pre-Master Secret),然后用该密钥派生会话密钥,此后所有通信数据用 AEAD 加密(AES-GCM 或 ChaCha20-Poly1305)。这兼顾了公钥密码的安全密钥分发和对称密码的高吞吐量。
认证加密(AEAD) 是 2010 年代密码工程的最重要进展之一。传统方案先加密再 MAC(Encrypt-then-MAC)可能因实现次序错误导致灾难性漏洞(如 TLS 的 Lucky13 攻击)。AEAD 将加密和认证整合为单一原语,消除了组合错误的空间。AES-GCM 是 TLS 1.2+ 的标准 AEAD 套件;AES-GCM-SIV 额外提供抗 nonce 重用能力;ChaCha20-Poly1305 在无硬件 AES 加速的移动设备上性能更优。