深色模式
按体系组织:签名算法 → X.509 证书 → CA 运营 → 工程部署。
签名算法
参考:RFC 8032 EdDSA · RFC 8017 RSA-PSS
| 算法 | 密钥 | 特点 | 推荐 |
|---|---|---|---|
| Ed25519 | 32 byte | 确定性签名;快;侧信道友好 | 新项目首选 |
| RSA-PSS | ≥2048 bit | 广泛兼容;密钥大 | 遗留互操作 |
| ECDSA | P-256 等 | k 须随机且唯一;泄露可恢复私钥 | 谨慎使用 |
| DSA | 1024+ bit | 已过时 | 避免 |
| BLS | 配对曲线 | 签名聚合;区块链 | 特定场景 |
<ul>
<li>哈希-签名范式:先 H(m) 再签;预处理须一致</li>
<li>JWT 签名算法须在解码时硬编码白名单,禁 <code>alg: none</code></li>
</ul>
<p class="kb-ref">CTF:<a href="https://ctf-wiki.org/crypto/signature/rsa/rsa/" target="_blank" rel="noopener">RSA 签名</a> · <a href="https://ctf-wiki.org/crypto/signature/dsa/dsa/" target="_blank" rel="noopener">DSA</a></p>
X.509 证书
参考:RFC 5280 · CTF Wiki · 证书格式
证书字段
- Subject:持有者身份(CN、O、SAN 扩展)
- Issuer:签发 CA
- Validity:notBefore / notAfter
- SubjectPublicKeyInfo:公钥与算法 OID
- Extensions:SAN(多域名)、KeyUsage、BasicConstraints
验证流程
- 检查有效期、吊销状态(OCSP/CRL)
- 验证签名:用 Issuer 公钥验证证书签名
- 沿链向上至信任锚(根 CA)
- 检查 SAN 是否匹配连接域名
练习:openssl x509 -in cert.pem -text -noout 解析真实证书。
CA 运营与吊销
参考:Let's Encrypt · Certificate Transparency
- ACME 协议:Let's Encrypt 自动化域名验证与签发(HTTP-01、DNS-01)
- 证书透明度(CT):所有签发证书记入公开 Merkle 日志,供审计
- OCSP:在线查询证书是否吊销;OCSP Stapling 由服务器代查
- CRL:吊销列表;体积大、更新慢,逐步被 OCSP 补充
- 证书固定(Pinning):客户端硬编码信任公钥;运维风险高,移动端曾大量误配
工程部署
- 私钥进 HSM 或云 KMS;规划轮换与证书生命周期
- TLS 证书与代码签名证书分离管理
| 语言 | 库 | 用途 |
|---|---|---|
| Python | PyNaCl SigningKey | Ed25519 签名 |
| Python | PyJWT | JWT 编解码 |
| Rust | ed25519-dalek、ring::signature | 签名验签 |
<p class="kb-note-inline">练习:自签证书 + HTTPS 配置。本站笔记 <span class="crypto-pending">待撰写</span>。</p>