加密密码

2022-08-30 12:40:46

加密密码的最快,最安全的方法是什么(最好在PHP中),无论您选择哪种方法,它都是可移植的吗?

换句话说,如果我以后将我的网站迁移到其他服务器,我的密码是否继续有效?

正如我被告知的那样,我现在使用的方法取决于服务器上安装的库的确切版本。


答案 1

如果您正在为登录系统选择加密方法,那么速度不是您的朋友,Jeff与Thomas Ptacek就密码进行了一次对付,结论是您应该使用最慢,最安全的加密方法。

来自Thomas Ptacek的博客:
速度正是您在密码哈希函数中不想要的。

现代密码方案受到增量密码破解程序的攻击。

增量破解程序不会预先计算所有可能的破解密码。他们单独考虑每个密码哈希,并通过密码哈希函数提供字典,就像您的PHP登录页面一样。像Ophcrack这样的彩虹表破解程序使用空间来攻击密码;像开膛手约翰,裂缝和LC5这样的增量破解者与时间一起工作:统计和计算。

密码攻击游戏在破解密码X所需的时间内得分。对于彩虹表,该时间取决于您的表需要多大以及搜索它的速度。使用增量破解程序,时间取决于使密码哈希函数运行的速度。

优化密码哈希函数越好,密码哈希函数的速度越快,方案就越弱。MD5和SHA1,甚至是像DES这样的传统分组密码,都设计得很快。MD5、SHA1 和 DES 是弱密码哈希。在现代CPU上,DES和MD5等原始加密构建块可以进行比特切片,矢量化和并行化,以使密码搜索速度快如闪电。GAME OVER FPGA实现仅需数百美元。


答案 2

我和彼得在一起。开发人员似乎不理解密码。我们都选择(我也对此感到内疚)MD5或SHA1,因为它们速度很快。想想看(最近有人向我指出了这一点),这没有任何意义。我们应该选择一种愚蠢的慢速哈希算法。我的意思是,在事情的规模上,一个繁忙的网站会散列密码什么?每半分钟?谁在乎它是否需要0.8秒与0.03秒服务器明智?但是,这种额外的速度对于防止所有类型的常见暴力攻击是巨大的。

根据我的阅读,bcrypt是专门为安全密码哈希而设计的。它基于河豚,并且有很多实现。

对于 PHP,请查看 PHP Pass

对于任何做.NET的人,请查看 BCrypt.NET


推荐