3. 密钥管理基础:非对称加密原理、公钥/私钥对生成与存储安全策略
在 Cosign 驱动的镜像供应链信任体系中,密钥管理是信任边界的基石。Cosign 使用非对称加密对镜像进行签名和验证,私钥用于签名,公钥用于验证。本章将深入讲解非对称加密原理、密钥对生成、存储安全策略以及环境变量与文件系统的实践。
3.1 非对称加密原理与 Cosign 签名流程
非对称加密使用一对密钥:私钥(Private Key)和公钥(Public Key)。私钥必须严格保密,公钥可以公开分发。Cosign 的签名流程如下:
- 签名者使用自己的私钥对镜像摘要(Digest)进行签名,生成签名文件。
- 验证者获取签名者的公钥,对签名进行解密,并与镜像摘要比对。
- 若解密后的摘要与镜像摘要一致,则证明镜像未被篡改且确实由私钥持有者签名。
核心概念:Cosign 不直接签名镜像层数据,而是签名镜像的 SHA256 摘要,确保签名体积小且验证高效。
3.2 使用 Cosign 生成密钥对
Cosign 提供 cosign generate-key-pair 命令一键生成密钥对。生成的密钥文件默认保存在当前目录:
- 私钥文件:
cosign.key(加密存储,需密码保护) - 公钥文件:
cosign.pub(明文存储,可公开)
# 生成密钥对(交互式输入密码)
cosign generate-key-pair
# 输出示例:
Enter password for private key:
Enter password for private key again:
Private key written to cosign.key
Public key written to cosign.pub
最佳实践:生成密钥对时,密码强度至少 16 位,包含大小写字母、数字和特殊字符。Cosign 使用 RSA 或 ECDSA 算法,默认使用 ECDSA P-256。
3.3 密钥存储安全策略
私钥是信任链的核心资产,必须采用分层安全策略。以下表格对比了不同存储方式的安全等级与适用场景:
| 存储方式 | 安全等级 | 适用场景 | 风险点 |
|---|---|---|---|
| 本地文件系统 | 低 | 开发测试环境 | 文件泄露、未加密存储 |
| 环境变量 | 中 | CI/CD 临时使用 | 日志泄露、进程内存转储 |
| 密钥管理服务(KMS) | 高 | 生产环境、合规要求 | 网络依赖、成本较高 |
| 硬件安全模块(HSM) | 极高 | 金融、政府等高安全场景 | 部署复杂、成本高 |
安全警告:切勿将私钥文件提交到 Git 仓库、存储在公开的云存储桶或未加密的共享目录中。私钥泄露意味着信任链完全失效。
3.4 环境变量与文件系统实践
Cosign 支持通过环境变量传递私钥密码,避免交互式输入,适合自动化流水线。常用环境变量包括:
COSIGN_PASSWORD:私钥解密密码COSIGN_KEY:私钥文件路径(默认cosign.key)COSIGN_PUBLIC_KEY:公钥文件路径(默认cosign.pub)
# 使用环境变量签名镜像
export COSIGN_PASSWORD="your-strong-password"
cosign sign --key cosign.key your-registry/your-image:tag
# 使用环境变量验证镜像
cosign verify --key cosign.pub your-registry/your-image:tag
文件系统安全建议:
- 私钥文件权限设置为
600(仅所有者可读写) - 公钥文件权限设置为
644(所有者读写,其他人只读) - 使用
chmod 600 cosign.key和chmod 644 cosign.pub设置权限 - 在 CI/CD 中,私钥密码通过 Secret 变量注入,避免明文写入配置文件
3.5 密钥轮转与吊销
密钥应定期轮转,以降低长期泄露风险。Cosign 支持以下密钥管理操作:
| 操作 | 命令/方法 | 说明 |
|---|---|---|
| 生成新密钥对 | cosign generate-key-pair |
生成新密钥,旧密钥需手动废弃 |
| 公钥分发 | 上传至公开密钥服务器或嵌入 CI/CD 配置 | 确保验证者获取最新公钥 |
| 密钥吊销 | 通过 Rekor 透明日志记录吊销声明 | 吊销后旧签名仍可验证,但信任度降低 |
轮转建议:生产环境密钥每 90 天轮转一次;开发环境每 180 天轮转一次。轮转后,旧公钥应保留一段时间以验证历史签名。