2、密码学基础:对称加密、非对称加密、哈希算法归纳总结
做加密SDK测试,绕不开这三类算法。我刚开始接触时,也常把它们的用途搞混。说白了,对称加密像一把钥匙开一把锁,非对称加密像一把公钥锁一把私钥开,哈希算法压根儿就不需要钥匙——它是个单向指纹提取器。
这一章,咱们把这三类算法的核心特点、典型算法和测试要点捋清楚。
2.1 对称加密
对称加密,加密和解密用同一个密钥。速度快,适合大数据量加密。但密钥分发是个麻烦事——你想想看,加密方和解密方得事先商量好密钥,中间人一旦截获,全完。
核心特性: 同一个密钥完成加密与解密,算法公开,密钥保密。
常用的对称加密算法
- AES(Advanced Encryption Standard)—— 目前最通用的对称加密。分组128位,密钥长度支持128/192/256位。我在项目中用AES-256-GCM模式比较多,自带认证和加密,省事。
- DES(Data Encryption Standard)—— 老了,密钥只有56位。曾经有人用一台PC在22小时内暴力破解过。现在几乎没人用,除非接老系统。
- 3DES —— DES的加强版,三遍DES操作,速度慢。NIST在2023年正式弃用,不建议再选。
- SM4 —— 国密标准,分组128位,密钥128位。国内合规场景绕不开。我记得有一次对接银行接口,对方要求必须SM4-CBC,当时查文档查了半天。
测试时注意什么?
我习惯把测试点分成三块:加解密正确性、密钥边界、模式差异。
- 加解密正确性:固定密钥和明文,比对密文是否与标准测试向量一致。每个算法都有官方Test Vector,别自己拍脑袋算。
- 密钥边界:比如AES-128塞个32字节密钥,SDK应该返回错误,而不是悄悄截断。我曾经踩过这个坑,线上日志查了两天才发现是密钥长度没校验。
- 模式差异:ECB、CBC、GCM、CCM……每个模式的初始向量(IV)长度、填充方式、安全边界都不同。比如CBC模式,IV不能重复,GCM模式nonce重复就全完蛋。
避坑指南: 我曾经用AES-ECB加密图片,结果加密后还能隐约看出轮廓——ECB模式相同明文块产生相同密文块,泄露了图像结构。千万别把ECB用于任何实际场景。
2.2 非对称加密
非对称加密有一对密钥:公钥公开,私钥保密。公钥加密的数据只有私钥能解,私钥签名只有公钥能验。这就解决了密钥分发问题。但性能慢,通常只用来加密小数据,比如AES密钥。
常用算法
| 算法 | 密钥长度 | 安全强度 | 典型用途 |
|---|---|---|---|
| RSA | 1024/2048/4096 | 1024已不安全,至少2048 | 数字签名、密钥封装 |
| ECC (椭圆曲线) | 256位 ≈ RSA 3072 | 高 | 签名(ECDSA)、密钥交换(ECDH) |
| SM2 | 256位 | 国密标准 | 签名、加密、密钥协商 |
我个人习惯优先用ECC或SM2。RSA 2048位签名生成慢,而且证书链一大片包体大。ECC 256位密钥的效果跟RSA 3072位差不多,但速度快得多。
测试注意事项
- 密钥对生成:检查生成的公私钥是否满足规范长度,是否含非法字符。
- 签名与验签:同一消息用不同私钥签名,验签必须失败。边界情况比如空消息签名,SDK能不能正确处理。
- 加密与解密:公钥加密后长度会膨胀,RSA 2048加密后密文固定256字节,但SM2加密后还会附加椭圆曲线点,长度不固定。
提示: 测试非对称加密时,准备一个“公钥池”和“私钥池”,覆盖不同曲线(secp256r1、secp384r1、sm2p256v1等)。国密场景别忘记把SM2公钥转成X.509格式,很多SDK对PEM/ DER的支持不一样。
2.3 哈希算法
哈希算法,把任意长度数据映射成固定长度摘要。它不可逆,不依赖密钥。用途是完整性验证、密码存储、数字签名的前置步骤。
常用算法
- MD5 —— 128位摘要,速度极快。但碰撞早被攻破,2004年就有人能造出两个不同文件有相同MD5。不要用于安全场景。
- SHA-1 —— 160位,也被发现了碰撞攻击。Google在2017年展示了两个不同PDF的SHA-1碰撞。现在浏览器都放弃SHA-1证书了。
- SHA-256(SHA-2族)—— 256位,目前主流。签名算法现在基本要求SHA-256 with RSA或ECDSA。
- SM3 —— 国密哈希,256位。国密数字签名必备。我记得有一次签名验签对不上,排查半天发现哈希用的是SHA-256,而对方要求SM3。
测试要点
- 一致性:相同输入重复哈希,输出必须完全相同。
- 雪崩效应:输入改一个bit,输出约一半bit要翻转。这个可以用脚本来验证。
- 长度扩展攻击:MD5、SHA-1、SHA-256都有这个问题。所以现在HMAC和SHA-3/ SM3更推荐。
- 性能:哈希算法吞吐量高,但也要注意大数据量下的分块处理,SDK内部有缓冲区大小限制。
避坑指南: 我曾经遇到一个密码存储系统,直接用MD5哈希密码。后来有人拖库,所有密码一次跑彩虹表全解出来了。安全实践至少要用bcrypt或PBKDF2加盐多次迭代,光靠SHA-256也不够。
2.4 三类算法对比总览
| 维度 | 对称加密 | 非对称加密 | 哈希算法 |
|---|---|---|---|
| 密钥 | 一个密钥 | 公钥+私钥 | 无密钥 |
| 速度 | 快(硬件加速可达GB/s) | 慢(签名/解密毫秒级) | 快(计算摘要微秒级) |
| 用途 | 数据加密 | 密钥交换、数字签名 | 完整性、身份认证 |
| 安全性基础 | 密钥保密 | 私钥保密 + 数学难题 | 抗碰撞、抗原像 |
| 典型算法 | AES, SM4 | RSA, ECDSA, SM2 | SHA-256, SM3 |