7

目前我正在开发一个项目,该项目将处理一些非常敏感的个人信息,虽然它不是回溯帐号,但它仍然是敏感的个人信息,我想尽我所能将这些信息加密并安全地存储在 mysql 中尽可能。所以现在我正在努力寻找一些可以处理这些敏感信息的安全措施。

我发现加密/解密字符串和文本块的一种简单方法是使用 mcrypt。但是当我在 stackoverflow 上搜索 mcrypt 时,我注意到很多人说 mcrypt 毕竟不是那么安全。

所以现在我想知道,它到底有多安全?如果密钥安全存储,是否需要大量的黑客技能,比如说专家技能,才能破解和解密存储的信息?我是否需要害怕一个没有什么技能的黑客可以解密我要存储在 mysql 服务器中的加密信息?那么破解mcrypt加密的加密信息需要什么技巧呢?

如果 Mcrypt 不够用,有什么好的替代方案不像使用 gnupg 扩展那么复杂?

4

1 回答 1

16

您可以遵循一个小指南,以避免一些陷阱并应用一些建议。

  • 不要为两条不同的消息重复使用相同的加密密钥和初始化向量 (IV)。

如果对手在传输过程中使用相同的密钥和 IV 设法截获两条或更多条消息,这样做将有暴露明文的风险。

  • 不要使用ECB模式;OFB 和 CTR 模式稍微好一些,但建议使用 CBC 或 CFB 模式。

不使用 ECB 的主要原因是因为这种模式会泄漏有关重复纯文本块的信息,这可能会破坏您的编码数据流。

OFB 和 CTR 更好,但它们会遇到上述安全问题,即多次使用相同的 IV+组合键。

CFB 和 CBC 对 IV+key 重用最有弹性,但是具有相同公共前缀的单独消息会泄漏所述前缀的长度。此外,CFB 会泄露第一个不相同的纯文本块的差异。

  • 确保您拥有强大的加密密钥

    应该从可打印的 ASCII 中选择(例如,不是“我的超强密钥”);PBKDF2 将是首选(很快就会被原生支持,直到那时谷歌它)。很明显,这把钥匙必须妥善保管;如果你丢失了,再见数据。

  • 使用良好的熵源来生成初始化向量。

    Mcrypt 可以选择在您调用 MCRYPT_DEV_RANDOM 或 MCRYPT_DEV_URANDOM 时使用mcrypt_create_iv()

希望对你有帮助 :)

于 2012-06-15T15:29:36.207 回答