很多系统已经使用 AES、RSA 或国密算法加密数据,却仍然把密钥写在配置文件、环境变量甚至代码里。算法没有问题,真正危险的是:谁能拿到密钥、密钥在哪里生成、如何轮换、泄露后如何处置。
KMS 和 HSM 正是为了解决这些问题而出现的。两者经常一起部署,但职责并不相同:
KMS 负责管理密钥,HSM 负责在硬件安全边界内保护和使用密钥。

一、KMS 是什么
KMS 全称 Key Management Service/System,密钥管理服务或密钥管理系统。
它不是一个单纯保存密钥的数据库,而是一套围绕密码学密钥建立的管理平台,通常包含以下能力:
生成或导入对称密钥、非对称密钥;
启用、禁用、轮换、归档和删除密钥;
提供加密、解密、签名、验签等 API;
通过 IAM、RBAC 或策略控制谁能使用哪把密钥;
记录调用者、时间、来源、操作类型和结果;
管理密钥版本、用途、有效期和删除保护;
与云硬盘、对象存储、数据库、消息队列等服务集成。
从业务应用的角度看,KMS 最重要的价值不是“替你执行一次 AES”,而是把密钥从业务代码中抽离出来,形成统一的权限、审计和生命周期管理边界。
KMS 管理的不是普通密码
KMS 主要管理的是密码学密钥,例如:
AES 数据加密密钥;
RSA、ECC、SM2 私钥;
HMAC 密钥;
证书私钥和签名密钥;
用于保护其他密钥的主密钥。
数据库账号、第三方 API Token、OAuth Client Secret 更接近“凭据”或“机密”。它们通常由 Secrets Manager、Vault KV 等系统管理。不过,今天很多云厂商已经把密钥管理、凭据管理、证书和 HSM 能力整合到同一产品体系中,产品名称与技术边界不一定完全一致。
二、HSM 是什么
HSM 全称 Hardware Security Module,硬件安全模块,国内也常称为密码机。
HSM 是专门执行密码学操作的硬件设备或硬件集群。其核心目标是:
让高价值密钥在受保护的硬件边界内生成、保存和使用,尽量避免明文密钥离开设备。
典型能力包括:
使用硬件随机数生成密钥;
保存根密钥、签名私钥和主密钥;
在设备内部执行加密、解密、签名和验签;
控制密钥是否允许导出;
提供防拆、防篡改和异常清除机制;
支持操作员角色分离、双人双控和审计;
通过 PKCS#11、JCE、CNG 或厂商 SDK 对外提供能力。
HSM 常用于:
银行、支付和银行卡 PIN 系统;
CA、电子签章和证书私钥保护;
代码签名、固件签名;
TLS 根私钥和高价值签名密钥;
数据库透明加密的根密钥;
政企国密、等保和行业监管场景。
HSM 不等于绝对安全
HSM 能显著提高密钥提取和物理攻击的难度,但它不能解决所有问题。
如果攻击者盗取了一个拥有“签名权限”的应用身份,即使无法导出私钥,也可能持续调用 HSM 完成非法签名。因此,HSM 仍然需要配合:
最小权限;
强身份认证;
调用频率限制;
审批与双人双控;
异常行为监控;
完整审计日志。
硬件保护的是密钥材料,不会自动修复错误的权限设计。
三、KMS 和 HSM 到底是什么关系
KMS 更接近“控制面”,负责策略和生命周期;HSM 更接近“密码运算与根信任层”,负责安全保存和使用密钥。
常见组合是:
业务应用 → KMS → HSM 集群
但并非所有 KMS 都为每个客户提供独享 HSM。实际产品可能是:
软件密钥保护;
多租户共享 HSM;
专属 KMS 实例,共享或隔离的 HSM 资源;
独享 Cloud HSM;
企业自建 KMS 连接本地 HSM。
因此,看到“KMS 底层使用 HSM”时,还要继续确认:
是否独享硬件;
租户隔离边界是什么;
密钥能否导出;
密钥由谁生成;
认证覆盖的是哪个软硬件版本;
灾备副本由谁控制。
四、密钥层级:为什么不能用一把密钥加密所有数据
企业系统通常不会让 KMS 主密钥直接加密每一条业务数据,而是采用分层密钥结构。
1. 主密钥 CMK / KEK
不同厂商名称略有差异,常见叫法包括:
CMK:Customer Master Key;
KMS Key:KMS 管理密钥;
KEK:Key Encryption Key,密钥加密密钥。
这类密钥通常长期保存在 KMS 或 HSM 中,用于保护下一级数据密钥。
2. 数据密钥 DEK
DEK 全称 Data Encryption Key,用于真正加密业务数据。它通常:
由 KMS 生成;
生命周期较短;
每个文件、对象、租户或数据分片使用不同 DEK;
明文只在应用内存中短暂出现;
持久化时必须先被主密钥加密。
3. 信封加密
这种“主密钥加密数据密钥,数据密钥加密业务数据”的模式称为 Envelope Encryption,信封加密。

