非破坏性哈希后处理是一个好主意吗?

时间:2014-05-30 18:30:53

标签: security hash

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

$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我的哈希,这只是我能想到的最简单的例子来说明什么"非破坏性的"在这种情况下意味着:在不减少算法的密钥空间的情况下对哈希进行后处理。

回答我寻找:

  • 老兄,用盐来避免raimbow桌子等等 - 彩虹桌虽然有关系
  • 像这样重新散列你的哈希hash(hash(hash($data))) - 问题不是关于重新发布
  • 请不要请自己加密 - 这不是我所说的
  • 不要运行你自己的CRYPTO。 - 这不会有任何帮助

回答我实际上在寻找:

  

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

1 个答案:

答案 0 :(得分:1)

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

在此视图中,后期处理有点像键,整体算法是键控哈希(如HMAC)。以下是该算法的一些要点。

密钥哈希可以抵抗已知明文攻击:如果攻击者知道许多后处理哈希的输入值,那么仍然很难找到"密钥"。但是,如果后期处理很简单,例如您的示例中的strrev,攻击者可能很容易找出"键"。

您必须仔细设计这些功能的空间。

编辑:如何将块密码应用于哈希结果?至少就是这样,你可以充分利用非破坏性功能的良好审查空间。