gpt4 book ai didi

php - 电子邮件地址作为密码盐?

转载 作者:可可西里 更新时间:2023-10-31 22:54:02 26 4
gpt4 key购买 nike

使用电子邮件地址作为 salt 是个坏主意吗?要密码吗?

最佳答案

编辑:
让我推荐给你这个answer on Security StackExchange其中解释了很多关于密码散列和 key 派生的细节。

底线:使用已建立的安全密码散列方案,该方案在某种程度上会占用大量资源以防止暴力攻击,但限制允许的调用次数以防止拒绝服务 (DoS) ) 攻击。

如果您的语言库有它的功能,请在升级时验证它是否做了它应该做的事情,特别是如果它是 PHP。

由于历史原因留下了下面的答案。

您可以使用用户的登录名作为盐,这可能比电子邮件地址更改的可能性更小(编辑: 0xA3 正确指出,这不如使用电子邮件地址,因为登录名往往更容易被猜到,而且有些登录名非常常用,因此彩虹表可能已经存在,或者可以重复用于其他站点)。

或者,有一个数据库列,您可以在其中保存密码的盐分。
但是,您也可以使用随机的用户特定盐,这更难猜测。

为了更好的安全性,您可以使用两种盐:一种特定于用户的盐和一种系统范围的盐(连接它们,然后使用密码对盐进行哈希处理)。

顺便说一句,盐和密码的简单连接可能不如使用 HMAC 安全.在 PHP 5 中,有 hash_hmac()您可以为此使用的功能:

$salt = $systemSalt.$userSalt;
hash_hmac('sha1', $password, $salt);

编辑:系统范围盐的基本原理:它可以而且应该存储在数据库之外(但备份。您将无法进行身份验证你的用户,如果你失去了它)。如果攻击者以某种方式读取您的数据库记录,他仍然无法有效地破解您的密码哈希值,直到他知道系统范围的加盐值。

编辑(稍微偏离主题):
关于密码哈希安全性的进一步说明:您可能还想阅读 Why do salts make dictionary attacks 'impossible'?关于多次散列以针对暴力破解和彩虹表攻击提供额外保护(尽管我认为重复散列可能会带来更多拒绝服务攻击的机会,除非您限制每次登录尝试的次数)。

注意

考虑到多用途多核系统(图形卡、可编程微 Controller 等)的兴起,可能值得使用具有高计算量的算法以及盐来对抗暴力破解,例如使用像 PBKDF2 这样的多重散列。但是,您应该限制每个时间单位的身份验证尝试次数,以防止 DDoS 攻击。

还有一件事:使用基于广泛使用的标准构建的“自定义”散列而不是广泛使用的预构建函数的另一个主要理由是 PHP 本身,它已证明自己不是在实现与安全相关的东西时完全值得信赖,无论是不太随机的随机数生成器还是 crypt() function that does not work at all在某些情况下,从而完全绕过了计算或内存密集型密码哈希函数应该带来的任何好处。
由于其确定性结果,简单的哈希函数比 key 派生函数的输出更有可能被正确测试,但您的里程数可能会有所不同。

关于php - 电子邮件地址作为密码盐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3787346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com