密码学基础回顾:对称加密、非对称加密、哈希函数、数字信封技术
好,咱们正式开始第二讲。在动手搭建签名验签系统之前,有些底层的密码学概念必须得先理清楚。我见过不少开发同学,上来就调 API,结果密钥管理一塌糊涂,签名验签逻辑漏洞百出。说白了,这些坑大多是因为对基础原理理解不透。
这一章,我会带你快速过一遍四个核心概念:对称加密、非对称加密、哈希函数,以及它们组合起来用的数字信封技术。嗯,都是干货,没有废话。
核心观点:没有一种密码学工具是万能的。签名验签系统之所以能安全运转,靠的是多种技术的组合,而不是某一种算法的单打独斗。
1. 对称加密:又快又简单,但有个致命弱点
对称加密,顾名思义,加密和解密用的是同一把密钥。就像你用一把钥匙锁门,也用同一把钥匙开门。常见的算法有 AES(高级加密标准)和咱们国家的 SM4。
它的优点很突出:速度快。我在做高性能网关的时候,对吞吐量要求极高,对称加密几乎是唯一的选择。AES-NI 指令集加持下,加解密延迟可以控制在微秒级。
但它的缺点也很致命:密钥分发难。你想想看,如果通信双方有 N 个人,每个人都需要一把独立的密钥,那密钥总数就是 N*(N-1)/2。100 个人的系统,就要管理 4950 把密钥。这还不算密钥在传输过程中被截获的风险。
我的经验:对称加密适合用在内部网络、或者已经通过其他方式协商好密钥的场景。比如数据库字段加密、本地文件加密。千万别在公网上直接传输对称密钥,那是找死。
2. 非对称加密:安全但慢,密钥管理轻松多了
非对称加密引入了一对密钥:公钥和私钥。公钥可以公开,私钥必须保密。用公钥加密的数据,只有对应的私钥能解密;反过来,用私钥签名的数据,可以用公钥验签。
常见的算法有 RSA(基于大整数分解)和 SM2(基于椭圆曲线)。我个人更推荐 SM2,同等安全强度下,它的密钥更短,计算更快。
非对称加密解决了密钥分发问题。你只需要把自己的公钥发给别人,私钥留在本地。即使公钥被截获,攻击者也拿它没办法——因为没有私钥,他解不了密。
但代价是性能。RSA 2048 位密钥的加解密速度,比 AES-256 慢了好几个数量级。所以实际工程中,没人会用非对称加密去加密大文件。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 把(共享密钥) | 2 把(公钥 + 私钥) |
| 密钥分发 | 困难,需要安全通道 | 容易,公钥可公开 |
| 性能 | 快(微秒级) | 慢(毫秒级) |
| 典型算法 | AES, SM4, 3DES | RSA, SM2, ECDSA |
| 主要用途 | 数据加密 | 密钥交换、数字签名 |
避坑指南:我曾经见过一个项目,直接用 RSA 加密 10MB 的日志文件,结果接口超时了。记住,非对称加密只适合加密小数据,比如对称密钥、哈希值。大数据加密,请交给对称加密。
3. 哈希函数:单向的指纹机
哈希函数,也叫散列函数。它能把任意长度的输入,变成固定长度的输出(比如 SHA-256 输出 256 位)。而且这个过程是单向的——你无法从哈希值反推出原始数据。
好的哈希函数有几个特点:
- 抗碰撞性:很难找到两个不同的输入,产生相同的哈希值。
- 雪崩效应:输入改一个比特,输出就面目全非。
- 计算快速:硬件实现可以做到纳秒级。
在签名验签系统里,哈希函数扮演着关键角色。我们不会直接对整份文档签名——那样太慢了。而是先对文档做哈希,得到摘要,再对这个摘要签名。这样既保证了效率,又保证了完整性。
常用的哈希算法有 SHA-256、SM3。我个人习惯用 SM3,毕竟是国密标准,合规性更好。
重要提醒:哈希不是加密。加密是可逆的,哈希是不可逆的。别把这两个概念搞混了。我在面试时经常问这个问题,能答对的人不到一半。
4. 数字信封技术:取长补短的组合拳
好了,前面三个概念都讲完了。现在问题来了:对称加密快但密钥分发难,非对称加密安全但性能差,哈希函数又不能加密数据。怎么办?
答案就是数字信封。它把对称加密和非对称加密结合起来,各取所长。
流程是这样的:
- 发送方随机生成一个对称密钥(叫会话密钥)。
- 用这个会话密钥加密实际数据(对称加密,快)。
- 用接收方的公钥加密这个会话密钥(非对称加密,安全)。
- 把加密后的数据 + 加密后的会话密钥,一起发给接收方。
接收方收到后:
- 用自己的私钥解密出会话密钥。
- 用会话密钥解密出原始数据。
你看,整个过程中,实际数据是用对称加密保护的,性能没问题。而会话密钥是用非对称加密保护的,安全性有保障。这就是数字信封的精髓。
实战经验:我在做企业级文件传输系统时,就是用数字信封来加密大文件的。每次传输生成一个新的会话密钥,用完就丢弃。这样即使某个会话密钥泄露,也只影响一次传输,不会波及其他数据。
5. 这些技术怎么用在签名验签里?
最后,我简单串一下这些技术在签名验签系统中的位置。后面的章节会详细展开,这里先有个印象。
- 哈希函数:对文档生成摘要,作为签名的对象。
- 非对称加密:用私钥对摘要签名,用公钥验签。
- 对称加密:在需要加密文档内容时使用,配合数字信封技术。
- 数字信封:在需要同时保证机密性和完整性的场景下使用,比如加密传输签名后的文档。