哈希算法是用来干什么的(必须了解这三点)

安全性是实现区块链系统功能的基础,也是目前阻碍区块链应用推广的因素之一。

密码学是信息安全的基石,以很小的代价给信息提供一种强有力的安全保护,广泛应用于政治、经济、军事、外交和情报等重要领域。

1 定义

哈希算法(Hash Algorithms)也称为散列算法、杂凑算法或数字指纹,是可以将任意长度的消息压缩为一个固定长度的消息的算法。

哈希算法是区块链技术体系的重要组成部分,也是现代密码学领域的重要分支,在身份认证、数字签名等诸多领域有着广泛的应用。

深刻理解哈希算法原理,对于区块链系统的设计与实现有着至关重要的作用。

哈希算法是用来干什么的(必须了解这三点)(1)

哈希算法可以在极短的时间内,将任意长度的二进制字符串映射为固定长度的二进制字符串,输出值称为哈希值(Hash Value)或者数字摘要(Digital Digest)。

一般而言,哈希函数的数学表达形式如下:

h=Hash(m)

哈希算法是用来干什么的(必须了解这三点)(2)

式中,h为固定长度的输出值;m为任意长度的输入值。任意输入值(Message)的二进制编码经过哈希函数计算后,可以得出n比特的一个0、1字符串的哈希值,在不同算法中n的取值可能不同,例如128、160、192、256、384或512等。

哈希算法在区块链技术中得到了广泛的应用,各个区块之间通过哈希指针连接形成区块链,每个区块的完整性检验将以哈希运算的方式进行。

密码学哈希算法的主要特性就是单向性,即在算法上,只能从输入值计算得到输出值,而从输出值计算得到输入值是不可行的。

因为哈希算法的输出值是固定长度的,所以哈希算法存在一个碰撞的问题,即哈希算法的输出值的长度为n比特,那么,任取2n 1个不同的输入值,就一定存在两个不同的输入值会得到相同的输出值。因此,在一定数量的输入值情况下,输出值越长的哈希算法,其碰撞的概率会越小。

哈希算法是用来干什么的(必须了解这三点)(3)

2 常用的哈希算法

常用的哈希算法包括MD系列算法和SHA系列算法,其中MD系列算法有MD2、MD4、MD5、RIPEMD算法等,SHA系列算法有SHA0、SHA1、SHA2、SHA3算法等。

在哈希算法中,MD5算法和SHA1算法是应用最广泛的,两者的原理相差不大,但MD5算法加密后的输出值的长度为128比特,SHA1算法加密后的输出值的长度为160比特。

在2004年的国际密码学大会上,王小云教授介绍了对一系列哈希算法寻找实际碰撞的方法,并当场破解了包括MD4、MD5、HAVAL128算法在内的多种哈希算法。2005年,王小云教授进一步优化了方案,对SHA0、SHA1算法也成功地给出了碰撞攻击。

这些攻击技术对当时哈希算法的安全性造成了很大威胁,但同时也促进了新的哈希算法的设计与研究。

哈希算法是用来干什么的(必须了解这三点)(4)

1. MD系列算法

MD系列算法是一个应用非常广泛的算法集,最出名的MD5算法由RSA公司的罗纳德·林·李维斯特(Ronald L. Rivest)在1992年提出,目前被广泛应用于数据完整性校验、消息摘要、消息认证等。MD2算法的运算速度较慢但相对安全,MD4算法的运算速度很快,但安全性下降,MD5算法比MD4算法更安全、运算速度更快。

虽然这些算法的安全性逐渐提高,但均被王小云教授证明是不够安全的。MD5算法被破解后,Ronald L. Rivest在2008年提出了更完善的MD6算法,但MD6算法并未得到广泛使用。

MD5算法的设计采用了密码学领域的Merkle-Damgard构造法,这是一类采用抗碰撞的单向压缩函数来构造哈希函数的通用方法。

MD5算法的基本原理是将数据信息压缩成128比特来作为信息摘要,首先将数据填充至512比特的整数倍,并将填充后的数据进行分组,然后将每一分组划分为16个32比特的子分组,该子分组经过特定算法计算后,输出结果是4个32比特的分组数据,最后将这4个32比特的分组数据级联,生成一个128比特的散列值,即最终计算的结果。

2. SHA系列算法

SHA(Secure Hash Algorithm,安全哈希算法)是美国国家标准技术研究所发布的国家标准,规定了SHA1、SHA224、SHA256、SHA384和SHA512单向哈希算法。

SHA1、SHA224和SHA256算法适用于长度不超过264比特的消息。SHA384和SHA512算法适用于长度不超过2128比特的消息。SHA系列算法主要适用于数字签名标准(Digital Signature Standard,DSS)里面定义的数字签名算法(Digital Signature Algorithm,DSA)。

对于长度小于264比特的消息,SHA1算法会产生一个160比特的消息摘要。然而,SHA1算法已被证明不具备“强抗碰撞性”。

2005年,王小云教授破解了SHA1算法,证明了160比特的SHA1算法只需要大约269次计算就可以找到碰撞。

为了提高安全性,美国国家标准与技术研究院(National Institute of Standards and Technology,NIST)陆续发布了SHA256、SHA384、SHA512以及SHA224算法,统称为SHA2算法。

这些算法都是按照输出哈希值的长度命名的,例如SHA256算法可将数据转换成长度为256比特的哈希值。虽然这些算法的设计原理与SHA1算法相似,但是至今尚未出现针对SHA2算法的有效攻击。

因此,比特币在设计之初即选择采用了当时被公认为最安全和最先进的SHA256算法,除了在生成比特币地址的流程中有一个环节采用了RIPEMD160算法,其他需要做哈希运算的地方均采用了SHA256算法或双重SHA256算法,例如计算区块ID、计算交易ID、创建地址、PoW共识过程等。

3 .SHA256算法

哈希算法是用来干什么的(必须了解这三点)(5)

在比特币和以太坊的区块链系统中,SHA256算法是工作量证明算法的基础,具体的工作量证明算法在后面的章节中详细阐述。在比特币系统中,工作量证明算法只计算一次SHA256算法,而在以太坊系统中,工作量证明算法则嵌套计算两次SHA256算法。

常用的哈希算法的过程参数见下表:

哈希算法是用来干什么的(必须了解这三点)(6)

内部状态值的长度直接影响最终的输出值的长度,随着哈希算法不断演进,内部状态值的长度不断增加,对应的输出值的长度也在不断增加。只有不断增加输出值的长度,才能在算法上增加破解的难度。

随着对哈希算法不断深入地研究,慢慢会找到一些更加低廉的破解方案,这也促使我们不断改进哈希算法的内部细节。

我们已经发现了降低破解MD5、SHA1算法难度的方案,所以目前MD5算法与SHA1算法的安全性大大降低了,已经不再推荐使用,现在更多的是用在文件的校验方面。

目前,SHA256算法还是比较安全的,但是也不排除在不远的将来,我们会发现新的破解方案。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页