【问题标题】:Is it bad practice to store the hash function used as part of the hashed password?存储用作散列密码的一部分的散列函数是不好的做法吗?
【发布时间】:2013-09-17 10:01:39
【问题描述】:

在crackstation.net 上使用php source code 进行散列+加盐,返回的散列包括使用的散列算法。我将 create_hash 函数返回的哈希值存储在我的数据库中。存储这些信息是不好的做法吗?这会给黑客带来优势吗?

【问题讨论】:

  • 鉴于 php 散列函数支持多个散列,您必须包含用于稍后能够再次验证散列值的散列。哈希类型通常很容易通过它们的字符串长度来识别(例如 md5 是 32 个字符,sha1 是 40,等等)。
  • 如果您使用的是良好的哈希,则不应该。 (假设存在单向函数。)单向函数的定义包括如下语句:给定原始函数和输出,很难检索输入。但请确保您使用的哈希没有被破坏! Marc B 提出了一个很好的观点——无论如何你都需要知道。有些人会争辩说,使用哈希的全部意义在于您可以不加选择地共享算法。

标签: php mysql hash passwords salt


【解决方案1】:

我不会说这是一个不好的做法。哈希函数通常可以从输出哈希的性质(例如字符串长度等)中识别出来,因此您可能不会告诉攻击者任何他们无法从哈希中找出的东西。

【讨论】:

    【解决方案2】:

    我认为这是一个很好的做法。这意味着,如果您将散列函数升级(更安全),新用户将立即使用新的。

    现在,您不能立即使用旧的散列函数重新散列用户,因为您需要他们的密码来执行此操作,并且您无法从散列状态中检索它。相反,当此类用户登录时,您使用他们的密码存储一个新的散列列,并针对他们的用户帐户重置散列函数。

    因此,通过这样的配置,用户在登录时会慢慢转移到更安全的系统上。

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 1970-01-01
      • 2011-09-28
      • 2011-08-23
      • 1970-01-01
      • 2017-06-21
      • 2020-03-09
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多