📅  最后修改于: 2021-01-12 04:47:11             🧑  作者: Mango
哈希函数非常有用,并且几乎出现在所有信息安全应用程序中。
哈希函数是一种数学函数,可将数字输入值转换为另一个压缩数字值。哈希函数的输入为任意长度,但输出始终为固定长度。
哈希函数返回的值称为消息摘要或简称为哈希值。下图说明了哈希函数-
哈希函数的典型特征是-
定长输出(哈希值)
哈希函数将任意长度的数据隐蔽到固定长度。此过程通常称为散列数据。
通常,散列比输入数据小得多,因此散列函数有时称为压缩函数。
由于散列是较大数据的较小表示,因此也称为摘要。
具有n位输出的哈希函数称为n位哈希函数。流行的哈希函数生成介于160到512位之间的值。
运作效率
通常,对于具有输入x的任何哈希函数h,h(x)的计算都是快速的操作。
计算哈希函数比对称加密要快得多。
为了成为有效的加密工具,哈希函数需要具有以下属性-
像前电阻
此属性意味着反转哈希函数在计算上应该很困难。
换句话说,如果哈希函数h产生了哈希值z,那么找到哈希为z的任何输入值x都将是一个困难的过程。
此属性可防止仅具有哈希值并试图查找输入的攻击者。
二次成像前电阻
此属性意味着给定输入及其哈希值,应该很难找到具有相同哈希值的不同输入。
换句话说,如果输入x的哈希函数h产生哈希值h(x),那么应该很难找到任何其他输入值y,使得h(y)= h(x)。
散列函数的此属性可防止具有输入值及其散列的攻击者,并希望将其他值替换为合法值来代替原始输入值。
耐碰撞
此属性意味着很难找到导致相同哈希值的任意长度的两个不同输入。此属性也称为无冲突哈希函数。
换句话说,对于哈希函数h,很难找到任何两个不同的输入x和y,使得h(x)= h(y)。
由于哈希函数是具有固定哈希长度的压缩函数,因此哈希函数不可能没有冲突。无碰撞的这种特性仅证实了这些碰撞应该很难被发现。
此属性使攻击者很难找到具有相同哈希值的两个输入值。
同样,如果哈希函数具有抗冲突性,则它具有第二种前图像抗性。
哈希的核心是一个数学函数,该函数对两个固定大小的数据块进行操作以创建哈希码。该哈希函数构成哈希算法的一部分。
每个数据块的大小取决于算法。通常,块大小从128位到512位。下图演示了哈希函数-
哈希算法涉及上述哈希函数的轮次,例如块密码。每个回合采用固定大小的输入,通常是最新消息块和最后一个回合的输出的组合。
重复此过程所需的回合次数为散列整个邮件所需的次数。下图描述了哈希算法的示意图-
由于第一消息块的哈希值成为第二哈希操作的输入,因此其输出会更改第三操作的结果,依此类推。这种效应称为哈希的雪崩效应。
雪崩效应导致两条消息的散列值显着不同,即使消息中只有一点点数据也是如此。
正确理解哈希函数和算法之间的区别。哈希函数通过对两个固定长度的二进制数据块进行操作来生成哈希码。
散列算法是使用散列函数的过程,指定散列消息的方式以及以前消息块的结果如何链接在一起。
让我们简要地看到一些流行的哈希函数-
MD5是相当流行的哈希函数,已有很多年了。
MD系列包含哈希函数MD2,MD4,MD5和MD6。它被用作Internet标准RFC1321。它是一个128位哈希函数。
MD5摘要已在软件界广泛使用,以确保传输文件的完整性。例如,文件服务器通常为文件提供预先计算的MD5校验和,以便用户可以将下载文件的校验和与其进行比较。
2004年,在MD5中发现了冲突。据报道,使用计算机集群只能在一个小时内完成一次分析攻击。这种碰撞攻击导致MD5受损,因此不再建议使用。
SHA系列包括四种SHA算法; SHA-0,SHA-1,SHA-2和SHA-3。尽管来自同一家族,但结构上有所不同。
最初的版本是SHA-0,它是一个160位的哈希函数,由美国国家标准技术研究院(NIST)于1993年发布。它几乎没有缺点,也没有广受欢迎。 1995年下半年,SHA-1旨在纠正SHA-0的所谓弱点。
SHA-1是现有SHA哈希函数中使用最广泛的。它被用于包括安全套接字层(SSL)安全性在内的几种广泛使用的应用程序和协议中。
在2005年,发现了一种在实际时间范围内发现SHA-1冲突的方法,这使SHA-1的长期使用能力令人怀疑。
SHA-2系列根据其哈希值中的位数,还具有另外四个SHA变体SHA-224,SHA-256,SHA-384和SHA-512。尚无关于SHA-2哈希函数的成功攻击的报告。
尽管SHA-2是强大的哈希函数。尽管有很大的不同,但其基本设计仍遵循SHA-1的设计。因此,NIST呼吁采用新的竞争性哈希函数设计。
2012年10月,NIST选择了Keccak算法作为新的SHA-3标准。 Keccak具有许多优势,例如高效的性能和良好的抵抗能力。
RIPEMD是RACE完整性基元评估消息摘要的首字母缩写。这套哈希函数是由开放研究社区设计的,通常被称为欧洲哈希函数家族。
该套件包括RIPEMD,RIPEMD-128和RIPEMD-160。此算法也有256和320位版本。
原始的RIPEMD(128位)基于MD4中使用的设计原理,并被发现提供了可疑的安全性。 RIPEMD 128位版本是作为快速修复程序的替代品,以克服原始RIPEMD上的漏洞。
RIPEMD-160是该家族的改进版本和使用最广泛的版本。 256位和320位版本减少了意外碰撞的机会,但与RIPEMD-128和RIPEMD-160相比,分别没有更高的安全级别。
这是一个512位哈希函数。
它源自高级加密标准(AES)的修改版本。一位设计师是AES的共同创始人Vincent Rijmen。
释放了三个版本的漩涡。即WHIRLPOOL-0,WHIRLPOOL-T和WHIRLPOOL。
基于哈希函数的密码属性,有两个直接的应用。
散列功能可保护密码存储。
并非所有密码登录都以明文形式存储,大多数情况下,所有登录过程都会在文件中存储密码的哈希值。
密码文件由成对的表格组成,形式为(用户ID,h(P))。
下图描述了登录过程-
入侵者即使访问密码也只能看到密码的哈希值。他既不能使用哈希登录,也不能从哈希值导出密码,因为哈希函数具有图像前抵制的特性。
数据完整性检查是哈希函数的最常见应用。它用于在数据文件上生成校验和。该应用程序向用户保证了数据的正确性。
下图描述了该过程-
完整性检查可帮助用户检测对原始文件所做的任何更改。但是,它不提供任何原创性保证。攻击者无需修改文件数据,而是可以更改整个文件并计算所有新哈希,然后发送给接收者。仅当用户确定文件的原始性时,此完整性检查应用程序才有用。