2、对称加密与非对称加密:基本原理、密钥类型、哈希与数字签名在KMS中的作用

对称加密与对称密钥

对称加密,说白了就是加密和解密用同一把钥匙。你拿它锁上,再拿它打开。很简单,也很高效。

常见的对称算法有 AES(AES-256 是主流)、DES(现在基本淘汰了)、还有国密 SM4。我个人习惯在 KMS 里都用 AES-256-GCM,因为自带认证加密,能检测篡改。

对称密钥在 KMS 里主要干两件事:

  • 直接加密数据:比如加密数据库里的敏感字段,大文件加密。
  • 做密钥加密密钥(KEK):这就是信封加密的核心。用对称密钥保护其他密钥。

我在项目中遇到过一个问题:有人把对称密钥硬编码在配置文件里,一泄露全部玩完。所以密钥必须由 KMS 统一托管,应用只拿密文密钥。

我曾经踩过的坑:对称密钥长期不轮换。你以为没问题,直到运维泄露了去年的备份密钥……结果所有历史数据全被破解。记住,轮换周期别超过 90 天。

非对称加密与非对称密钥对

非对称加密方案,每一个密钥对包含 公钥 和 私钥。公钥可以公开,私钥必须保密。你想想看,这解决了对称加密里最头疼的密钥分发问题。

算法上常见的是 RSA(2048 位及以上)、ECC(比如 P-256,性能好)、国密 SM2。RSA 我用的最多,但 ECC 在同安全强度下密钥更短、计算更快。

在 KMS 里,非对称密钥对主要用途:

  1. 数字信封:用公钥加密对称密钥,接收方用私钥解密。
  2. 身份认证:比如 TLS 证书里的密钥对。
  3. 数字签名:私钥签名,公钥验证完整性。

我记得做支付系统时,我们用 KMS 生成 RSA 密钥对来签发交易凭据。公钥分发给下游系统,私钥永远不离开 KMS 的 HSM 边界。心里踏实多了。

一点提醒:非对称加密性能差,别用它直接加密大文件。正确的做法是用对称密钥加密数据,再用非对称密钥加密那个对称密钥。嗯,这就是混合加密。

哈希与数字签名

哈希不是加密,它是把任意长度的数据映射成固定长度的摘要(比如 SHA-256 输出 256 位)。而且不可逆,你没法从摘要还原原文。我经常把它比作数据的“指纹”。

在 KMS 里,哈希有两个关键角色:

  • 数据完整性校验:存储时同时存哈希值,验证时重新计算,看是否被篡改。
  • 数字签名的基础:签名时通常是对哈希值签名,而不是对整个文件签名,否则效率太低。

数字签名的流程大致是这样:

  1. 发送方计算数据的哈希值。
  2. 用私钥对这个哈希值加密(签名)。
  3. 接收方用公钥解密签名得到哈希值。
  4. 再自己计算一次数据哈希,对比两者是否一致。

我曾在某个区块链项目中用过这个流程——每个交易都经过 KMS 签名,保证了不可否认性。当然,哈希算法要选强抗碰撞的,比如 SHA-256 或 SM3。

它们在 KMS 中的协作关系

下面的图展示了对称加密、非对称加密、哈希和数字签名在 KMS 中的协作逻辑。你可以把它当作一个整体看待,而不是各自孤立的技术。

KMS 中密码学组件协作关系 KMS(密钥管理系统) 对称加密 AES-256 / SM4 非对称密钥对 RSA / ECC / SM2 哈希 & 摘要 SHA-256 / SM3 数字签名 私钥签名 + 公钥验签 数据加密(对称) + 签名(非对称) → 机密性 + 完整性 + 不可否认性 说明:对称加密负责效率,非对称负责密钥分发与签名,哈希提供完整性,三者协同实现数据全生命周期保护。

关键对比:对称 vs 非对称

维度 对称加密 非对称加密
密钥数量 一个密钥(需共享) 密钥对(公钥公开,私钥保密)
性能 非常快(适合大数据) 慢(适合小数据)
主要用途 数据加密、密钥加密(KEK) 密钥交换、数字签名、身份认证
典型算法 AES, SM4, ChaCha20 RSA, ECC, SM2
KMS 使用场景 加密数据库字段、大文件 信封加密、TLS 证书、凭据签名

重点记一下:在 KMS 里,对称密钥负责“干活”,非对称密钥负责“管人”。哈希和签名是“保安”,保证数据没被动手脚。你设计任何一个加密方案,这四件套缺一不可。

哈希在数字签名中的角色

为什么签名前要哈希?举个例子,你要签一个 10GB 的视频文件。直接签整个视频,非对称加密能把你 CPU 跑冒烟。所以先算个哈希(32 字节),然后只签这个哈希。又小又准。

我在 KMS 里做文档签名时,就是先让 KMS 计算文档的 SHA-256,再用内部私钥签名。接收方拿公钥验签,同时重新计算哈希。完美。

小技巧:如果哈希算法选错了(比如 MD5),碰撞攻击会让签名形同虚设。现在业界都是用 SHA-256 或更高级别,国密方案则固定用 SM3。别图快用旧算法。

好了,这章我们把对称、非对称、哈希和数字签名在 KMS 里的角色捋清楚了。下一层我们就可以进入实操,看 KMS 怎么把这些技术包装成接口让你调用。