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.