密码学工程中最容易犯的 7 个错误
💡
原文中文,约14800字,阅读约需36分钟。
📝
内容提要
密码学中最危险的错误是正确算法的错误使用。常见问题包括不安全的随机数生成器、nonce/IV重用、手动组合加密与认证、时间侧信道、未验证证书链、使用已破解的哈希算法和密钥硬编码。解决方案包括使用CSPRNG、AEAD加密、常量时间比较和适当的密钥管理,确保每次加密使用新nonce,验证证书链,避免使用MD5和SHA-1。
🎯
关键要点
- 密码学中最危险的错误是正确算法的错误使用。
- 常见问题包括不安全的随机数生成器、nonce/IV重用、手动组合加密与认证、时间侧信道、未验证证书链、使用已破解的哈希算法和密钥硬编码。
- 解决方案包括使用CSPRNG、AEAD加密、常量时间比较和适当的密钥管理,确保每次加密使用新nonce,验证证书链,避免使用MD5和SHA-1。
- 使用不安全的随机数生成器会导致密钥、nonce和IV的安全性降低,建议使用RAND_bytes()或getrandom()。
- Nonce/IV重用会导致加密数据的安全性下降,必须确保每次加密使用新的随机nonce。
- 手动组合加密与认证容易出错,建议使用AEAD加密方案以避免Padding Oracle攻击。
- 时间侧信道攻击可以通过观察程序执行时间泄露秘密数据,使用常量时间比较函数可以防止此类攻击。
- 不验证证书链的TLS连接等同于明文传输,必须强制验证对端证书以确保安全。
- 使用已被破解的哈希算法(如MD5和SHA-1)是严重的安全隐患,建议使用SHA-256或SHA-3。
- 密钥硬编码会导致密钥泄露,建议使用环境变量或专门的密钥管理系统来管理密钥。
❓
延伸问答
密码学中最常见的错误有哪些?
常见错误包括不安全的随机数生成器、nonce/IV重用、手动组合加密与认证、时间侧信道、未验证证书链、使用已破解的哈希算法和密钥硬编码。
如何避免使用不安全的随机数生成器?
应使用CSPRNG,如RAND_bytes()或getrandom(),而不是使用srand()和rand()。
nonce/IV重用会带来什么风险?
nonce/IV重用会导致加密数据的安全性下降,攻击者可以解密数据包或注入伪造数据包。
为什么要使用AEAD加密方案?
AEAD加密方案可以避免手动组合加密与认证的错误,提供更高的安全性。
如何确保TLS连接的安全性?
必须验证证书链和hostname,确保TLS连接不等同于明文传输。
使用已破解的哈希算法有什么后果?
使用已破解的哈希算法(如MD5和SHA-1)会导致安全隐患,攻击者可以构造碰撞,伪造数据。
➡️