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”。这条链一旦建立,后续迁移时就能快速定位影响面。

密码资产盘点:从采集到依赖关系地图 静态扫描 代码 / 配置 / 镜像 关键字与依赖版本 RSA · DES · MD5 · TLS1.0 OpenSSL / GmSSL 版本 动态探测 握手 / 端口 / 服务 实际协商结果 Cipher Suite · 协议版本 SSH 算法列表 密钥与证书清点 KMS / HSM / 证书库 元数据与有效期 用途 · 轮换 · 签名算法 吊销状态 · 密钥用法 依赖关系建模 业务系统 → 密码要素 调用链与影响面 模块 · 域名 · 分区 第三方服务边界 统一密码资产清单(示例字段) 资产ID · 类型 · 算法/协议 · 密钥长度 · 用途 · 存储位置 · 所属系统 · 负责人 · 风险等级 · 迁移优先级 示例:CRY-014 | 对称 | AES-128-CBC | 128 | 数据加密 | KMS-A | 订单服务 | 张工 | 中 | P2 依赖关系链示例:一次算法替换的影响路径 订单服务 业务模块 支付网关 TLS 1.2 RSA-2048 证书 签名算法 SHA-256 内部 CA 签发与吊销 HSM 私钥分区 盘点输出必须回答的三个问题: ① 哪些资产已不安全或即将过期? ② 替换一个算法会波及哪些系统、证书和协议? ③ 哪些依赖属于第三方或不可控边界? 只有清单没有依赖关系,迁移时仍会“拆东墙补西墙”;只有依赖关系没有风险分级,则无法排定优先级。

三、如何判断盘点的完整性

盘点不是一次性动作,而是一个持续收敛的过程。可以用三个指标衡量完整性:

  • 覆盖率:已登记密码资产的应用系统数量 / 全部应用系统数量。目标应逐步达到 100%,至少覆盖所有对外暴露和涉及敏感数据的系统。
  • 可追溯率:能够从任一算法或证书反查到所属系统、负责人和依赖链的比例。可追溯率低,说明依赖关系建模不足。
  • 风险标注率:已标注风险等级和迁移优先级的资产比例。没有风险标注的清单只是台账,不是决策依据。
盘点时建议同时记录“当前状态”和“目标状态”。例如当前为 RSA-2048 + SHA-256,目标为 SM2 + SM3;当前为 TLS 1.0,目标为 TLS 1.3。这样清单天然就是迁移路线图的输入。

四、常见陷阱与处理建议

陷阱一:只扫代码,不扫运行时。代码中可能已经删除了旧算法,但配置中心、环境变量或容器启动参数仍保留旧套件。处理方式是静态扫描与动态探测交叉验证,以运行时协商结果为准。

陷阱二:忽略密钥的“影子副本”。同一把密钥可能同时存在于 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

完成这张表后,下一步才是制定迁移策略。盘点的价值在于:它把“我们用了什么密码”从模糊印象变成可查询、可排序、可追责的事实。没有这张地图,混合密码体系过渡就会在替换过程中不断遇到“还有哪里在用旧算法”的意外。