【问题标题】:Safe with my own hash code? [closed]使用我自己的哈希码安全吗? [关闭]
【发布时间】:2013-07-02 13:52:08
【问题描述】:

将我的网站密码存储在我的数据库中并使用我自己的代码进行哈希处理是否安全?哈希码是用 php 编写的,这里有一些例子:

a - ìbnÿ&%A'T«•t‰ãšÀ

一个。 - mf‡=ä^ö™b±kª©

啊! - ž'6èŤ7μp¼Y +

123456 - Š-ËzUo‚ñQÈÇûÌ8

stackoverflow - ‹°>¨0µ±Ò¡^Ö—–”

hased 值始终为 16 个字符。据我说,它可以散列多达 10^96 个不同的散列值,并且需要很长时间才能破解。我可以将它用于我的网站吗?

【问题讨论】:

  • “用我自己的代码散列”是什么意思?如果您的意思是您已经编写了自己的散列算法:不要这样做。使用其中一种标准。除非您是这方面的数学专家,否则它可能没有您想象的那么安全。
  • 这个问题似乎离题了,因为不可能通过查看几个样本值的输出来评估哈希的安全性。
  • 我引用 Bruce Schneier 的话:“任何人,从初学者到专家,都可以发明一种他们自己无法破解的加密系统。”..​​.Schneier's Law
  • 所以你依靠默默无闻的安全性——相信没有人能够破坏你的算法,因为他们看不到它:但如果我们看不到你的算法,我们就不能评估您是否应该将它用于您的网站,仅建议不要基于自制加密很少安全(您可能是例外,但我们不知道)并且您不愿意分享您的算法是可疑的不安全
  • 您可以生成多少个可能的哈希值并不重要,重要的是您每秒可以哈希多少个密码。使用像 MD5 这样的算法,您可以使用普通 GPU 每秒计算大约 8 Giga 哈希,因此要暴力破解整个英语词典,您只需要几分之一毫秒。

标签: php database hash passwords


【解决方案1】:

总结一下cmets中普遍提到的内容:

  • 通过默默无闻的安全不是保护。一方面,如果您的哈希数据库泄漏,您的源代码也可能可以访问。如果不是这样,人们可以进行实验并可能对算法进行逆向工程。如果能想出来,其他人也能想出来。
  • 散列必须有足够大的键空间以尽可能避免冲突。从字母表的大小来看,您显然已经覆盖了,但我们不知道您的算法的防碰撞性能如何。
  • 散列必须足够昂贵,以使其无法快速散列大量值。我们不知道您的情况,但由于您没有明确强调这是一项功能,我希望它快速。这意味着攻击者会尽可能快地尝试散列所有可能的密码。请注意,您的哈希值的字母表有多大是无关紧要的;只有要散列的值的数量乘以散列一个值所需的时间是相关的。
  • 哈希不得存在允许进一步缩短哈希时间的快捷方式甚至允许对值进行有针对性的逆向工程的漏洞。根据您提供的有关哈希的信息,我们对此一无所知。

话虽如此,如果您的网站非常低调,可能足够仅仅因为它晦涩难懂(哎呀,默默无闻的安全性)并且没有人关心。如果有一天一个足够熟练的攻击者对您的特定网站和哈希算法感兴趣,那么您可能就完蛋了。

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 2013-03-05
    • 1970-01-01
    • 2022-12-15
    • 2014-08-05
    • 2012-08-21
    • 1970-01-01
    • 2012-09-02
    • 2013-04-26
    相关资源
    最近更新 更多