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密钥。

常用算法

算法密钥长度安全强度典型用途
RSA1024/2048/40961024已不安全,至少2048数字签名、密钥封装
ECC (椭圆曲线)256位 ≈ RSA 3072高签名(ECDSA)、密钥交换(ECDH)
SM2256位国密标准签名、加密、密钥协商

我个人习惯优先用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, SM4RSA, ECDSA, SM2SHA-256, SM3
三类密码学算法关系与流程 密码学三大基石:对称 / 非对称 / 哈希 对称加密 同一密钥加密/解密 AES / SM4 / 3DES 非对称加密 公钥加密/私钥解密 RSA / ECC / SM2 哈希算法 单向摘要,无密钥 SHA-256 / SM3 / MD5 实际应用中的典型组合 1. 安全通信:非对称交换对称密钥 → 对称加密数据 2. 数字签名:哈希摘要 → 非对称签名私钥 3. 证书链:哈希对证书内容做摘要,非对称验证签名 测试关注点 • 密钥长度校验 • 模式与填充处理 • 异常输入覆盖 常见坑 • EBC模式泄露图案 • 哈希算法碰撞 • 随机数重复使用