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

时间:2010-05-26 08:37:48

标签: hash cryptography

关于为什么单向散列函数是单向的reading之后,我想知道如何设计散列函数。是的,我知道不使用经过验证和测试的哈希函数是一个坏主意,但我仍然想知道设计中的重要性以及设计过程是什么样的。

我熟悉Feistel网络密码,但这些密码必然是可逆的,这对加密哈希来说太可怕了。是否存在某种在加密哈希中使用得很好的结构?什么使它成为单向?

7 个答案:

答案 0 :(得分:13)

目前正在运行NIST hash function competition,其目标是找到旧的SHA-1和SHA-2功能的替代品。
您可以获得参与其中的所有算法的白皮书(有关第2轮提交,请参阅here)。描述了许多不同的哈希函数,以及它们的优点和问题。

答案 1 :(得分:4)

首先,您应该阅读chapter 9 of "The Handbook"。本书的全称是“应用密码学手册”。

接下来,我建议您查看现有哈希函数的分析。例如,Skein是最强的SHA-3竞争者之一。 Skien的submission包含大量关于如何构建和proven安全的文档。

答案 2 :(得分:3)

哈希函数的“单向”并不是一件容易计算的事情。通常,哈希函数通过在较长时期内经受加密社区的审查而被证明是高质量的。您可以查看一些已发布的对现有哈希函数的攻击,并尝试设计一个特别避免这些攻击的哈希函数,但即使这样,它也可能被证明对另一个新攻击很弱。

虽然我建议您阅读NIST比赛(请参阅tanascius的回答),这是一个非常好的起点。

答案 3 :(得分:3)

你应该开始with Bruce Schneier's book这是一本关于设计各种加密算法的综合性入门教材

答案 4 :(得分:1)

密码学家Bart Preneel的博士论文是对这一主题的一个很好的概述:Analysis and Design of Cryptographic Hash Functions

答案 5 :(得分:0)

使用非常强大的数学概念创建散列函数和其他加密函数。它们中的大多数是构建的,因此它不一定无法反转/解密它们,但是根据当前计算机的性能,这样做是不可行的。这就是为什么以前认证的DES和MD5算法现在已经过时的原因。有人告诉我,我建议你首先阅读与加密哈希函数相关的数学概念。哪个?我会留给那些比我更了解情况的人:)

答案 6 :(得分:-1)

通过简单地丢弃部分结果,可以将密码转换为散列函数。虽然这不是产生散列函数的最快方法,但在人们可能需要双射散列函数的情况下肯定不会起作用(例如,一个函数将需要128位输入并产生128位输出,例如对于某些输入,每个可能的输出值都会出现)它应该适用于多种用途。

我自己能够制定的唯一一种双向单向函数(例如128-> 128):

  1. 将全零的输入映射到全零的输出。
  2. 对于任何其他输入,加载一个全1的线性反馈移位寄存器,将输入解释为128位移位计数,并运行移位器以计算多次(请注意,这不需要实际执行2 ^ 128步!)。

反转单向散列需要解决离散日志问题。对于大量的位,这确实是一个难题,但遗憾的是我相信有一些方法可以用n = 128来解决它。我怀疑使用大于2的数字基数,并使用除xor之外的基本操作,可能会提高方法的强度,但我不知道如何分析这些调整以确保函数是双射的。