4. KMS中的密钥类型
做密钥管理,第一件事就是分清你手里的钥匙长什么样。KMS里主要就两种:对称密钥和非对称密钥。搞混了它们,加密链路直接崩掉。我刚开始接触KMS时就犯过这种错——拿一个非对称密钥去做大量数据的对称加密,结果性能惨不忍睹。咱们今天就把这两种钥匙彻底捋清楚。
对称密钥:一把钥匙开一把锁
对称密钥,说白了就是加密和解密用同一把钥匙。你拿它加密一段数据,对方拿完全一样的钥匙才能解开。这玩意儿速度快得离谱,适合批量加密大块数据。
| 特性 | 对称密钥 |
|---|---|
| 密钥长度 | 128位~256位(如AES-256) |
| 加密速度 | 极快(硬件加速下可达GB/s级) |
| 典型算法 | AES、SM4、ChaCha20 |
| KMS支持 | 常见,可生成、轮换、删除 |
| 主要风险 | 密钥分发与存储 |
在KMS里,对称密钥通常用作主密钥(CMK)或数据密钥(DEK)。CMK你几乎不会直接拿它加密业务数据,而是用它来加密DEK。DEK才是真正干活儿的密钥,用完就销毁,临时存在内存里。
非对称密钥:公钥加密、私钥解密
非对称密钥,是一对儿:公钥满天飞,私钥死死藏好。你用公钥加密,只有对应的私钥能解开。反过来,私钥签名,公钥验签。这玩意的计算开销比对称加密大两三个数量级,但解决了一个关键问题——密钥分发。
你想想看,对称密钥你俩要共享钥匙,网络传输那把钥匙就是风险。非对称密钥你只需要让对方拿到你的公钥,私钥永远不出机器。安全边界一下子就清晰了。
| 对比维度 | 对称密钥 | 非对称密钥 |
|---|---|---|
| 密钥个数 | 1个 | 公钥+私钥,两个 |
| 加密速度 | 快(~1 GB/s) | 慢(~1 MB/s) |
| 密钥长度 | 128~256位 | 2048~4096位(RSA)或256位(ECC) |
| 典型用途 | 数据加密、对称加密 | 密钥交换、数字签名、证书 |
| 抗量子能力 | 强(AES可扩展) | 弱(RSA/ECC易被Shor算法破解) |
| KMS典型算法 | AES, SM4 | RSA, ECDSA, SM2 |
KMS中的密钥类型选择
这两种密钥在KMS里怎么选?取决于你遇到什么场景。我画了一张图帮你理清思路——
实际场景中的搭配策略
在真实业务里,你不会只用一种。举个我经手过的支付数据加密项目:
- 信封加密:先用非对称密钥(RSA-2048)加密一个随机生成的对称密钥(DEK)。
- 然后用这个对称密钥去加密实际的交易数据(AES-256-GCM)。
- 把加密后的对称密钥和密文一起存到数据库里。
- 解密时先拿私钥解开外层对称密钥,再用它解密数据。
这样做的好处很明显:对称密钥只存在内存里,用完就丢;而私钥始终躺在KMS里,谁都没法偷走。公钥甚至可以直接硬编码在客户端代码中,根本不怕泄露。
KMS中两类密钥的典型操作
在阿里云KMS、AWS KMS这些平台上,你会看到两类密钥各自有独立的管理操作:
| 操作 | 对称密钥 | 非对称密钥 |
|---|---|---|
| 生成密钥 | CreateKey (Spec=Symmetric) | CreateKey (Spec=RSA_2048 / EC_P256) |
| 加密 | Encrypt (传入密钥ID) | AsymmetricEncrypt (传入公钥ID) |
| 解密 | Decrypt (传入密钥ID) | AsymmetricDecrypt (传入私钥ID) |
| 签名 | 不支持 | Sign (ECDSA/RSA-PSS) |
| 验签 | 不支持 | Verify |
| 轮换 | 自动轮换(按月/年) | 手动或自动(支持多版本) |
| 导出公钥 | 不允许 | GetPublicKey |
总结一下
对称密钥和非对称密钥,一个像家里的挂锁,一个像保险柜的双人认证。挂锁(对称)速度快,但你把钥匙给别人时要冒风险;保险柜(非对称)安全等级高,但每次开柜都要花时间做校验。KMS帮你把这两套体系整合到一起——你只需要在控制台选好密钥类型,底层的安全存储、自动轮换、访问控制都由平台搞定。
实际用的时候,记住一句话:想清楚要不要“私钥出域”,信号和数据的量有多大,然后对照上面的表格选就对了。下一模块我们会深入信封加密的具体实现,到时候你会看到这两类密钥如何协作——先不急,先把基础打牢。