跳到主要内容

11. 安全考虑 (Security Considerations)

TLS protocol 的安全性基于若干假设和实现要求.

11.1. 密码强度 (Cryptographic Strength)

TLS 的安全性从根本上依赖所使用 cryptographic primitive 的强度. 实现者应使用强 cipher suite, 避免 DES, RC4, MD5 等已知弱点算法, 并定期更新密码库以修复已知漏洞.

11.2. 随机数生成 (Random Number Generation)

TLS protocol 的安全性高度依赖密码学强随机数生成. 实现必须使用 cryptographically secure pseudo-random number generator (CSPRNG), 确保 random number generator 拥有足够熵源, 并定期重新播种.

11.3. 证书验证 (Certificate Validation)

正确的 certificate validation 对防止 man-in-the-middle attack 至关重要. 实现需要验证 certificate chain 完整性, 检查 certificate revocation status (CRL 或 OCSP), 验证 hostname matching, 并检查 certificate validity period.

11.4. 版本回滚攻击 (Version Rollback Attacks)

实现必须防止 version rollback attack. TLS 使用 ClientHello 和 ServerHello 中的 version number, 以及 Finished message 中的 verify_data, 来检测 version rollback attempt.

11.5. 已知攻击 (Known Attacks)

实现应了解 BEAST, CRIME, Lucky 13, POODLE 和 Bleichenbacher attack 等已知攻击. TLS 1.2 通过显式 IV, 禁用压缩建议, constant-time comparison, 禁用 SSL 3.0, 以及对 RSA PKCS#1 v1.5 padding 的防护来缓解相关风险.

11.6. 重新协商 (Renegotiation)

renegotiation 可能引入安全风险. RFC 5246 定义 secure renegotiation extension 处理这些问题. 实现应支持 RFC 5746, 谨慎处理 renegotiation request, 并考虑在敏感操作期间拒绝 renegotiation.

11.7. 拒绝服务 (Denial of Service)

TLS handshake 成本较高, 尤其是 public key operation. server 应实现 rate limiting, 考虑使用 session resumption 减少完整 handshake 数量, 并监控异常模式.

11.8. 实现安全 (Implementation Security)

除 protocol-level 安全考虑外, 实现还应防止 buffer overflow, 安全清除 key 和 plaintext 等敏感数据, 使用 constant-time comparison 防止 timing attack, 并正确处理 error condition.