2. 密码资产盘点与密码学基础

迁移治理的第一步不是改代码,而是把“用了什么密码”查清楚。密码资产盘点要回答四个问题:哪些系统在用密码、用的是什么算法与参数、密钥和证书存在哪里、被哪些协议和调用链依赖。只有把算法、密钥、证书、协议四层关系串起来,才能判断迁移影响面。本节先补齐必要的密码学基础,再给出可执行的盘点方法。

一、RSA与ECC的数学原理差异

RSA的安全性建立在“大整数分解困难”之上。生成密钥时选两个大素数 p、q,计算 n=p·q 与欧拉函数 φ(n)=(p−1)(q−1),再选公钥指数 e(常用 65537)满足 gcd(e,φ(n))=1,私钥指数 d≡e⁻¹ mod φ(n)。公钥为 (n,e),私钥为 (n,d)。加密为 c=m^e mod n,解密为 m=c^d mod n。签名则用私钥运算、公钥验证。RSA 的密钥长度必须足够大,2048 位是当前最低可用基线,1024 位已不安全。

ECC 的安全性建立在“椭圆曲线离散对数困难”之上。在有限域 GF(p) 上定义曲线 y²=x³+ax+b,选取基点 G 与阶 n,私钥是随机整数 d,公钥是点 Q=d·G。已知 d 和 G 求 Q 容易,已知 Q 和 G 反推 d 困难。ECC 用更短的密钥达到同等强度:256 位 ECC 约等于 3072 位 RSA,384 位 ECC 约等于 7680 位 RSA。这意味着迁移到 ECC 后,证书体积、握手计算量和带宽占用都会下降,但曲线选择必须合规,例如 P-256、P-384 或 Curve25519,避免使用已受质疑的曲线。

RSA 与 ECC 密钥结构及证书依赖关系 RSA 密钥结构 公钥 (n, e) n = p·q,e = 65537 私钥 (n, d) d ≡ e⁻¹ mod φ(n) 配对 安全基础:大整数分解困难 2048 位为最低基线,1024 位已淘汰 密钥体积大,握手计算开销高 ECC 密钥结构 公钥 Q = d·G 曲线上的点坐标 (x, y) 私钥 d 随机整数,保密存储 标量乘 安全基础:椭圆曲线离散对数困难 256 位 ≈ 3072 位 RSA 强度 密钥短、计算快、带宽占用低 等效安全强度对照(示例参考值) RSA-1024 ≈ 80 位(不安全) RSA-2048 ≈ 112 位(当前基线) ECC-256 ≈ 128 位 证书格式与协议依赖 X.509 证书 Subject / Issuer / 有效期 SubjectPublicKeyInfo 算法 OID + 公钥比特串 签名算法字段 sha256WithRSA / ecdsa-with-SHA256 协议依赖 TLS / SSH / IPsec / 代码签名

二、密钥与证书的存储结构

RSA 私钥常见格式有 PKCS#1(-----BEGIN RSA PRIVATE KEY-----)和 PKCS#8(-----BEGIN PRIVATE KEY-----),后者更通用,可封装不同算法。ECC 私钥通常以 PKCS#8 或 SEC1 格式存储。公钥在证书中通过 SubjectPublicKeyInfo 结构承载,其中 algorithm 字段用 OID 标识算法:RSA 为 1.2.840.113549.1.1.1,EC 为 1.2.840.10045.2.1,曲线 P-256 对应 OID 1.2.840.10045.3.1.7。盘点时读取这些 OID,就能准确识别算法与曲线,而不是靠文件名猜测。

证书本身是 X.509 结构,关键字段包括版本、序列号、签名算法、颁发者、有效期、主体、公钥信息、扩展项和签名值。迁移关注点在于:签名算法字段是否仍为 SHA-1 或 RSA,公钥算法是否为 RSA,以及证书链中是否混用不同算法。一个常见陷阱是根证书或中间 CA 仍用 RSA,即使叶子证书换成 ECC,链验证仍会依赖 RSA,迁移必须整链考虑。

三、协议依赖与资产清单方法

密码资产不是孤立存在的,它被协议和调用链引用。TLS 服务端配置决定使用哪些证书和密钥;SSH 主机密钥决定登录信任;IPsec 和 VPN 使用 IKE 协商算法;代码签名和文档签名则依赖本地密钥库。盘点时要沿着“服务→协议→证书/密钥→算法”的路径逐层展开。

可执行的盘点方法分四步。第一步,确定扫描范围:主机、容器、负载均衡、网关、数据库、消息队列、代码仓库和 CI/CD 流水线。第二步,采集证据:对文件系统搜索常见密钥与证书扩展名,对运行中服务抓取 TLS 握手信息,对配置中心导出协议配置。第三步,解析算法参数:用 OpenSSL 读取证书和密钥的算法、曲线、位数、有效期。第四步,建立资产台账并标注依赖关系。

# 示例:读取证书算法与公钥信息
openssl x509 -in server.crt -noout -text | grep -E "Signature Algorithm|Public Key Algorithm|Public-Key"

# 示例:读取私钥类型与位数
openssl pkey -in server.key -noout -text | head -n 5

# 示例:探测服务端 TLS 协商结果
openssl s_client -connect api.example.com:443 -servername api.example.com </dev/null 2>/dev/null | openssl x509 -noout -text | grep "Signature Algorithm"

台账字段建议包含:资产编号、所属系统、资产类型(证书/密钥/协议配置)、算法、曲线或位数、存储位置、有效期、依赖协议、负责人、迁移优先级。优先级可按“对外暴露且使用弱算法”最高、“内部使用但链依赖弱算法”次之、“已使用合规算法”最低来划分。

盘点阶段不要修改任何生产配置。先只读采集,确认资产清单完整后,再进入影响评估和迁移方案设计。对无法自动识别的硬件加密机、HSM 和嵌入式设备,要单独登记并安排人工核查。
常见遗漏点:容器镜像内嵌的证书、Java keystore(.jks)与 truststore、Node.js 的 .pem 文件、Kubernetes Secret 中的 tls.crt/tls.key、以及 CI 流水线中用于签名的私钥。这些位置往往不在传统主机扫描范围内,却直接决定迁移是否彻底。

完成盘点后,应得到一张可追溯的密码资产地图:每个证书和密钥都能对应到具体服务、协议和负责人,每个弱算法都能定位到影响范围。这张地图是后续迁移排期、灰度切换和回滚方案的基础,也是衡量迁移治理是否闭环的核心依据。