Skip to main content

11. Security Considerations (安全考虑)

TLS协议的安全性基于以下假设:

11.1. 密码学强度

TLS的安全性基本上依赖于所使用的密码学原语的强度. 实现者应该:

  • 使用强密码套件
  • 避免使用已知有弱点的算法 (如DES, RC4, MD5)
  • 定期更新加密库以修复已知漏洞

11.2. 随机数生成

TLS协议的安全性严重依赖于加密质量的随机数生成器. 实现必须 (MUST):

  • 使用加密安全的伪随机数生成器 (CSPRNG)
  • 确保随机数生成器有足够的熵源
  • 定期重新播种随机数生成器

11.3. 证书验证

正确的证书验证对于防止中间人攻击至关重要:

  • 验证证书链的完整性
  • 检查证书吊销状态 (CRL或OCSP)
  • 验证主机名匹配
  • 检查证书有效期

11.4. 版本回退攻击

实现必须 (MUST) 防止版本回退攻击. TLS使用ClientHello和ServerHello中的版本号, 以及Finished消息中的verify_data来检测版本回退尝试.

11.5. 已知攻击

实现应该注意以下已知攻击:

  • BEAST (Browser Exploit Against SSL/TLS): 针对TLS 1.0 CBC模式的攻击. TLS 1.2使用显式IV缓解此问题.
  • CRIME (Compression Ratio Info-leak Made Easy): 利用TLS压缩的攻击. 建议禁用TLS压缩.
  • Lucky 13: 针对CBC模式填充的时序攻击. 实现应该使用恒定时间比较.
  • POODLE: 针对SSL 3.0的攻击. 应禁用SSL 3.0.
  • Bleichenbacher攻击: 针对RSA PKCS#1 v1.5填充的攻击. TLS 1.2包含对此的防护措施.

11.6. 重协商

重协商可能引入安全风险. RFC 5246定义了安全重协商扩展以解决这些问题. 实现应该:

  • 实现RFC 5746 (TLS重协商指示扩展)
  • 仔细处理重协商请求
  • 在敏感操作期间可能拒绝重协商

11.7. 拒绝服务

TLS握手相对昂贵 (特别是公钥操作). 服务器应该:

  • 实现速率限制
  • 考虑使用会话恢复减少完整握手的数量
  • 监控和检测异常模式

11.8. 实现安全

除了协议级别的安全考虑外, 实现还应该:

  • 防止缓冲区溢出
  • 安全地清除敏感数据 (密钥, 明文)
  • 使用恒定时间比较防止时序攻击
  • 正确处理错误条件

注意: 完整的安全分析请参阅RFC 5246第11节和附录F.