密码学工程中最容易犯的 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)会导致安全隐患,攻击者可以构造碰撞,伪造数据。

➡️

继续阅读