Hash 使用我自己的哈希算法而不是流行的哈希算法有什么缺点?

Hash 使用我自己的哈希算法而不是流行的哈希算法有什么缺点?,hash,password-hash,hash-function,Hash,Password Hash,Hash Function,我在算法方面是个呆子,不是很聪明。但我心里有个问题。有很多可用的哈希算法,这些算法可能比我写的要复杂10倍,但现在几乎所有的算法都是可预测的。最近,我读到写我自己的散列函数不是一个好主意。但是为什么呢?我想知道一个程序/程序员如何打破我的逻辑(例如)在5+个步骤中为每个字符串创建一个唯一的哈希。假设有人成功地在我的服务器中注入了一个SQL查询,并存储了所有哈希值。一个程序(比如hashcat)如何帮助他解密这些散列?在这种情况下,我可以看到我自己的算法有一个强大的一面,那就是没有人知道它,黑客也

我在算法方面是个呆子,不是很聪明。但我心里有个问题。有很多可用的哈希算法,这些算法可能比我写的要复杂10倍,但现在几乎所有的算法都是可预测的。最近,我读到写我自己的散列函数不是一个好主意。但是为什么呢?我想知道一个程序/程序员如何打破我的逻辑(例如)在5+个步骤中为每个字符串创建一个唯一的哈希。假设有人成功地在我的服务器中注入了一个SQL查询,并存储了所有哈希值。一个程序(比如hashcat)如何帮助他解密这些散列?在这种情况下,我可以看到我自己的算法有一个强大的一面,那就是没有人知道它,黑客也不知道它是如何实现的。另一方面,众所周知的算法(如sha-1)不再是不可预测的。有一些网站非常适合有效地打破这些散列。所以,我的简单问题是,为什么聪明人不建议使用自编的哈希算法

默默无闻的安全可能是一种优势,但你永远不应该依赖它。你依赖于这样一个事实:你的代码是保密的,一旦它被知道(共享托管、备份、源代码控制等等),存储的密码可能就不再安全了

发明一种新的安全算法是极其困难的,即使对密码学家来说也是如此。有很多要点要考虑,例如正确的盐析或键拉伸,确保类似的输出不允许得出关于输入的相似性的结论,等等。只有能够经受其他密码学家多年攻击的算法才被认为是安全的

有一个更好的选择来代替发明你自己的方案。通过发明一种算法,你实际上在散列(你的代码)中添加了一个秘密,只有知道了这段代码,攻击者才能开始强行输入密码。添加秘密的更好方法是:

  • 使用已知经验证的算法(BCrypt、SCrypt、PBKDF2)散列密码
  • 使用秘密服务器端密钥(双向加密)加密生成的哈希

  • 这样,您还可以添加一个密钥(服务器端密钥)。只有当攻击者在服务器上拥有权限时,他才能知道密钥,在这种情况下,他也会知道您的算法。此方案还允许在必要时交换密钥,交换哈希算法将更加困难。

    和的可能重复。“另一方面,众所周知的算法(如sha-1)不再是不可预测的。”sha-1和sha-2。有更好的散列算法可以使用。简而言之,@PatrickM-提及最佳实践似乎不是这个问题的答案。问题更多的是关于为什么不推荐发明自己的算法的原因。当然,这些链接无论如何都是有用的。