数据库或对象存储中通常保存:
业务密文;
被 KMS 主密钥加密后的 DEK;
Nonce 或 IV;
算法标识;
主密钥 ID 和版本号;
必要的认证标签和上下文信息。
信封加密有三个直接好处:
大块数据在本地加密,性能更高;
KMS 不需要接收和保存全部业务数据;
轮换主密钥时,可以只重新包装 DEK,而不必立即重加密所有业务数据。
五、KMS 管理的是完整生命周期
一把密钥不是创建后永远使用。正规的 KMS 至少需要覆盖以下阶段:

生成或导入
密钥可以由 KMS/HSM 生成,也可以通过 BYOK 导入。生成位置决定了谁曾经接触过明文密钥。
启用和使用
密钥必须限定用途。用于签名的密钥不应同时用于数据加密;生产与测试也不应共享同一把密钥。
轮换
轮换通常是生成新版本,新数据使用新版本加密,旧版本继续用于解密历史数据。轮换不等于立即删除旧密钥。
禁用、归档与删除
删除密钥可能导致历史数据永久无法恢复。因此云 KMS 通常提供延迟删除、删除保护或计划删除机制。
泄露处置
密钥泄露后不能只“换一把新密钥”,还应:
停用受影响版本;
查清调用和数据影响范围;
生成新版本;
重加密或重新包装受影响数据;
吊销相关凭据和权限;
保留审计证据。
六、云上常见的五种密钥控制模式
1. 云厂商默认密钥
由云厂商创建和管理,用户只需要为云硬盘、对象存储或数据库开启加密。
优点是简单、成本低;缺点是控制能力有限,通常不适合复杂的应用层字段加密和跨云场景。
2. 客户管理密钥
用户在云 KMS 中创建密钥,自行配置权限、轮换、审计和删除策略。密钥材料仍可能由云厂商的 KMS/HSM 生成和托管。
这是大多数企业云上业务的主流方案。
3. BYOK
BYOK 即 Bring Your Own Key。密钥在客户控制的环境中生成,再通过安全包装导入云 KMS。
它增强了密钥来源控制,但导入后密钥通常仍由云 KMS 托管和使用。BYOK 不等于密钥永远不进入云环境。
4. HYOK / 外部密钥
HYOK 可理解为 Hold Your Own Key。密钥继续保留在客户自己的 HSM 或外部 KMS 中,云服务通过受控接口请求密码运算。
控制权更强,但会带来明显的网络延迟、可用性和运维压力。一旦外部 KMS 不可用,依赖它的云业务可能无法解密数据。
5. 独享 Cloud HSM
客户租用独享的云 HSM 设备或分区,自行管理用户、密钥和密码操作。
它提供更强的隔离和控制,但集成、容量规划、集群、备份和合规责任也更多地落到客户团队身上。
七、KMS 与 HSM 的部署方案
方案一:托管 KMS
适合绝大多数公有云应用。
应用 → 云 KMS API → 云厂商管理的密码模块或 HSM
优势:
上线快;
与云服务深度集成;
自动处理集群、补丁和硬件故障;
IAM 和审计能力完整;
可从低成本规格起步。
局限:
依赖云厂商;
跨云迁移成本较高;
密钥控制模型受产品能力限制;
极端场景下难以满足“密钥永不离开本地”。
方案二:专属 KMS 或 HSM 支撑的 KMS
适合对租户隔离、国密、监管认证和吞吐有明确要求的企业。
它通常比普通按量 KMS 贵很多,因为购买的不只是 API,还包括:
专属或隔离的密码资源;
高可用密码机集群;
认证和合规能力;
密钥备份与恢复机制;
更高的吞吐和服务等级。
方案三:独享 Cloud HSM
适合需要直接使用 PKCS#11、JCE 等接口,或者需要完全控制 HSM 用户和密钥的团队。
此时云厂商主要负责硬件托管,客户需要承担更多密码机管理责任。
方案四:自建 KMS
常见做法包括自建 Vault、OpenBao、企业 KMS 或其他密钥服务。
自建方案可以解决多云、混合云和数据主权问题,但它首先是一套软件控制面。除非连接真实 HSM,否则不能获得硬件级密钥保护。
生产级自建至少需要:
3 个或更多高可用节点;
全链路 TLS 和机器身份认证;
严格的策略与管理员权限分离;
独立、不可篡改的审计日志;
密钥和存储快照备份;
定期恢复演练;
解封、根密钥和恢复密钥的离线保管;
版本升级、漏洞修复和应急预案。
因此,自建的主要成本通常不是服务器,而是安全团队和长期运维能力。
方案五:自建 KMS + 本地 HSM
这是控制力最强、同时也最复杂的企业方案:
业务应用 → 企业 KMS 集群 → 本地 HSM 集群
适合金融、支付、政企、CA 和大型集团。它要求团队同时具备应用安全、密码工程、硬件运维、灾备和合规能力。
八、选型时真正应该比较什么

