1. 密码学基础回顾:对称加密与非对称加密、哈希函数与消息认证码、数字签名与证书体系

各位好,我是老周。做密码套件迁移这行十几年了,踩过的坑比写过的代码还多。今天咱们先打好地基——把密码学里最核心的几个概念捋一遍。别嫌基础,我见过不少迁移事故,根子就在这些基础概念没吃透。

1.1 对称加密:一把钥匙开一把锁

对称加密,说白了就是加密和解密用同一把密钥。你想想看,就像你家大门钥匙——锁门用它,开门也用它。

常见的对称加密算法有:

  • AES(Advanced Encryption Standard)—— 目前最主流,密钥长度128/192/256位
  • DES —— 老了,56位密钥,现在暴力破解也就几天的事
  • 3DES —— DES的加强版,但效率低,我建议新项目别碰
  • SM4 —— 国密标准,国内项目必备

核心特点:速度快、适合大数据量加密。但密钥分发是个老大难——你得先安全地把密钥交给对方。

我在2018年帮一家金融公司做系统迁移时,发现他们还在用3DES加密交易流水。问为什么?答曰"一直这么用"。我当场给他们算了一笔账:换成AES-256,吞吐量能提升3倍,而且安全性高两个数量级。嗯,后来他们连夜改了。

1.2 非对称加密:公钥私钥,各司其职

非对称加密解决了密钥分发的问题。它有一对密钥:公钥公开给所有人,私钥自己藏好。公钥加密的数据,只有对应的私钥能解开;反过来,私钥签名的数据,公钥可以验证。

主流算法:

  • RSA —— 最经典,2048位起步,4096位更稳妥
  • ECC(椭圆曲线)—— 密钥更短,性能更好,比如256位ECC ≈ 3072位RSA
  • SM2 —— 国密椭圆曲线算法
特性 对称加密 非对称加密
密钥数量 1个(共享密钥) 2个(公钥+私钥)
加密速度 快(硬件加速友好) 慢(比对称慢100-1000倍)
密钥分发 困难 容易(公钥随便发)
典型用途 数据加密 密钥交换、数字签名

实战建议:实际项目中,我们通常用非对称加密来传输对称密钥,然后用对称加密来加密业务数据。这叫"混合加密",TLS就是这么干的。

1.3 哈希函数:数据的指纹

哈希函数能把任意长度的数据,压缩成固定长度的"摘要"。而且它有个特性:不可逆——你没法从摘要反推出原文。

常见的哈希算法:

  • MD5 —— 128位,已破,别用了。我曾经在审计时发现某系统还在用MD5存密码……
  • SHA-1 —— 160位,2017年Google宣布碰撞攻击成功,淘汰
  • SHA-256 —— 256位,目前安全,推荐
  • SM3 —— 国密哈希,256位输出

避坑指南:哈希不是加密!哈希是单向的,加密是双向的。我曾经见过有人把"哈希密码"说成"加密密码",结果被安全审计打了回来。这两个概念千万别混。

1.4 消息认证码:防篡改的封条

光有哈希还不够——如果有人同时篡改数据和哈希值,你根本发现不了。消息认证码(MAC)解决了这个问题:它用共享密钥对数据做带密钥的哈希。

主流方案:

  • HMAC(Hash-based MAC)—— 最常用,比如HMAC-SHA256
  • CMAC(Cipher-based MAC)—— 基于分组密码
  • GMAC(Galois MAC)—— GCM模式的一部分

我个人的习惯是:API接口签名用HMAC-SHA256,既简单又安全。记得密钥要定期轮换,别一个密钥用十年。

1.5 数字签名:电子世界的盖章

数字签名 = 哈希 + 非对称加密。流程是这样的:

  1. 发送方对数据做哈希
  2. 用私钥加密哈希值,得到签名
  3. 接收方用公钥解密签名,得到哈希值
  4. 接收方自己算一遍数据的哈希,对比是否一致

这样就同时保证了完整性(数据没被改)和不可否认性(发送方赖不掉)。

关键区别:消息认证码用对称密钥,数字签名用非对称密钥。MAC适合双方通信,签名适合多方验证场景。

1.6 证书体系:谁来证明公钥是真的?

你拿到一个公钥,怎么确定它真的是对方的?万一中间人换掉了呢?这就是数字证书要解决的问题。

证书 = 公钥 + 身份信息 + CA的数字签名。CA(证书颁发机构)是个可信第三方,它用自己的私钥给你的公钥签名,证明"这个公钥确实属于这个实体"。

证书链是这样的:

  • 根证书 —— 自签名,浏览器/操作系统内置
  • 中间证书 —— 由根CA签发
  • 终端证书 —— 由中间CA签发,给具体网站或服务用

我记得有一次帮客户排查TLS握手失败,查了两天才发现是中间证书没配全。客户端只收到了终端证书,但找不到中间证书来验证链。嗯,从那以后我每次部署都会用 openssl verify 检查一遍证书链。

1.7 知识体系总览

下面这张图把今天讲的核心概念串起来了。我建议你保存下来,以后做迁移方案时对照着看。

密码学基础体系 对称加密 非对称加密 哈希函数 AES SM4 RSA ECC/SM2 SHA-256 SM3 消息认证码 (MAC) 数字签名 数字证书 核心关系: MAC = 哈希 + 对称密钥 | 数字签名 = 哈希 + 非对称密钥 | 证书 = 公钥 + CA签名

1.8 实战中的常见误区

最后,我把自己这些年见过的坑列出来,你对照着自查一下:

  • 误区一:用MD5存密码。别笑,2023年我还审计到过这样的系统。正确做法是用bcrypt或Argon2。
  • 误区二:RSA密钥长度用1024位。现在1024位已经能被破解了,至少2048位起步。
  • 误区三:证书过期不监控。我见过某大厂线上服务证书过期3天才发现,用户全在报错。
  • 误区四:把哈希当加密用。哈希不可逆,加密可逆,这是两码事。

我的建议:做密码套件迁移时,先把这些基础概念画成脑图贴墙上。每次改配置前看一眼,能避免80%的低级错误。