2. 签名链路基础:数字签名原理、公钥基础设施(PKI)、X.509证书结构
在IDP制品签名链路中,回滚机制的核心前提是可验证的签名链。如果签名本身无法被独立验证,回滚操作将面临信任崩塌的风险。本章从数字签名原理、PKI体系到X.509证书结构,逐层构建签名链路的技术基础。
2.1 数字签名原理
数字签名并非对原始数据进行“加密”,而是通过哈希摘要与非对称加密的组合,实现完整性、真实性和不可否认性。其核心流程如下:
- 签名方(Signer):对制品内容计算哈希值(如SHA-256),使用自己的私钥对哈希值加密,生成签名。
- 验证方(Verifier):使用签名方的公钥解密签名,得到原始哈希值;同时对收到的制品重新计算哈希值,两者比对。
- 结果:哈希一致则证明制品未被篡改,且签名确实来自私钥持有者。
回滚场景提示: 回滚时,验证方必须持有签名时使用的公钥。如果公钥已轮换或撤销,旧签名将无法验证,导致回滚失败。因此,签名链路必须保留历史公钥的时间戳锚定。
2.2 公钥基础设施(PKI)
PKI是数字签名的信任骨架。在IDP制品签名链路中,PKI解决了“公钥属于谁”的问题。没有PKI,攻击者可以伪造公钥,使回滚验证形同虚设。
| PKI组件 | 角色 | 在签名链路中的职责 |
|---|---|---|
| 证书颁发机构(CA) | 信任锚点 | 签发X.509证书,证明公钥与实体的绑定关系 |
| 注册机构(RA) | 身份审核 | 验证签名方身份,向CA提交证书请求 |
| 证书吊销列表(CRL) | 撤销状态 | 记录已失效的证书,回滚时需检查证书是否被吊销 |
| 在线证书状态协议(OCSP) | 实时验证 | 提供证书即时状态查询,比CRL更实时 |
| 证书存储库 | 历史归档 | 保存历史证书,支持回滚时的旧签名验证 |
回滚风险: 如果CA根证书过期或私钥泄露,整个信任链将崩溃。IDP必须设计根证书离线存储和交叉签名机制,确保回滚时仍能追溯信任。
2.3 X.509证书结构
X.509是PKI中最广泛使用的证书标准。每个证书包含以下核心字段,这些字段在签名验证和回滚决策中直接使用:
- 版本号(Version):通常为V3,支持扩展字段。
- 序列号(Serial Number):CA颁发的唯一标识,用于CRL吊销查询。
- 签名算法(Signature Algorithm):如sha256WithRSAEncryption,指定签名使用的哈希和加密算法。
- 颁发者(Issuer):签发该证书的CA名称。
- 有效期(Validity):
notBefore和notAfter,回滚时必须确认签名时间在有效期内。 - 主体(Subject):证书持有者身份,如制品签名服务名称。
- 公钥信息(Subject Public Key Info):包含算法和公钥值,是验证签名的直接依据。
- 扩展(Extensions):如密钥用法(Key Usage)、证书策略(Certificate Policies)、CRL分发点等。
2.4 证书链与信任锚
在IDP制品签名链路中,签名证书通常不是由根CA直接签发,而是通过中间CA签发,形成证书链:
根CA证书 (自签名, 信任锚)
└── 中间CA证书 (由根CA签发)
└── 制品签名证书 (由中间CA签发)
└── 制品签名 (由签名证书私钥生成)
验证时,验证方必须持有根CA证书作为信任锚,逐级验证证书链中每个证书的签名,直到制品签名证书。回滚场景下,如果中间CA证书已过期,但根CA仍在有效期内,且签名时间在中间CA证书有效期内,则签名仍然有效。
最佳实践: 在IDP中,建议将根CA证书离线存储,仅使用中间CA签发制品签名证书。回滚时,即使中间CA证书轮换,只要根CA不变,历史签名仍可验证。同时,所有证书和CRL应归档至不可变存储,防止回滚时因证书缺失导致验证失败。
2.5 签名链路在回滚中的关键约束
| 约束项 | 说明 | 回滚影响 |
|---|---|---|
| 时间有效性 | 签名时间必须在证书有效期内 | 回滚时必须保留签名时间戳,否则无法判断证书是否当时有效 |
| 证书吊销 | 签名时证书未被吊销 | 回滚时需查询历史CRL或OCSP响应,确认签名时刻的证书状态 |
| 算法兼容性 | 签名算法在验证时仍被支持 | 回滚时验证环境必须支持旧算法(如SHA-1可能已被弃用) |
| 密钥轮换 | 签名私钥可能已轮换 | 回滚时必须使用签名时的公钥,而非当前公钥 |
| 信任链完整性 | 证书链中所有证书均可验证 | 回滚时需保留完整的证书链,包括已过期的中间CA证书 |