密码哈希函数是如何设计的?

22

阅读了有关单向哈希函数为何是单向的原因后,我想知道如何设计哈希函数。是的,我知道不使用经过验证和测试的哈希函数是个糟糕的想法,但我仍然想知道设计中要考虑哪些因素以及设计过程是怎样的。

我熟悉 Feistel 网络密码算法,但这些算法必须是可逆的,这对于密码哈希来说非常糟糕。在密码哈希中是否有一种被广泛采用的结构?一些能够使其成为单向函数的特点吗?


你可以从基本的数学单向操作开始,比如取模(%)运算符。然后扩展到位运算单向操作,并加强你的模糊和混淆技巧。 - Justin L.
1
这可能更适合于http://mathoverflow.net/或http://math.stackexchange.com/。 - Roger Pate
7个回答

13

目前正在进行NIST哈希函数竞赛,其目标是找到替代旧的SHA-1和SHA-2函数的方法。
您可以获取参与该竞赛的所有算法的白皮书(请参见此处以获取第二轮提交)。其中描述了许多不同的哈希函数,以及它们的优点和问题。


4
首先,您应该阅读《应用密码学手册》第9章。该书的全名为“应用密码学手册”。
接下来,我建议您查看现有哈希函数的分析。例如,Skein是最强大的SHA-3竞争者之一。 Skien的提交包含了大量关于其构造和证明安全性的文档。

3
哈希函数的“单向性”不容易计算。通常,哈希函数经受住了密码学社区的长期审查才能被证明是高质量的。您可以查看现有哈希函数的一些已发布攻击,并尝试设计一个特别避免这些攻击的哈希函数,但即使如此,它可能仍然容易受到新攻击的影响。
作为很好的起点,我建议您阅读NIST竞赛相关内容(请参见tanascius的答案)。

3

你应该从Bruce Schneier的书开始学习应用密码学。这是一本全面介绍各种类型的设计密码算法的入门教材。


1

0

哈希函数和其他加密函数是使用非常强大的数学概念创建的。它们中的大多数都是这样构建的,因此不一定无法反转/解密它们,但取决于当前计算机的性能,这是不可行的。这就是为什么以前认证的DES和MD5算法现在已经过时的原因。话虽如此,我建议您首先了解与加密哈希函数相关的数学概念。哪一个?我会把这个问题留给比我更有知识的人 :)


-1
一个密码可以通过简单地丢弃部分结果来转换为哈希函数。虽然这并不是生成哈希函数最快的方法,也肯定不能在需要双射哈希函数(例如,一种函数,它将输入的128位转换为输出的128位,以便对于某些输入,每个可能的输出值都会出现)的情况下工作,但对于许多目的来说应该足够了。
我自己能够构思的唯一类型的双向单向函数是(以128-> 128为例):
1. 将所有零的输入映射到所有零的输出。 2. 对于任何其他输入,使用全1的线性反馈移位寄存器,将输入解释为128位移位计数,并运行该数量的移位器(请注意,这不需要实际执行2 ^ 128步!)。

反向计算单向哈希需要解决离散对数问题。对于较大的位数,这确实是一个困难的问题,但不幸的是我相信有一些方法可以用n=128来解决它。我怀疑使用比2更大的进制,并使用其他基本操作而不是异或,可能会提高方法的强度,但我不知道如何分析这些微调以确保函数是双射的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接