# 密码学基础回顾

1. 密码学基础回顾

好,咱们正式开始。在深入 HSM 和 PKCS#11 之前,得先把底子打牢。

密码学这东西,说白了就是跟数学较劲。我当年刚入行时,觉得它离实际工程很远。后来踩了不少坑才发现——你要是不懂基础,HSM 在你手里就是个黑盒子,出问题只能干瞪眼。

1.1 对称加密

对称加密,就是加密和解密用同一把钥匙。打个比方:你有个保险箱,钥匙只有一把。你锁上,别人用这把钥匙开。

常见的对称算法就那么几个:

算法 密钥长度 特点
AES 128/192/256 位 当今标准,硬件加速友好
DES 56 位 别用了,早就被攻破
SM4 128 位 国标,国内项目常见
我的经验:AES-256 在 HSM 上几乎都是硬件实现的。你想想看,软件跑 AES 和硬件跑 AES,性能差了不止一个数量级。我在调优一个支付系统时,发现把对称加解密卸载到 HSM 上,吞吐量直接翻了 5 倍。

对称加密的优点是快,特别快。缺点呢?密钥分发是个大麻烦。你想想,两个陌生人怎么安全地共享一把钥匙?这就引出了非对称加密。

1.2 非对称加密

非对称加密,也叫公钥密码学。它有两个钥匙:公钥公开,私钥自己藏好。

你可以把它想象成一个信箱。谁都能往里投信(用公钥加密),但只有你有钥匙能打开拿信(用私钥解密)。

我整理了一张对比表,你一眼就能看明白:

维度 对称加密 非对称加密
密钥数量 1 个 2 个(公钥+私钥)
性能 快(硬件加速可达 Gbps) 慢(比对称慢 1000 倍左右)
典型应用 大量数据加密 密钥交换、数字签名
代表算法 AES, SM4 RSA, ECDSA, SM2
注意:RSA 密钥越长越慢。我用过 4096 位的 RSA,签名一次要几十毫秒。而 ECDSA 用 P-256 曲线,速度能快一个数量级。所以在 HSM 上,我一般推荐 ECC 而不是 RSA,除非有兼容性要求。

实际中怎么用呢?常见做法是“混合加密”:

  1. 用非对称加密交换一个临时对称密钥
  2. 用这个对称密钥加密实际数据
  3. 完事后销毁那个临时密钥

HTTPS 就是这么干的。TLS 握手阶段用非对称加密,后续传输用对称加密。嗯,各取所长。

1.3 哈希函数

哈希函数,就是把任意长度的数据,压缩成一个固定长度的摘要。而且这个操作是单向的——你不能从摘要反推出原始数据。

它有几个关键特性:

  • 抗碰撞性:很难找到两个不同的输入,它们的哈希值相同
  • 雪崩效应:输入改一个比特,输出完全不同
  • 固定输出长度:不管你输什么,出来的长度都一样

常用的哈希算法:

算法 输出长度 状态
SHA-256 256 位 广泛使用,安全
SHA-3 可配置 新一代标准
SM3 256 位 国标,国内必用
MD5 128 位 已攻破,别碰
避坑指南:我曾经犯过一个低级错误——直接用 MD5 做文件完整性校验。后来客户要求过等保测评,被审计直接亮了红灯。MD5 的碰撞攻击已经非常成熟,随便找个工具就能伪造。从那时起,我所有项目都强制要求 SHA-256 起步。

哈希函数还有个妙用——密码存储。你想想,如果数据库里存的是明文密码,一旦被拖库就全完了。正确做法是存哈希值,而且还要加盐(salt)。这个后面讲 PKCS#11 的 C_Digest 接口时会演示。

1.4 数字签名

数字签名,说白了就是“盖章”。它解决了三个问题:

  • 身份认证:确实是这个人签的
  • 完整性:签名后数据没改过
  • 不可否认:签了就赖不掉

签名过程其实就两步:

  1. 对数据算哈希
  2. 用私钥加密这个哈希值(实际是签名算法,不是加密)

验证时,用公钥解密签名得到哈希值,再跟自己算的哈希对比。一样就说明没问题。

常见的签名算法:

算法 签名长度 适用场景
RSA-PSS 与密钥等长 通用,兼容性好
ECDSA 较短 移动端、IoT 设备
SM2 较短 国密合规
个人习惯:在 HSM 上,我一般用 ECDSA P-256 配合 SHA-256。为什么?签名短、速度快,关键是 HSM 的硬件支持非常好。RSA 4096 也能用,但性能差距太明显了。有一次做压力测试,ECDSA 每秒能签 1 万次,RSA 4096 只能签不到 200 次。

这一套东西,在 HSM 里是怎么运转的呢?

密码学基础核心体系 对称加密 算法:AES、SM4 密钥:单一密钥 特点:性能高 场景:大量数据加密 非对称加密 算法:RSA、ECC、SM2 密钥:公钥/私钥对 特点:安全性高 场景:密钥交换、签名 哈希函数 算法:SHA-256、SM3 特点:单向不可逆 特点:固定输出长度 场景:完整性校验 数字签名 算法:RSA-PSS、ECDSA 流程:哈希+签名 特点:不可否认性 场景:身份认证 核心能力需求 密钥生成 | 密钥存储 | 加解密运算 | 签名验签 | 哈希计算 典型应用场景 TLS/SSL 传输加密 数字证书签发 代码签名与验证 电子合同签章 HSM 就是这些密码学操作的硬件安全执行环境

这张图把咱们今天讲的四个基础模块串起来了。你仔细看看——所有密码操作,到最后都归结为底层的密钥管理和运算能力。这正是 HSM 存在的意义。

我在实际项目中经常遇到有人觉得“密码学太理论,跟工程没关系”。嗯,等他们对接 HSM 时发现连密钥类型都分不清,就知道基础多重要了。咱们接下来的章节,会把这些概念一个一个映射到 PKCS#11 的具体接口上。到时候你会发现,理解了基础,API 调用就是个体力活。