Hash 密码散列函数是如何设计的?
在解释了为什么单向散列函数是单向的之后,我想知道如何设计一个散列函数。是的,我知道不使用经过验证和测试的哈希函数是个坏主意,但我仍然想知道设计中什么是重要的,设计过程是什么样的 我熟悉Feistel网络密码,但这些密码必须是可逆的,这对于加密散列非常可怕。是否有某种结构在加密哈希中得到了很好的应用?使其成为单向功能的东西?目前正在运行,其目标是找到旧的SHA-1和SHA-2功能的替代品。Hash 密码散列函数是如何设计的?,hash,cryptography,Hash,Cryptography,在解释了为什么单向散列函数是单向的之后,我想知道如何设计一个散列函数。是的,我知道不使用经过验证和测试的哈希函数是个坏主意,但我仍然想知道设计中什么是重要的,设计过程是什么样的 我熟悉Feistel网络密码,但这些密码必须是可逆的,这对于加密散列非常可怕。是否有某种结构在加密哈希中得到了很好的应用?使其成为单向功能的东西?目前正在运行,其目标是找到旧的SHA-1和SHA-2功能的替代品。 您可以获得所有参与其中的算法的白皮书(参见第2轮提交)。描述了许多不同的哈希函数,以及它们的优点和问题。哈希
您可以获得所有参与其中的算法的白皮书(参见第2轮提交)。描述了许多不同的哈希函数,以及它们的优点和问题。哈希函数的“单向性”不容易计算。通常,哈希函数在很长一段时间内都能经受住加密社区的审查,从而显示出良好的质量。您可以查看一些已发布的针对现有哈希函数的攻击,并尝试设计一个专门避免这些攻击的哈希函数,但即使这样,它也可能被证明对另一种新攻击很弱
作为一个非常好的起点,我建议大家阅读NIST竞赛(参见tanascius的答案)。哈希函数和其他加密函数都是用非常强大的数学概念创建的。它们中的大多数都是构建的,因此不一定无法对它们进行反向/解密,但根据当前计算机的性能,这样做是不可行的。这就是为什么以前认证的DES和MD5算法现在已经过时的原因。既然如此,我建议您首先阅读与加密哈希函数相关的数学概念。哪一个是?我会把这个留给比我更有知识的人:)首先你应该读一读。这本书的全称是《应用密码学手册》
接下来,我建议您查看现有哈希函数的分析。例如,Skein是SHA-3最强大的竞争对手之一。Skien's包含了大量关于如何构造和安全的文档。你应该从这本书开始,它是一本关于设计各种晶片算法的全面介绍性教科书。密码学家Bart Preneel的博士论文是对这门学科的一个很好的概述: 只需丢弃部分结果,即可将密码转换为哈希函数。虽然这不是生成散列函数的最快方法,而且在可能需要双射散列函数的情况下(例如,一个函数将接受128位的输入并产生128位的输出,这样每个可能的输出值都会出现在某些输入中),它肯定不起作用,但它应该适用于多种用途 我能自己表述的唯一类型的双射单向函数是(128->128的例子):
反转单向散列需要解决离散日志问题。对于大量的位,这确实是一个困难的问题,但不幸的是,我相信有一些方法可以解决n=128的问题。我怀疑使用大于2的基数,并使用xor以外的基本运算,可能会提高方法的强度,但我不知道如何分析这些调整以确保函数是双射的。您可以从基本的数学单向运算开始,例如模(%)运算符。然后将其扩展到位单向运算符,并扩展到模糊性和模糊性。这可能更适合于or。