密码学基础回顾:对称加密与非对称加密、哈希函数与数字签名、密钥长度与安全强度

说实话,很多做 PKI 的同学,最后栽跟头的地方往往不是协议本身,而是最基础的密码学概念没吃透。我见过不少项目,证书发得挺溜,但一问「你的根密钥到底多长才安全」,就含糊了。

这一章,咱们把地基夯实。不扯太深的理论,就讲你搭建企业 PKI 时,必须搞清楚的几个核心概念。

对称加密:快,但密钥怎么分?

对称加密,说白了就是「一把钥匙开一把锁」。加密和解密用同一个密钥。

它的优点是快。AES 加密一个几百兆的文件,基本感觉不到延迟。所以你在 PKI 体系里,真正保护大量数据的,还是对称加密。

但问题也很明显——密钥分发。你想想看,如果我和你要用同一个密钥,我怎么安全地把密钥给你?如果通过网络传,万一被截获,加密就形同虚设了。

企业 PKI 中的典型用法: 非对称加密用来协商或传输对称密钥,对称加密用来加密实际业务数据。两者配合,各取所长。

常见的对称算法,我列个表,你心里有个数:

算法 密钥长度 状态 我的建议
AES 128 / 192 / 256 位 推荐使用 企业环境至少用 AES-256
SM4 128 位 国密标准 国内合规场景必选
3DES 168 位 已弃用 千万别再用,有已知漏洞
RC4 可变 已弃用 彻底淘汰,毫无安全性可言
避坑提醒: 我曾经在一个遗留系统里看到还在用 3DES,理由是「一直这么用也没出事」。嗯,没出事不代表安全。建议尽快迁移到 AES-256。

非对称加密:慢,但解决了信任问题

非对称加密,有一对密钥:公钥和私钥。公钥可以公开,私钥必须保密。

它的核心价值是解决密钥分发问题。你想想看,我只要把我的公钥给你,你用公钥加密数据,只有我用私钥能解开。中间人就算拿到公钥,也解不开密文。

但代价是慢。RSA 加密一个几百字节的数据还行,加密大文件就太慢了。所以它不适合直接加密业务数据。

在企业 PKI 里,非对称加密主要干两件事:

  • 数字信封: 用接收方的公钥加密一个临时对称密钥,然后对称加密实际数据。接收方先用私钥解开信封,拿到对称密钥,再解密数据。
  • 数字签名: 用发送方的私钥对数据摘要签名,接收方用发送方的公钥验签。保证数据来源和完整性。

常见的非对称算法:

算法 典型密钥长度 安全强度 适用场景
RSA 2048 / 4096 位 高 数字签名、密钥交换
ECC (椭圆曲线) 256 / 384 位 极高 移动设备、IoT、高性能场景
SM2 256 位 极高 国密合规场景
DSA 2048 位 中 仅用于签名,已逐渐被 ECDSA 取代
个人经验: 我建议新项目优先考虑 ECC。同样的安全强度,ECC 的密钥比 RSA 短得多,计算量也小。对于 IoT 设备或移动端,这个优势非常明显。

哈希函数:数据的「指纹」

哈希函数,就是把任意长度的数据,映射成一个固定长度的摘要。这个摘要就像数据的「指纹」——内容变了,指纹一定变。

它有几个关键特性:

  • 单向性: 从摘要反推原始数据,理论上不可能。
  • 抗碰撞性: 很难找到两个不同的数据,产生相同的摘要。
  • 雪崩效应: 输入改一个比特,摘要会大变样。

在企业 PKI 里,哈希函数无处不在:

  • 证书签名时,先对证书内容做哈希,再对哈希值签名。
  • 完整性校验时,对比文件的哈希值是否一致。
  • 密码存储时,存哈希值而不是明文密码。

常见的哈希算法:

算法 摘要长度 状态 我的建议
SHA-256 256 位 推荐使用 企业 PKI 默认选择
SHA-384 / SHA-512 384 / 512 位 推荐使用 更高安全需求时选用
SM3 256 位 国密标准 国内合规场景必选
MD5 / SHA-1 128 / 160 位 已弃用 绝对不要用,有已知碰撞攻击
避坑提醒: 我曾经审计过一个项目,他们用 SHA-1 做代码签名。我说这不行,对方说「用了十年都没事」。嗯,直到 2017 年 Google 和 CWI 展示了 SHA-1 碰撞攻击。从那以后,所有主流 CA 都停止签发 SHA-1 证书了。别踩这个坑。

数字签名:非对称加密 + 哈希的完美组合

数字签名,本质上就是「用私钥加密哈希值」。它解决了三个问题:

  • 身份认证: 只有持有私钥的人才能签名。
  • 完整性: 数据被篡改,哈希值对不上,签名验证失败。
  • 不可否认性: 签名者无法否认自己签过名。

流程很简单:

  1. 发送方对数据做哈希,得到摘要。
  2. 发送方用私钥加密摘要,生成签名。
  3. 接收方用发送方的公钥解密签名,得到摘要 A。
  4. 接收方对收到的数据做哈希,得到摘要 B。
  5. 对比 A 和 B,一致则签名有效。

这就是 PKI 里证书签名的核心逻辑。CA 用自己的私钥对证书内容签名,你拿到证书后用 CA 的公钥验签,就知道这个证书是不是真的。

密钥长度与安全强度:多长才够用?

这个问题,我几乎每次培训都会被问到。答案其实很简单:看你的安全需求和时间跨度。

密钥越长,暴力破解的难度呈指数级增长。但也不是越长越好——太长会影响性能。

我给出一个当前业界公认的安全强度对照表:

安全强度 (位) 对称算法 RSA / DSA ECC 推荐用途
80 2TDEA 1024 160 已不安全,禁止使用
112 3TDEA 2048 224 短期使用,不推荐新系统
128 AES-128 3072 256 当前推荐,适合大多数企业
192 AES-192 7680 384 高安全需求,如金融、政务
256 AES-256 15360 512 极高安全,面向未来
我的建议: 企业 PKI 的根密钥,至少用 RSA 4096 位或 ECC 256 位。设备证书可以用 RSA 2048 位或 ECC 256 位。别为了省那点性能,把安全底线拉低。

你可能会问:「为什么 RSA 需要那么长,ECC 却可以短很多?」

因为两者的数学基础不同。RSA 依赖大整数分解,ECC 依赖椭圆曲线离散对数。在同样的安全强度下,ECC 的密钥长度只有 RSA 的十分之一左右。这也是为什么现代 PKI 越来越倾向于 ECC。

知识体系总览

下面这张图,把本章的核心概念串起来了。你可以把它当作一个快速参考:

密码学基础核心概念关系图 密码学基础核心概念关系图 对称加密 AES / SM4 / 3DES 非对称加密 RSA / ECC / SM2 哈希函数 SHA-256 / SM3 密钥分发 数字签名 数字签名 = 非对称加密 + 哈希函数 身份认证 / 完整性 / 不可否认性 密钥长度与安全强度 RSA 2048+ / ECC 256+ / AES-256 企业 PKI 应用:证书签名 / 密钥协商 / 数据加密 核心原则 公钥加密,私钥签名

这张图的核心逻辑很简单:对称加密负责效率,非对称加密负责信任,哈希函数负责完整性。三者结合,构成了数字签名,而密钥长度决定了这一切的安全底线。企业 PKI 就是在这个基础上搭建起来的。