1. 威胁模型
先确定主要防谁:
防止开发者在代码仓库中泄露密钥;
防止数据库备份泄露;
防止单台应用服务器被入侵;
防止云账号管理员滥用权限;
防止物理拆机和密钥提取;
防止内部人员单独完成高风险操作。
如果只是解决“密钥不能写在代码里”,托管 KMS 已经足够;如果需要抵御物理攻击和高权限管理员导出根密钥,则需要评估 HSM、双人双控和不可导出密钥。
2. 合规要求
需要确认的不是“产品宣传说支持合规”,而是:
认证标准和等级;
认证证书是否仍有效;
认证覆盖的具体型号、固件和部署模式;
是否支持所需国密算法;
密钥生成、备份、销毁是否满足行业规则;
是否要求密码机双机或多机集群。
FIPS 140-3 针对密码模块的设计和安全边界提出要求,但一个通过认证的模块不代表整个业务系统天然安全。权限、网络、应用和流程仍然需要单独设计。
3. 性能和延迟
不要让应用为每一条大数据都远程调用 KMS 加密。更合理的方式是:
使用信封加密;
KMS 只处理小体积 DEK;
大数据由应用或存储服务本地加密;
在可控时间内短暂缓存 DEK;
对签名和解密接口设置并发与限流。
选型时要测试:
单次调用延迟;
峰值 QPS;
批量接口;
跨可用区、跨地域和跨云网络延迟;
KMS 故障时业务的降级行为。
4. 可用性和灾难恢复
KMS 一旦不可用,系统可能仍能写入密文,却无法解密旧数据,甚至无法启动。
必须确认:
是否支持多可用区;
HSM 是否为集群;
密钥是否有受保护的备份;
跨地域灾备如何实现;
密钥删除后能否恢复;
灾备切换是否需要人工审批;
是否定期做过真实恢复演练。
5. 集成能力
重点看:
SDK、REST API、PKCS#11、JCE、KMIP 等接口;
是否与数据库、对象存储、Kubernetes 和 CI/CD 集成;
是否支持机器身份而不是长期 AccessKey;
是否支持密钥导入、导出或迁移;
审计日志能否接入 SIEM;
是否支持自动轮换和版本选择。
6. 成本模型
不要只比较“每月实例费”。KMS/HSM 的总成本通常包括:
密钥数量;
API 调用次数;
专属 KMS 实例;
HSM 设备或分区;
跨地域和跨云网络;
日志存储;
集成开发;
备份与灾备;
安全运维和合规审计。
普通按量 KMS 可能很便宜,真正昂贵的通常是专属实例、独享 HSM 和监管级高可用方案。
九、不同场景的推荐方案
对大多数中小团队的实际建议
一个稳妥且不过度设计的起点是:
使用云厂商托管 KMS;
为不同环境、业务域建立独立客户管理密钥;
使用信封加密,不直接让主密钥加密大块数据;
应用通过实例角色、工作负载身份等短期身份访问 KMS;
开启审计日志、告警、删除保护和自动轮换;
定期测试历史密文和备份能否恢复;
只有在合规或威胁模型明确要求时,再升级到专属 KMS 或独享 HSM。
十、最容易踩的坑
把密钥写进代码或镜像
即使仓库是私有的,也可能通过日志、构建缓存、镜像层和离职人员账号泄露。
把“环境变量”当作最终密钥系统
环境变量比硬编码好,但进程、调试工具、崩溃转储和运维平台仍可能读取它。环境变量适合传递短期凭据,不应成为长期主密钥的最终归宿。
一把密钥覆盖所有系统
一把密钥泄露会扩大影响范围,也无法做到按业务、租户和环境撤销权限。
只轮换密钥,不保存版本信息
如果密文没有保存密钥 ID 和版本号,轮换后可能无法判断应该用哪个版本解密。
轮换后立即删除旧密钥
新数据已经使用新密钥,不代表历史数据已经完成重加密。删除旧密钥可能造成永久数据丢失。
认为使用 HSM 就不需要权限控制
攻击者不一定要导出私钥,只要能够调用签名或解密接口,也可能造成严重后果。
没有恢复演练
“已经备份”不代表“能够恢复”。密钥系统的灾备必须定期验证,否则真正故障时才会发现备份不可用、恢复密钥丢失或权限流程不完整。
十一、落地检查清单
在生产环境上线前,至少确认以下事项:
[ ] 密钥未硬编码在源码、镜像和普通配置文件中;
[ ] 生产、测试和开发环境使用不同密钥;
[ ] 加密、签名和 HMAC 使用不同用途的密钥;
[ ] 应用使用短期身份访问 KMS;
[ ] 权限精确到密钥和操作类型;
[ ] 使用信封加密处理大块数据;
[ ] 密文保存密钥 ID、版本、算法和 Nonce;
[ ] 开启密钥删除保护和操作审计;
[ ] 建立轮换、泄露处置和重加密流程;
[ ] 配置 KMS/HSM 高可用和灾备;
[ ] 做过密钥和业务数据的联合恢复演练;
[ ] 对 HSM 认证范围和部署型号完成核验。
总结
KMS 和 HSM 不是互相替代的产品:
KMS 解决“如何管理密钥”:生命周期、权限、审计、轮换和 API;
HSM 解决“密钥在哪里安全地生成和使用”:硬件隔离、防篡改和不可导出;
信封加密解决“如何低成本地加密大量业务数据”;
合适的选型取决于威胁模型和合规要求,而不是一味追求最贵的硬件。
对大多数系统而言,托管 KMS 加信封加密已经是安全性、成本和维护难度之间比较合理的平衡。只有当业务明确涉及高价值私钥、金融支付、CA、政企国密或严格监管时,才有必要进一步选择专属 KMS、独享 HSM,甚至自建 KMS 与 HSM 集群。
参考资料
NIST FIPS 140-3:Security Requirements for Cryptographic Modules
NIST SP 800-57 Part 1 Rev.5:Recommendation for Key Management
腾讯云开发者社区文章属于作者实践分享,适合用于扩展选型思路;涉及具体产品能力、认证和价格时,应以各厂商最新官方文档与合同为准。
评论