2. 密码学基础
在HSM(硬件安全模块)中,密码学算法不是抽象概念,而是被固化在硬件内部、通过受控接口对外提供服务的“安全原语”。理解这些原语的原理、适用边界与组合方式,是后续开发密钥管理、加解密服务、签名验签功能的基础。本章从对称加密、非对称加密、哈希、消息认证码、数字签名到密钥管理,梳理一条从“保密”到“完整性”再到“身份可信”的完整技术链路。
一、核心原理:六类密码学原语的分工
密码学原语可以按“解决什么问题”来划分。对称加密解决数据保密性,非对称加密解决密钥分发与保密性,哈希算法解决数据完整性,消息认证码(MAC)解决完整性与共享密钥身份认证,数字签名解决完整性、身份认证与不可否认性,密钥管理则解决密钥全生命周期的安全。它们不是互相替代,而是层层组合。
对称加密使用同一把密钥进行加密和解密,典型算法有AES、SM4、3DES。其优点是速度快、适合大数据量加密;缺点是密钥分发困难,n个用户两两通信需要n(n-1)/2把密钥。非对称加密使用公钥加密、私钥解密,或私钥签名、公钥验签,典型算法有RSA、ECC、SM2。其优点是密钥分发简单、支持数字签名;缺点是运算慢,通常只用于加密会话密钥或签名摘要。
哈希算法把任意长度输入映射为固定长度摘要,具备单向性和抗碰撞性,典型算法有SHA-256、SM3。MAC在哈希基础上引入共享密钥,只有持有密钥的一方才可计算和验证,典型算法有HMAC-SHA256、CMAC。数字签名则用私钥对消息摘要签名,公钥验证,天然具备不可否认性。
二、方法流程:一次安全通信的密码学编排
实际系统中,上述原语通常按“混合加密”方式组合。以客户端向服务端发送敏感数据为例,流程如下:
- 身份认证与密钥协商:客户端与服务端通过非对称算法(如SM2或ECDH)协商出一把临时会话密钥,或由客户端生成会话密钥后用服务端公钥加密传输。
- 数据加密:使用会话密钥对业务数据做对称加密,得到密文。大数据量下对称加密性能远优于非对称加密。
- 完整性保护:对密文计算MAC或哈希摘要,防止传输过程中被篡改。
- 身份确认:若需不可否认,发送方用私钥对摘要签名,接收方用公钥验签。
- 密钥生命周期管理:会话密钥使用后销毁,长期密钥由HSM保护并定期轮换。
关键原则:加密与完整性保护必须使用不同的密钥,避免“同一密钥既加密又认证”带来的安全风险。HSM通常通过密钥句柄和用途属性(如CKA_ENCRYPT、CKA_SIGN)强制隔离。
三、案例/场景:HSM中的密钥使用与算法选择
假设我们要在HSM中实现一个“敏感配置文件加密存储”功能。配置文件约2MB,需要保证机密性和完整性,并支持多节点部署。推荐方案是:
- 在HSM内生成一把AES-256主密钥(KEK),标记为不可导出。
- 每次加密文件时,在HSM内生成一把随机数据密钥(DEK),用DEK对文件做AES-GCM加密,GCM同时提供机密性和完整性。
- 用KEK对DEK做密钥包装(Key Wrap),把包装后的DEK与密文一起存储。
- 若需跨节点共享,用接收方公钥对DEK再加密,或通过HSM集群的密钥同步机制分发。
对应的HSM调用伪代码如下:
// 1. 生成数据密钥 DEK(HSM 内部)
C_GenerateKey(hSession, CKM_AES_KEY_GEN,
{CKA_VALUE_LEN, 32, CKA_ENCRYPT, CKA_DECRYPT},
&hDek);
// 2. 使用 AES-GCM 加密文件
C_EncryptInit(hSession, CKM_AES_GCM, hDek, gcmParams);
C_Encrypt(hSession, plaintext, plainLen, ciphertext, &cipherLen);
// 3. 用 KEK 包装 DEK
C_WrapKey(hSession, CKM_AES_KEY_WRAP, hKek, hDek,
wrappedDek, &wrappedLen);
// 4. 存储:wrappedDek + iv + ciphertext + tag
该方案中,明文DEK始终不出HSM,攻击者即使拿到存储文件,也无法还原数据。若使用软件实现,DEK可能出现在内存或日志中,风险显著升高。
四、误区与复盘:常见密码学使用错误
开发中常见的误区包括:用哈希代替加密存储密码(应使用加盐慢哈希如PBKDF2、bcrypt或Argon2);用ECB模式加密结构化数据(相同明文块产生相同密文块,泄露模式);MAC验证时使用普通字符串比较(应使用恒定时间比较);把私钥导出到应用内存中做签名(应通过HSM句柄调用)。
复盘要点:密码学安全不取决于算法是否“高级”,而取决于密钥是否安全、模式是否正确、随机数是否可靠、错误处理是否泄露信息。HSM的价值正是把这些易错点收敛到硬件边界内。
五、算法与用途对照清单
| 原语类型 | 典型算法 | 核心用途 | HSM中的关键属性 |
|---|---|---|---|
| 对称加密 | AES、SM4、3DES | 大数据量保密 | CKA_ENCRYPT / CKA_DECRYPT |
| 非对称加密 | RSA、ECC、SM2 | 密钥分发、密钥协商 | CKA_WRAP / CKA_UNWRAP |
| 哈希算法 | SHA-256、SM3 | 完整性摘要、口令派生 | CKA_DIGEST |
| 消息认证码 | HMAC-SHA256、CMAC | 完整性与共享密钥认证 | CKA_SIGN / CKA_VERIFY |
| 数字签名 | RSA-PSS、ECDSA、SM2 | 身份认证、不可否认 | CKA_SIGN / CKA_VERIFY |
| 密钥管理 | Key Wrap、KDF、TRNG | 密钥生成、保护、轮换 | CKA_EXTRACTABLE=false |