eco*_*ner 28 passwords hash cryptography sha256 sha512
我目前正在使用带盐的SHA256来哈希我的密码.继续使用SHA256还是更改为SHA512会更好吗?
Erw*_*and 53
切换到SHA512几乎不会使您的网站更安全.你不应该编写自己的密码散列函数.相反,使用现有的实现.
SHA256和SHA512是消息摘要,它们从来不是密码散列(或密钥派生)函数.(虽然消息摘要可以用作KDF的构建块,例如在带有HMAC-SHA1的PBKDF2中.)
密码散列函数应该抵御字典攻击和彩虹表.为了抵御字典攻击,密码散列方案必须包含一个工作因素,以使其尽可能慢.
目前,最好的选择可能是Argon2.这一系列密码散列函数赢得了2015年的密码哈希竞赛.
如果Argon2不可用,唯一的其他标准化密码散列或密钥派生函数是PBKDF2,这是一个古老的NIST标准.如果不需要使用标准,其他选择包括bcrypt和scrypt.
维基百科有这些功能的页面:
如果你问我这个问题已经得到了相当好的回答:https://stackoverflow.com/questions/3897434/password-security-sha1-sha256-or-sha512
杰夫也有一篇关于哈希的有趣帖子:http://www.codinghorror.com/blog/2012/04/speed-hashing.html
请注意,SHA512的计算速度比SHA256慢很多.在安全散列的情况下,这是一种资产.较慢的计算哈希意味着需要更多的计算时间才能破解,因此如果您能负担得起计算成本,SHA512将因此而更加安全.
SHA256 仍然是 NIST 批准的,但如果可以,最好更改为 SHA512 或 bcrypt。
在撰写本文时,NIST 批准的哈希函数列表为:SHA-1、SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256 和 SHA3- 224、SHA3-256、SHA3-384 和 SHA3-512、SHAKE128 和 SHAKE256。
见https://csrc.nist.gov/projects/hash-functions
根据您运行的操作系统,您可能无法访问 SHA3 或 SHAKE 哈希函数。
与 SHA512 相比,许多人更喜欢 bcrypt,但 bcrypt 也仅在某些操作系统上可用。
SHA512 将在您的系统上可用,或者如果没有,您可能有一个如此旧的系统,散列算法的选择是您的问题中最少的。
首选 bcrypt 的一个常见原因是 bcrypt 是可调整的 - 您可以增加轮数(工作因子)以增加破解 bcrypt 哈希所需的时间。
但 SHA256 和 SHA512 也是可调的。虽然默认值为 5000 轮,但您可以根据需要指定更多轮次。500000 用我现在的电脑大概 0.45 秒来计算,感觉还可以。
例如:
password required pam_unix.so sha512 shadow rounds=500000 ...
Run Code Online (Sandbox Code Playgroud)
从 SHA256 更改为 SHA512 的原因是 SHA256 需要更多轮次才能与 SHA512 一样安全,因此虽然它不是不安全,但安全性较低。
参见,例如:https : //medium.com/@davidtstrauss/stop-using-sha-256-6adbb55c608
加密变化很快,所以你得到的任何答案明天都可能被证明是错误的,但目前的技术状态是,虽然 bcrypt 可能比 SHA512 更好,但 SHA512 很好。
如果 SHA512 是您“开箱即用”可用的,请使用它(而不是 SHA256),并且不要担心 bcrypt 或任何 SHA3 系列,直到它们成为您的发行版的标准。
顺便说一句,目前评分最高的答案有许多错误或误导性的说法。
“切换到 SHA512 几乎不会使您的网站更安全。”
这是误导。切换到 SHA512 将使您的网站更加安全。SHA256 不如 SHA512,但也不可怕。没有什么比 SHA512 更好的了,它很可能在您的系统上可用。Bcrypt 可能更好,但这还不清楚,而且 bcrypt 在很多系统上都不可用。SHA3 系列可能更好,但也没有广泛使用。
“SHA256 和 SHA512 从来就不是密码散列”
这是错误的。SHA256 和 SHA512 都是 NIST 批准的哈希算法。
“为了抵御字典攻击,密码散列方案必须包括一个工作因素,使其尽可能慢。”
这是错误的。高工作系数将防止暴力哈希破解,但不能防止字典攻击。没有工作系数低到可以使用但又高到可以防止字典攻击。如果你的密码是字典词,就会陷入字典攻击。防止字典攻击以不使用可在字典中找到的密码。
在我当前的 PC 上,轮次的限制似乎是 1000 万次,这会为输入的每个密码产生 8.74 秒的延迟。这段时间足以让人极度痛苦,比您想使用的时间还要长。它足够长以防止蛮力攻击 - 但是如果他们愿意,拥有良好破解装备和一点耐心的坚定对手仍然可以迭代字典。
“密码散列函数应该防御......彩虹表”
这充其量是误导。防御彩虹表的方法是确保每个密码都有自己的“盐”。这几乎是当今的标准做法,它发生在调用哈希函数之前。(加盐是指在对密码进行散列之前向密码中添加一个随机字符串。盐与密码一起存储,因此它不是秘密,但这确实意味着即使用户选择了一个众所周知的密码,攻击者也不能只是认识到 {this hash} 属于 {that password},他们仍然需要破解哈希。)
“目前最好的选择可能是Argon2。这个密码哈希函数家族在2015年赢得了密码哈希大赛。”
这是不清楚的。任何“新”的加密函数都可能有不明显的破解方式,这就是为什么大多数人更喜欢已被广泛使用的函数的原因。除此之外,您可能无法使用 Argon2。
“其他选择,如果不需要使用标准,包括 bcrypt 和 scrypt。”
这是不清楚的。曾几何时,scrypt 被视为更好的 bcrypt。然而,由于各种原因,情绪已经从 scrypt 转向 bcrypt。参见,例如:https : //blog.ircmaxell.com/2014/03/why-i-dont-recommend-scrypt.html
重复一遍,此时 SHA512 似乎是一个不错的选择,bcrypt 也是如此。
SHA512 是 NIST 批准的,而 bcrypt 不是。
SHA512 几乎肯定会在您的系统上可用。Bcrypt 可能是也可能不是。
如果两者都在您的系统上,我可能会推荐 bcrypt,但这是一个接近的电话。哪个都好。
小智 5
在大多数64位处理器上计算时,SHA512可能会明显更快,因为SHA256采用32位数学运算,这种操作通常稍慢.