1. 密码学基础回顾
好,咱们正式开始。在深入 HSM 和 PKCS#11 之前,得先把底子打牢。
密码学这东西,说白了就是跟数学较劲。我当年刚入行时,觉得它离实际工程很远。后来踩了不少坑才发现——你要是不懂基础,HSM 在你手里就是个黑盒子,出问题只能干瞪眼。
1.1 对称加密
对称加密,就是加密和解密用同一把钥匙。打个比方:你有个保险箱,钥匙只有一把。你锁上,别人用这把钥匙开。
常见的对称算法就那么几个:
| 算法 | 密钥长度 | 特点 |
|---|---|---|
| AES | 128/192/256 位 | 当今标准,硬件加速友好 |
| DES | 56 位 | 别用了,早就被攻破 |
| SM4 | 128 位 | 国标,国内项目常见 |
对称加密的优点是快,特别快。缺点呢?密钥分发是个大麻烦。你想想,两个陌生人怎么安全地共享一把钥匙?这就引出了非对称加密。
1.2 非对称加密
非对称加密,也叫公钥密码学。它有两个钥匙:公钥公开,私钥自己藏好。
你可以把它想象成一个信箱。谁都能往里投信(用公钥加密),但只有你有钥匙能打开拿信(用私钥解密)。
我整理了一张对比表,你一眼就能看明白:
| 维度 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 个 | 2 个(公钥+私钥) |
| 性能 | 快(硬件加速可达 Gbps) | 慢(比对称慢 1000 倍左右) |
| 典型应用 | 大量数据加密 | 密钥交换、数字签名 |
| 代表算法 | AES, SM4 | RSA, ECDSA, SM2 |
实际中怎么用呢?常见做法是“混合加密”:
- 用非对称加密交换一个临时对称密钥
- 用这个对称密钥加密实际数据
- 完事后销毁那个临时密钥
HTTPS 就是这么干的。TLS 握手阶段用非对称加密,后续传输用对称加密。嗯,各取所长。
1.3 哈希函数
哈希函数,就是把任意长度的数据,压缩成一个固定长度的摘要。而且这个操作是单向的——你不能从摘要反推出原始数据。
它有几个关键特性:
- 抗碰撞性:很难找到两个不同的输入,它们的哈希值相同
- 雪崩效应:输入改一个比特,输出完全不同
- 固定输出长度:不管你输什么,出来的长度都一样
常用的哈希算法:
| 算法 | 输出长度 | 状态 |
|---|---|---|
| SHA-256 | 256 位 | 广泛使用,安全 |
| SHA-3 | 可配置 | 新一代标准 |
| SM3 | 256 位 | 国标,国内必用 |
| MD5 | 128 位 | 已攻破,别碰 |
哈希函数还有个妙用——密码存储。你想想,如果数据库里存的是明文密码,一旦被拖库就全完了。正确做法是存哈希值,而且还要加盐(salt)。这个后面讲 PKCS#11 的 C_Digest 接口时会演示。
1.4 数字签名
数字签名,说白了就是“盖章”。它解决了三个问题:
- 身份认证:确实是这个人签的
- 完整性:签名后数据没改过
- 不可否认:签了就赖不掉
签名过程其实就两步:
- 对数据算哈希
- 用私钥加密这个哈希值(实际是签名算法,不是加密)
验证时,用公钥解密签名得到哈希值,再跟自己算的哈希对比。一样就说明没问题。
常见的签名算法:
| 算法 | 签名长度 | 适用场景 |
|---|---|---|
| RSA-PSS | 与密钥等长 | 通用,兼容性好 |
| ECDSA | 较短 | 移动端、IoT 设备 |
| SM2 | 较短 | 国密合规 |
这一套东西,在 HSM 里是怎么运转的呢?
这张图把咱们今天讲的四个基础模块串起来了。你仔细看看——所有密码操作,到最后都归结为底层的密钥管理和运算能力。这正是 HSM 存在的意义。
我在实际项目中经常遇到有人觉得“密码学太理论,跟工程没关系”。嗯,等他们对接 HSM 时发现连密钥类型都分不清,就知道基础多重要了。咱们接下来的章节,会把这些概念一个一个映射到 PKCS#11 的具体接口上。到时候你会发现,理解了基础,API 调用就是个体力活。