使用强大且成熟的密码学元素¶
密码学是一个复杂的主题,经常被误解,并且是存在重大争论的领域。本指南中提到的具体内容可能会随着技术的不断进步而变化。
一般来说,在使用密码学时应遵循一些简单的规则
不要发明你自己的密码学,使用现有的算法和实现。
在使用密码学哈希、签名或加密时,必须使用强大的密码学原语。
优先使用维护活跃的成熟、信誉良好的库,而不是自己实现算法。
仔细注意密钥管理和分发,这通常比算法选择和实现更难。
密码学应该用于解决特定问题或缓解特定威胁,例如确保在不受信任的网络连接上传输数据的机密性。密码算法和密钥强度应与您尝试通过加密缓解的威胁相适应,并且应该了解密码学的局限性。
例如,如果加密应用于网络链路,则它无法保护数据在链路两端处理或存储时的安全。在部署密码学时,还必须考虑对系统性能和可用性的影响。
OpenStack 全局需求中当前包含的 Python 密码学库包括
cryptography,以及
鼓励使用以下密码学元素
SHA-256 是首选的哈希算法。
AES 是首选的通用加密算法,密钥长度为 128、192 或 256 位。
HMAC 是首选的签名构造,与首选的哈希算法结合使用。
TLSv1.2 或 TLSv1.1 是保护客户端和 Web 服务之间传输数据的首选方案,但必须安全配置,必须检查证书的有效性、过期时间和吊销状态。
虽然在某些用例中,使用较弱的密码学元素似乎是合适的,但通常建议使用上述选项。
强烈不建议使用以下内容
MD5
DES
RC4
SSLv2、SSLv3、TLSv1.0
后果¶
较弱的密码学元素可能容易受到各种类型的攻击,最终影响相关系统或数据集的机密性和完整性。