PHP Mcrypt,它真的安全吗?

7
目前我正在处理一个项目,其中涉及到一些敏感的个人信息。虽然这些信息不包括银行账号,但仍属于敏感个人信息。因此,我想尽一切可能将这些信息加密并安全地存储在MySQL中。现在我正在积极寻找一些安全措施来处理这些敏感信息。
我发现使用mcrypt可以轻松加密/解密字符串和文本块。但是当我在stackoverflow上搜索mcrypt时,我注意到很多人认为mcrypt实际上并不安全。
那么现在我想知道,它真的有多安全吗?如果密钥被安全地存储,需要具备多高的黑客技能才能破解和解密存储的信息?我需要担心一个只有少量技能的黑客可以解密我将要存储在MySQL服务器中的加密信息吗?那么,使用mcrypt加密的加密信息需要哪些技能才能破解呢?
如果Mcrypt不够可用,有哪些好的替代方案不像使用gnupg扩展那样复杂?

4
请记住,技术只是方程式的一部分... 您的应用程序必须同样具备安全性。过度关注技术可能会让您误以为自己比实际更加安全。 - Jeremy Holovacs
1
mcrypt本身并不是一键解决方案,它支持多种不同的算法和模式。它只是一个小齿轮,用于计算实际数字,你需要在其周围构建安全系统。大多数情况下,不安全性源于开发人员不恰当地使用mcrypt,因为他们没有理解更大的图景。 - deceze
2
事实上,我不知道mcrypt通常存在什么安全漏洞会使其不安全。但是,密码学的本质是,直到被证明不安全之前,所有东西都被认为是未知的。 “mcrypt中没有已知的漏洞”只意味着“到目前为止还好,没有人证明存在漏洞”,因此如果正确使用,它应该对您具有加密用途。如果有人发布漏洞,这一切可能会在明天发生变化。也许有人正在利用某个漏洞,而我们还没有注意到... - deceze
1
通过这种方式,我希望你能理解到有一个更大的背景需要你了解,并且简单的问题“mcrypt是否真的安全”几乎无法回答。 - deceze
1
感谢deceze指出这一点。由于我不是加密等方面的专家,因此我担心其他人所说的话。也许像hakre所说的那样,我应该做更多的研究并使用自己的头脑。 - Esocoder
显示剩余5条评论
1个回答

16

以下是一份小指南,可帮助您避免一些陷阱并应用一些建议。

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

这样做会冒着如果对手在传输期间拦截了两个或多个使用相同密钥和IV的消息,则泄露明文的风险。

  • 不要使用ECB模式;OFB和CTR模式有所改善,但建议使用CBC或CFB模式。

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

OFB和CTR更好,但它们面临使用相同IV +密钥组合多次的上述安全问题。

CFB和CBC最具韧性,可防止IV +密钥重用,但具有相同公共前缀的分隔消息将泄漏该前缀的长度。此外,CFB泄漏第一个非相同明文块的差异。

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

    它不应从可打印ASCII字符中选择(例如,不是“my super strong secret key”); PBKDF2将是首选(即将本机支持,直到那时请Google)。显然,必须保护此密钥;如果丢失,您的数据就不见了。

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

    当调用mcrypt_create_iv()时,Mcrypt有一个选项可以使用MCRYPT_DEV_RANDOM或MCRYPT_DEV_URANDOM。

希望这能对您有所帮助:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接