散列密码的加密?
我来关于阅读会话管理的一些议题在PHP在此之后安全的讨论,看看:辣椒还是不辣椒:从第 https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-term-persistence#title.2散列密码的加密?
报价?
一个更好的解决方案,这是如果你使用的硬件分离特别有用,是散列加密您在数据库中,将其插入。有了这个保护措施,即使攻击者找到了转储所有数据库表的方法,他们首先必须解密哈希,然后才能开始破解它们。随着PHP和数据库在单独的硬件上,这变得更加安全。
在这篇文章中,链接https://github.com/defuse/php-encryption共享...
到目前为止,我只是为了存储密码在数据库中使用password_hash()。是否推荐加密哈希本身?你怎么看?
感谢您的想法!
使用适当的散列算法进行散列通常足以保护密码,但之后加密(不编码)散列确实更安全。
当您使用服务器端密钥加密散列时,攻击者必须获得服务器上额外的权限才能获得此密钥(不含密钥,散列值无效)。获取只读访问数据库比获取服务器上的特权要容易得多。例如SQL注入,丢弃备份,丢弃服务器......在所有这些情况下,加密将保护哈希。
简洁而不张扬!很好的答案。 – Pogrindis
我是他们引用文章的作者之一。我可能应该强调“这只在数据库处于单独的裸机上时才提高安全性”。 –
@ScottArciszewski - 通常Web服务器和数据库服务器在不同的机器上,特别是共享主机。我在讨论中知道“如果攻击者可以在数据库中进行制动,他可能会读取文件系统”这个论点非常受欢迎,但那些确实是两双鞋子。接管服务器需要更多的知识和运气,而不是欺骗应用程序以显示太多信息。我很感谢你在文章中提到了服务器端密钥的使用。 – martinstoeckli
是否建议对散列本身进行编码?你怎么看?
不,password_hash()
/password_verify()
就足够了。需要脊柱龙头级别安全性的人可以参考文章的这一部分,以避免accidentally shooting themselves in the foot trying to improve their security,但一般情况下,如果您在2016年使用bcrypt,那么您很好。
除非您的网站和数据库有单独的服务器,否则此策略的安全性增益为零。如果我可以进入你的数据库,我几乎可以肯定地进入你的文件系统,并恢复加密密钥。
如果您确实有单独的硬件,并且您使用了经过验证的加密库(例如由Defuse Security提供的加密库),请随时使用它。只要知道它对大多数用例都没有必要,因为密码散列API提供了相当好的安全性来抵御现代密码破解。
在PHP的更高版本中,他们也会支持Argon2。如果您打算过度使用,请切换到该模式,而不是增加协议的复杂性。
(另外,它是encrypt, not encode。)
根本不需要加密哈希值。攻击者必须颠倒散列才能找到正确的明文(用户密码)。这相当于找出加密的正确密钥。哈希就足够了。加上明显的盐否则你的模式容易受到彩虹表攻击
“攻击者必须将哈希反转以找到正确的明文(用户密码)。”是的,如果他们甚至没有散列工作,他们甚至不能开始使用他们的分布式密码破解集群。 –
仔细阅读评论 –
为什么?你真的想让我去揭穿你的“这相当于找出正确的加密密钥”的概念与数学? –
我不确定,但不会更适合http://security.stackexchange.com/? – Pogrindis
散列的安全性来自于猜测明文值需要很长时间的事实。加密的安全性来自于猜测密钥需要很长时间的事实。在这两种情况下,安全性都源于猜测所有可能的密钥在计算上不可行。通过正确实施哈希,这应该已经足够不可行了。更大幅度地增加赌注肯定不是坏事,但是否值得追加的复杂性取决于你。 – deceze
你正在混淆加密和编码在你的问题 - 这个问题是关于加密。 – 1615903