第2章 密码学基础回顾:对称加密、非对称加密、哈希函数、数字签名核心概念

做密码SDK,逃不开这四个老朋友。我每次带新人,第一件事就是把它们四个的关系讲透。说白了,它们就像工具箱里的四把扳手——各有各的用法,混着用才顺手。这一章咱们快速过一遍核心,结合我踩过的坑,给你讲明白。

2.1 对称加密——老派但管用

对称加密,加密和解密用同一把钥匙。就像你家大门,一把钥匙开锁、反锁都行。优点是快,特别快;缺点是密钥怎么安全传给对方,是个头疼事。

常见的算法有 AES、DES、3DES、SM4(国标)。其中 AES 是主流,密钥长度 128/192/256 位。我习惯用 AES-256-GCM,自带认证加密,能防篡改。

  • AES (Advanced Encryption Standard):全行业默认,软件硬件都支持
  • DES:太老了,56 位密钥现在秒破,别用了
  • SM4:中国国家密码标准,国内项目必须用的场景
小提示:对称加密适合大数据量场景,比如文件加密、网络流加密。我在物联网项目中用过 AES-128-CCM,对端的 MCU 算力弱,128 位刚好够。
警告:千万别用 ECB 模式!相同明文块会得到相同密文块,有严格模式泄露风险。我曾经见过一个支付终端,因为用 ECB 加密交易金额,被攻击者通过密文长度推测出金额——坑太大了。

2.2 非对称加密——公钥私钥的默契

非对称加密,密钥成对出现:公钥公开,私钥自己藏好。加密用公钥,解密用私钥;签名用私钥,验签用公钥。解决了密钥分发问题,但速度慢——比对称加密慢上千倍。

主要算法:RSA、ECC(椭圆曲线)、SM2(国标)。RSA 安全但密钥长(2048 位以上),ECC 同样安全级别下密钥短(256 位左右),效率更高。

算法 密钥长度(安全级别 128 位) 运算速度 常见用途
RSA 3072 位 慢(指数级) 密钥交换、数字签名
ECC (secp256r1) 256 位 较快(椭圆曲线乘) 移动端、TLS 证书
SM2 256 位 快(国密优化) 国密合规项目

实际项目中,我一般用 ECDH(基于 ECC 的密钥交换)来协商对称密钥,再用对称加密通信。这样既解决了密钥分发,又保证了性能。

核心原则:非对称加密只用来加密小数据(比如对称密钥、哈希摘要),不要直接加密大文件。否则你会等到怀疑人生。

2.3 哈希函数——数据的指纹

哈希函数把任意长度的数据,压缩成固定长度的摘要。它是单向的:从摘要无法反推原文。而且雪崩效应明显——输入改一个比特,输出就面目全非。

常用算法:SHA-2 系列(SHA-256/384/512)、SHA-3、SM3(国标)。MD5 和 SHA-1 已经不安全,别再用了。

# Python 里算个 SHA-256 做个演示
import hashlib

data = b"Hello, Crypto SDK!"
digest = hashlib.sha256(data).hexdigest()
print(digest)  # 输出 64 个十六进制字符

我踩过的坑:在分布式存储项目中,用 MD5 做数据分块签名,结果两个不同文件产生了碰撞——虽然概率极低,但真就被我们碰到了。从那以后,我强制团队所有地方都切换到 SHA-256。

切记:哈希函数不防篡改。你可以轻易修改原文后再哈希。要防篡改,必须和数字签名配合——先哈希再签名。

2.4 数字签名——防抵赖的利器

数字签名 = 哈希 + 非对称加密。签名者用自己的私钥对消息的哈希加密,任何人用签名者的公钥都能验签。这样既能确认消息来源,又能保证消息未被修改。

标准流程:

  1. 消息 → 哈希计算 → 哈希摘要
  2. 签名者用私钥对摘要加密 → 得到签名值
  3. 发送消息 + 签名值 给接收方
  4. 接收方计算消息哈希,用公钥解密签名得到另一个哈希,对比——相同即验证通过

常见算法:RSA-PSS、ECDSA、EdDSA、SM2 签名。我建议新项目优先用 Ed25519(基于 Curve25519),速度快、签名小、实现安全,免去很多侧信道攻击的烦恼。

实战经验:签名前一定要先哈希,否则签名数据太长,非对称加密扛不住。我曾经见过新手直接拿 RSA 对 1MB 文件签名,结果 CPU 烧了好几分钟——其实哈希后才几十字节。

2.5 各技术对比与选型建议

这张图把四个技术的关系画清楚了,方便你以后选型时对照。

密码学核心技术体系关系图 对称加密 同一密钥加密/解密 非对称加密 公钥加密,私钥解密 哈希函数 单向指纹,防篡改不防抵赖 数字签名 哈希+非对称,防抵赖 可搭配做消息认证码 提供签名/验签密钥对 先哈希后签名 实际密码SDK中:对称加密扛数据传输,非对称加密管密钥交换,哈希函数做完整性校验,数字签名保来源认证

最后给你一个快速选型建议表:

需求场景 推荐技术 备注
大数据量加密 AES-256-GCM 自带认证,防重放
密钥交换 ECDH (X25519) 前向安全性好
文件完整性校验 SHA-256 无碰撞压力
软件签名认证 Ed25519 或 RSA-PSS Ed25519 签名更小更快
国密合规 SM2 + SM3 + SM4 国家密码管理局标准