【问题标题】:Is non destructive hash post processing a good idea?非破坏性哈希后处理是个好主意吗?
【发布时间】:2014-05-30 18:30:53
【问题描述】:

在存储之前对哈希字符串进行某种非破坏性的后处理(重新排序)是个好主意吗?例如:

$hash = strrev(hash($algo, $data . $salt));

其他例子:

$hash = hash($algo, $data . $salt)
$hash = strrev(substr($hash, 0, (int) ($length / 2))) . strrev(substr($hash, (int) ($length / 2)));

而不是简单地:

$hash = hash($algo, $data . $salt);

换句话说:

考虑到破坏者不知道哈希是如何转换的,前两个示例会比第三个示例产生更少的可破坏哈希吗?

说我会strrev我的哈希值,这只是我能想到的最简单的例子来说明“非破坏性”在这种情况下的含义:发布处理hash 没有 reduce 算法的密钥空间。

寻找的答案:

  • 老兄,用盐来避免 raimbow table blah blah - 虽然 Rainbow table 是相关的
  • 只需像这样hash(hash(hash($data))) 重新散列您的哈希 - 问题与重新散列无关
  • 请不要使用自己的加密货币 - 我说的不是这个
  • 不要运行自己的加密货币。 - 这也无济于事

我正在寻找的答案:

这是(不是)一个好主意,因为......原因......这里有一些关于为什么你应该(不应该)这样做的例子:......例子......另外,阅读这个......论文、文章、帖子、研究链接……证明了我的观点。

【问题讨论】:

  • 你应该总是假设算法是已知的,因为你知道Kerckhoffs’s principle
  • 这样做而不是重新散列或使用加密解决方案的目的是什么?您是否正在尝试提高性能,您是否出于理论上的原因这样做,您是否正在调查违规行为?这个问题的背后是什么?
  • 迭代,迭代,迭代......
  • “非破坏性”是什么意思?你的意思是“可逆”吗?
  • 如果您可以在数学上证明您的操作不会改变在给定哈希值的情况下找到消息的概率并且不会增加冲突概率,那么它可能不会受到伤害。但是,另一方面,您也没有获得任何东西(Kerkhoff 原则,见上文)。另一方面,您的操作的数学证明是强制性的,而且大多数时候是相当复杂、容易出错且耗时的操作。

标签: security hash


【解决方案1】:

让我们尝试分析所提出的算法,就好像“非破坏性后处理”是一个秘密函数,取自一些可能的函数空间。

在这个视图中,后处理有点像key,整体算法是keyed hash(就像HMAC)。以下是该算法的一些要点。

键控散列可以抵抗已知明文攻击:如果攻击者知道许多后处理散列的输入值,它应该仍然很难找到“键”。但是,如果后处理很简单,例如您的示例中的strrev,那么攻击者很容易找出“密钥”。

你必须仔细设计这些函数的空间。

编辑:如何将分组密码应用于哈希结果?至少这样,您可以利用经过仔细审查的非破坏性功能空间的优势。

【讨论】:

    猜你喜欢
    • 2021-01-31
    • 2013-04-01
    • 2010-12-03
    • 2012-12-01
    • 2011-06-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多