密码学基础回顾:对称加密、非对称加密、哈希函数、数字信封技术

好,咱们正式开始第二讲。在动手搭建签名验签系统之前,有些底层的密码学概念必须得先理清楚。我见过不少开发同学,上来就调 API,结果密钥管理一塌糊涂,签名验签逻辑漏洞百出。说白了,这些坑大多是因为对基础原理理解不透。

这一章,我会带你快速过一遍四个核心概念:对称加密、非对称加密、哈希函数,以及它们组合起来用的数字信封技术。嗯,都是干货,没有废话。

核心观点:没有一种密码学工具是万能的。签名验签系统之所以能安全运转,靠的是多种技术的组合,而不是某一种算法的单打独斗。

密码学基础四件套关系图 密码学基础四件套 密码学基础 对称加密 AES / SM4 非对称加密 RSA / SM2 哈希函数 SHA-256 / SM3 数字信封 混合加密 关键关系 • 对称加密:速度快,适合加密大量数据,但密钥分发困难 • 非对称加密:安全性高,密钥管理方便,但性能差 • 哈希函数:不可逆,用于数据完整性校验和数字签名 • 数字信封:用非对称加密保护对称密钥,兼顾安全与性能

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. 数字信封技术:取长补短的组合拳

好了,前面三个概念都讲完了。现在问题来了:对称加密快但密钥分发难,非对称加密安全但性能差,哈希函数又不能加密数据。怎么办?

答案就是数字信封。它把对称加密和非对称加密结合起来,各取所长。

流程是这样的:

  1. 发送方随机生成一个对称密钥(叫会话密钥)。
  2. 用这个会话密钥加密实际数据(对称加密,快)。
  3. 用接收方的公钥加密这个会话密钥(非对称加密,安全)。
  4. 把加密后的数据 + 加密后的会话密钥,一起发给接收方。

接收方收到后:

  1. 用自己的私钥解密出会话密钥。
  2. 用会话密钥解密出原始数据。

你看,整个过程中,实际数据是用对称加密保护的,性能没问题。而会话密钥是用非对称加密保护的,安全性有保障。这就是数字信封的精髓。

实战经验:我在做企业级文件传输系统时,就是用数字信封来加密大文件的。每次传输生成一个新的会话密钥,用完就丢弃。这样即使某个会话密钥泄露,也只影响一次传输,不会波及其他数据。

5. 这些技术怎么用在签名验签里?

最后,我简单串一下这些技术在签名验签系统中的位置。后面的章节会详细展开,这里先有个印象。

  • 哈希函数:对文档生成摘要,作为签名的对象。
  • 非对称加密:用私钥对摘要签名,用公钥验签。
  • 对称加密:在需要加密文档内容时使用,配合数字信封技术。
  • 数字信封:在需要同时保证机密性和完整性的场景下使用,比如加密传输签名后的文档。