PHP密码学的良好实践?

PHP Cryptography Good Practices?

提问人:Madara's Ghost 提问时间:4/8/2012 最后编辑:Nick JohnsonMadara's Ghost 更新时间:4/11/2012 访问量:315

问:

所以我听说了,既过时了,又可能坏了。我听说这也不是一个可行的解决方案。md5()sha1()crypt()

如果是这样的话,谁能指出PHP中当前最新的密码学良好实践是什么?我在网上搜索过,但没有找到任何最新/潜在的内容。

PHP 密码学

评论

0赞 Madara's Ghost 4/8/2012
另外,我不确定是在这里还是在程序员上打开它,如果您认为这属于那里,请随时投票关闭。我会支持你的。
1赞 Daniel Roethlisberger 4/8/2012
你想用密码学,或者更准确地说,用加密哈希函数解决什么问题?是否要安全地存储密码?
0赞 Madara's Ghost 4/8/2012
是的,例如。我想存储密码、信用卡号和其他用于授权用户和付款的敏感信息。简而言之,我希望它尽可能安全,即使以效率略低为代价。
0赞 CodesInChaos 4/8/2012
正确的选择取决于你到底想做什么。有时你想要快,有时,慢。有时您更愿意使用加密。有时你想减慢 GPU 和 ASIC 的速度,有时你不想。
0赞 Nick Johnson 4/9/2012
存储密码和信用卡号是根本不同的挑战 - 对于后者,您需要能够恢复原始号码;对于前者,你没有。

答:

4赞 emboss 4/9/2012 #1

单独的哈希加盐也已经过时了,通常不再在密码哈希方案中得到认可。并行计算此类哈希值太容易了(即使使用单个每用户盐),足智多谋的攻击者最有可能破坏这种方案。

您应该改用某种形式的迭代哈希。除了对密码应用盐分外,这种算法还人为地减慢了整个哈希过程的速度(加密哈希通常被设计为尽可能快,同时保持固定的“安全裕度”)。达到这个目标的合适基元通常被认为是 bcrypt、scrypt 或 PBKDF2 算法。例如,有关如何在 PHP 中使用 bcrypt 的讨论,请参阅此答案

评论

0赞 Madara's Ghost 4/9/2012
那么循环遍历哈希算法大约 100,000 次听起来不错吗?
1赞 emboss 4/9/2012
更好,但也不完美。使用我提到的三个之一,它们是由该领域的专家专门为此目的设计的。使用它们而不是滚动自己的方案,很容易出错。
0赞 CodesInChaos 4/9/2012
盐也与良好的散列方案一起使用。它们还不够。所以你的第一句话很有误导性。
0赞 emboss 4/9/2012
@CodeInChaos 这是真的,这是误导性的。我应该更好地将其表述为“仅盐”。将更新,感谢您的评论!