2. 密码资产盘点
混合密码体系过渡工程的第一步不是“换算法”,而是“看清家底”。如果不知道系统里到底用了哪些对称算法、哪些非对称算法、密钥存在哪里、证书由谁签发、协议在哪些链路上协商,那么任何迁移计划都只是猜测。密码资产盘点的目标,是把散落在代码、配置、证书库、硬件模块和第三方服务中的密码要素,整理成一张可追踪、可评估、可排序的资产地图。
一、密码资产不只是“算法名称”
很多团队第一次盘点时,只统计“用了 AES 还是 3DES”“用了 RSA 还是 ECC”。这远远不够。一个完整的密码资产至少包含六类对象:
- 对称算法与模式:AES-128-GCM、AES-256-CBC、SM4-CBC、3DES-EDE-CBC 等,必须记录算法、密钥长度、工作模式、填充方式、IV/Nonce 生成策略。
- 非对称算法与参数:RSA-2048、RSA-4096、ECDSA P-256、SM2、Ed25519 等,需记录曲线、签名/加密用途、哈希配对。
- 密钥:密钥的用途(数据加密、签名、密钥协商、HMAC)、生命周期状态(生成、激活、轮换、归档、销毁)、存储位置(KMS、HSM、文件、环境变量、代码硬编码)。
- 证书:X.509 证书的 Subject、Issuer、有效期、密钥用法、扩展密钥用法、签名算法、吊销状态(CRL/OCSP)。
- 协议:TLS/SSL 版本、密码套件、SSH 算法列表、IPSec/IKE 参数、S/MIME、Kerberos 加密类型。
- 依赖关系:哪个业务模块调用哪个密钥、哪个证书绑定哪个域名、哪个协议依赖哪个算法库版本。
只有把“算法—密钥—证书—协议—依赖”串成链,才能判断一次算法替换会波及哪些系统。
二、盘点的四个实际动作
动作一:静态扫描。对代码仓库、配置文件、容器镜像、IaC 模板进行关键字与模式匹配。例如搜索 RSA、DES、MD5、SHA1、SSLv3、TLSv1.0、BEGIN CERTIFICATE、BEGIN PRIVATE KEY。同时用依赖分析工具识别 OpenSSL、BouncyCastle、GmSSL 等库的版本,因为库版本决定了可用算法和默认安全级别。
动作二:动态探测。对运行中的服务做握手探测,记录实际协商出的协议版本和密码套件。例如对 HTTPS 端口执行 openssl s_client -connect host:443 -tls1_2,观察返回的 Cipher 与 Server Temp Key。对 SSH 服务执行 ssh -Q cipher 或使用扫描工具枚举算法列表。动态探测能发现“代码里写了 AES,但实际协商成 3DES”这类配置漂移。
动作三:密钥与证书清点。从 KMS/HSM 导出密钥元数据(不导出密钥明文),记录别名、用途、创建时间、轮换策略。从证书库导出所有证书,解析有效期和签名算法。特别关注自签名证书、过期证书、SHA-1 签名证书和密钥用法为 digitalSignature, keyEncipherment 的旧证书。
动作四:依赖关系建模。把上述结果关联到业务系统。例如“订单服务 → 调用支付网关 → 使用 TLS 1.2 + RSA-2048 证书 → 证书由内部 CA 签发 → 私钥存于 HSM 分区 A”。这条链一旦建立,后续迁移时就能快速定位影响面。
三、如何判断盘点的完整性
盘点不是一次性动作,而是一个持续收敛的过程。可以用三个指标衡量完整性:
- 覆盖率:已登记密码资产的应用系统数量 / 全部应用系统数量。目标应逐步达到 100%,至少覆盖所有对外暴露和涉及敏感数据的系统。
- 可追溯率:能够从任一算法或证书反查到所属系统、负责人和依赖链的比例。可追溯率低,说明依赖关系建模不足。
- 风险标注率:已标注风险等级和迁移优先级的资产比例。没有风险标注的清单只是台账,不是决策依据。
四、常见陷阱与处理建议
陷阱一:只扫代码,不扫运行时。代码中可能已经删除了旧算法,但配置中心、环境变量或容器启动参数仍保留旧套件。处理方式是静态扫描与动态探测交叉验证,以运行时协商结果为准。
陷阱二:忽略密钥的“影子副本”。同一把密钥可能同时存在于 KMS、备份文件、测试环境和开发人员本地。盘点时必须记录所有副本位置,并在迁移前确认副本是否可轮换或销毁。
陷阱三:证书清单不包含私钥归属。证书本身是公开的,真正需要保护的是私钥。盘点证书时必须同时记录私钥存储位置、访问权限和是否可导出。如果私钥不可导出且无法轮换,迁移方案必须提前设计。
陷阱四:第三方依赖不可见。SaaS、支付网关、身份提供商可能使用自己的密码体系。盘点时应记录接口协议、证书指纹和算法要求,并确认对方是否支持目标算法。对于不可控边界,应制定降级或隔离策略。
五、可直接使用的盘点记录表示例
下面给出一个最小可用的密码资产记录表结构,团队可根据自身规模扩展字段。示例数据为教学假设,不代表任何真实系统。
| 资产ID | 类型 | 算法/协议 | 密钥长度 | 用途 | 存储位置 | 所属系统 | 风险 | 迁移优先级 |
|---|---|---|---|---|---|---|---|---|
| CRY-001 | 对称 | AES-128-CBC | 128 | 数据加密 | KMS-A | 订单服务 | 中 | P2 |
| CRY-002 | 非对称 | RSA-2048 | 2048 | 签名 | HSM-1 | 支付网关 | 高 | P1 |
| CRT-003 | 证书 | X.509 / SHA-256 | — | 服务端认证 | 证书库 | API 网关 | 低 | P3 |
| PRT-004 | 协议 | TLS 1.0 | — | 传输加密 | 配置中心 | 旧版门户 | 高 | P1 |
完成这张表后,下一步才是制定迁移策略。盘点的价值在于:它把“我们用了什么密码”从模糊印象变成可查询、可排序、可追责的事实。没有这张地图,混合密码体系过渡就会在替换过程中不断遇到“还有哪里在用旧算法”的意外。