当前位置:首页 > 哈希资讯 > 正文内容

关于哈希算法,必须了解这三点

4个月前 (05-31)哈希资讯719

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

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

1 定义

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

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

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

关于哈希算法,必须了解这三点

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

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

h=Hash(m)

关于哈希算法,必须了解这三点

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

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

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

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

关于哈希算法,必须了解这三点

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算法也成功地给出了碰撞攻击。

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

关于哈希算法,必须了解这三点

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算法

关于哈希算法,必须了解这三点

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

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

关于哈希算法,必须了解这三点

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

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

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

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


扫描二维码推送至手机访问。

版权声明:本文由数字哈希发布,如需转载请注明出处。

本文链接:http://www.ziwu.org/post/26.html

分享给朋友:

“关于哈希算法,必须了解这三点” 的相关文章

如何快速识别哈希值类型

如何快速识别哈希值类型

哈希值是使用hash算法通过标准的逻辑运算得到的一串数值,不同的hash算法得到的哈希值是不同的也存在一定规律。本次我们将介绍通过Hash Identifier这个小工具来快速识别哈希值的类型。Hash Identifier界面使用环境kali2022.1操作步骤启动命令:# hash-identi...

浅谈哈希算法

浅谈哈希算法

这篇文章算是极客时间上,王争老师开设的《数据结构与算法之美》的课程里面的关于哈希算法的整理和思考。言归正传,哈希算法是在计算机软件领域运用非常广泛的算法,也同时是非常重要的算法,什么是哈希算法,哈希算法也叫散列算法,Hash算法,简单来说就是通过一个函数将任意长度的二进制串(计算机里面二进制串可以是...

关于哈希的一切,都在这里了

关于哈希的一切,都在这里了

上一节,我们一起学习了,在Java中如何构建高性能队列,里面牵涉到很多底层的知识,不知道你有Get到多少呢?!本节,我想跟着大家一起重新学习下关于哈希的一切——哈希、哈希函数、哈希表。这三者有什么样的爱恨情仇?为什么Object类中需要有一个hashCode()方法?它跟equals()方法有什么关...

哈希值,万物的编号,区块链的基础

哈希值,万物的编号,区块链的基础

在区块链浏览器中,可以看到,每一个区块,都有区块哈希值。哈希值是什么意思?以人为例,要分辨两个人是否是同一个人,不能靠姓名,因为姓名的重复率太高。最好的办法,是给每个人一个唯一的编号,比如身份证号。身份证号由区位编码+出身年月日+次序+验证码组成,嵌入了地域类别和时间类别,解决了人的重复问题。可人的...

哈希值的定义与应用

哈希值的定义与应用

什么是哈希值哈希值就是文件的身份证,不过比身份证还严格。他是根据文件大小,时间,类型,创作者,机器等计算出来的,很容易就会发生变化,谁也不能预料下一个号码是多少,也没有更改他的软件。哈希算法将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的...