15、哈希算法

https://blog.csdn.net/u011583927/article/details/80905740

Hash算法的讲解 

hash算法原理详解

SM3算法


目录

消息摘要

HASH函数

HASH函数的基本性质

HASH函数基本结构

HASH算法

HASH算法应满足的条件

HASH算法原理

HASH算法特点

HASH算法安全性

HASH算法应用


消息摘要

消息摘要(Message Digest)又称为数字摘要(Digital Digest)。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。

HASH函数

哈希-摘要-散列-杂凑

HASH函数又称报文摘要、杂凑函数、散列函数,它能将任意长度的信息转换成固定长度的HASH值h(又称哈希码、数字摘要或消息摘要),并且任意不同消息或文件所生成的HASH值是不一样的,其形式为:

h= Hash(M)

HASH值具有错误检测能力,即改变报文的任意一位或多位,都会导致HASH值的改变。同时,HASH函数可以提供保密性、报文认证以及数字签名功能。

HASH函数应满足以下条件:

  • 输入可以是任意长度的消息或文件M;
  • 输出是固定长度的;
  • 给定H和M,计算H(M)是容易的;
  • 给定H,找到不同的消息M1和M2,使得H(M1)=H(M2)是计算上不可行的。

HASH函数的基本性质

  • 单向性:由HASH值h不能得出相应的数据报文;
  • 抗弱碰撞性:不能找到与给定报文具有相同HASH值的另一报文;
  • 抗强碰撞性:抵抗生日攻击这类攻击的能力强弱问题。

HASH函数基本结构

其中Mi为第i个输出分组;f为压缩函数;L表示分组数;n表示HASH值的长度;b表示输入分组的长度;CV0=IV=n位初始值;链接变量CVi=f(CVi-1,Mi-1);HASH值H(M)=CVL;

HASH算法

哈希算法是指有关产生哈希值或杂凑值的计算方法,也称为摘要算法、散列函数或杂凑函数。哈希算法可以将任意长度的消息映射成为一个长度较短且长度固定的值,这个值为摘要值、哈希值(Hash Value) 、散列值或者杂凑值。它是一种单向密码体制,即一个从明文到密文的不可逆映射,只有加密过程,没有解密过程。

消息摘要算法主要分为三类:

  • MD(Message Digest):消息摘要
  • SHA(Secure Hash Algorithm):安全散列
  • MAC(Message Authentication Code):消息认证码

目前主要的摘要算法有MD5、RIPEMD、SHA1、SHA2(SHA224、SHA256、384、512),国密中的SM3等。

1、MD

这是应用非常广泛的一个算法家族,尤其是 MD5(Message-Digest Algorithm 5,消息摘要算法版本5),它由MD2、MD3、MD4发展而来,由Ron Rivest(RSA公司)在1992年提出,目前被广泛应用于数据完整性校验、数据(消息)摘要、数据加密等。MD2、MD4、MD5 都产生16字节(128位)的校验值,一般用32位十六进制数表示。MD2的算法较慢但相对安全,MD4速度很快,但安全性下降,MD5比MD4更安全、速度更快。

MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为:求余、取余、调整长度、与链接变量进行循环运算,得出结果。

2、SHA

SHA算法由NIST开发,并在1993年作为联邦信息处理标准公布,SHA-1与MD5的设计原理相似,以512位数据块为单位来处理输入,产生160位的HASH值,具有比MD5更强的安全性。SHA算法的安全性在不断改进,已经发布的版本由SHA-1、SHA-2、SHA-3。

SHA-1摘要长度160bit。

SHA-2是一系列SHA算法变体的总称,其中包含如下子版本:SHA-256:可以生成长度256bit的信息摘要。SHA-224:SHA-256的“阉割版”,可以生成长度224bit的信息摘要。SHA-512:可以生成长度512bit的信息摘要。SHA-384:SHA-512的“阉割版”,可以生成长度384bit的信息摘要。

SHA-3为第三代安全散列算法(Secure Hash Algorithm 3),之前名为Keccak算法,由Guido Bertoni,Joan Daemen,Michaël Peeters,以及Gilles Van Assche在RadioGatún上设计。SHA-3并不是要取代SHA-2,因为SHA-2并没有出现明显的弱点。由于对MD5、SHA-0和SHA-1出现成功的破解,NIST感觉需要一个与之前算法不同的,可替换的加密散列算法,也就是SHA-3。

3、SM3算法

SM3是国家密码局于2010年公布的商用密码杂凑算法标准。该算法消息分组长度为512比特,输出杂凑值长度为256比特,采用Merkle-Damgard结构。

4、RIPEMD-160算法

RIPEMD算法于1996年由鲁汶大学Hans Dobbertin,Antoon Bosselaers 和 Bart Prenee组成的COSIC 研究小组发布。RIPEMD是以MD4为基础原则所设计的 ,而且其表现与更有名的SHA-1类似。RIPEMD已被攻破,RIPEMD-160是以原始版RIPEMD所改进的160位元版本,而且是RIPEMD系列中最常见的版本,相对于国家安全局所设计SHA-1和SHA-2算法。 同时也存在着128,256,320位元的算法,称为RIPEMD-128,RIPEMD-256和RIPEMD-320。

算法

杂凑值长度

运算速度

安全强度

MD5

128

RIPEMD-160

160

SHA-1

160

SHA-2

224256384512

-

SHA-3

224256384512

-

SM3

256

补充:HMAC

HMAC是含有密钥的散列函数算法,包含MD和SHA两个系列以及SM3的消息摘要算法。HMAC只是在原有的MD、SHA、SM3等算法的基础上添加了密钥。

MD系列:HmacMD2,HmacMD4,HmacMD5

SHA系列:HmacSHA1,HmacSHA224,HmacSHA256,HmacSHA384,HmacSHA512

SM3:HmacSM3

HASH算法应满足的条件

1)输入长度是任意的,输出长度是固定的;

2)单向性:对每个给定的输入,计算其杂凑值很容易;给定杂凑值,找到满足的输入是不可行的;

3)抗碰撞:给定杂凑函数的描述,找到两个不同的输入信息杂凑到同一个值是不可行的;

4)抗生日攻击(强弱而已)

HASH算法原理

摘要算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取的结果就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,且理论上无法通过反向运算取的原数据内容。因此,基于这种原理的算法便通常被用来做数据完整性验证。在数字签名的过程中,使用摘要算法对原文进行计算,保证了原文的完整性,同时使用私钥对摘要值进行签名可以大大提高签名的效率。在庞大的数据库中,由于摘要值更为短小,被找到更为容易,因此会使数据的存储与查询速度更快。

HASH算法特点

HASH算法是把任意长度的输入杂凑而产生长度固定的伪随机输入的算法,消息摘要看起来是“随机的”,这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的,因此消息摘要是“伪随机的”。其主要特点如下:速度极快、无密钥、不可逆;

  • 输入敏感:原文输入信息的任何轻微改变,都将造成摘要值的巨大变化;
  • 伪随机性:消息摘要看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。
  • 固定输出:输入长度是任意的,输出长度是固定的;无论输入的消息有多长,计算出来的消息摘要的长度总是固定的;例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出,SHA-1的变体可以产生192比特位和256比特位的消息摘要;一般认为,摘要的最终输出越长,该摘要算法就越安全;无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。
  • 单向性:正向快速:在给定原文后,能够在有限时间和有限资源内计算其摘要值;不可逆,对每个给定的输入,计算其杂凑值很容易;给定杂凑值,找到满足的输入是不可行的;消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。当然,可以采用强力攻击的方法,即尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。但实际上,要得到的信息可能是无穷个消息之一,所以这种强力攻击几乎是无效的。
  • 抗碰撞:给定杂凑函数的描述,找到两个不同的输入信息杂凑到同一个值是不可行的;一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;两条相似的消息的摘要确不相近,甚至会大相径庭;虽然“碰撞”是肯定存在的。即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,很难找到两段摘要值一致但内容不同的原文(即发生碰撞);
  • 抗生日攻击(强弱而已)
  • 速度极快;
  • 无密钥;

HASH算法安全性

HASH函数的安全性是指在现有的计算资源下,找到一个碰撞是不可能的。对于HASH函数的攻击,像分组密码一样,穷举攻击是最好的选择,当然前提是算法没有漏洞,穷举攻击的平均尝试次数为2m/2,m是指HASH值长度,目前128位HASH安全性较弱,160位甚至HASH值更长更好。

暴力破解:通过文件冗余性改变文件后寻找与原文件HASH值相同的文件。即破解HASH函数的”弱碰撞性“,这种情况下,暴力破解需要尝试的次数可以根据散列的长度计算出来,以SHA-1为例,其HASH值长度为160位,因此只需要尝试2160次就可以找到目标消息了。

生日攻击:攻击者不是要找到生成特定HASH值的消息,而是要找到HASH值相同的两条消息,而HASH值可以是任意值。以SHA-1为例,生日攻击只需要尝试280次就可以了。

HASH算法应用

HASH算法主要用于消息或文件的完整性验证,得到一个数据的摘要,数据被修改,摘要会改变;同时也可用作密码消息的安全存储,例如网页防篡改应用、基于口令的加密;还有就是消息认证码,数字签名,伪随机数生成器,一次性口令等。

  • 基于口令的加密
  • 消息认证码
  • 伪随机数生成器
  • 一次性口令

数据一致性/完整性验证:数据一致性说得是如何保证一段数据在传输的过程中没有遗漏、破坏或者修改过。一般来说,目前流行的做法是对数据进行HASH,得到的HASH值和数据一起传输,然后在收到数据的时候也对数据进行HASH,将得到的HASH值和传输过来的HASH值进行比对,如果是不一样的,说明数据已经被修改过;如果是一样的,则说明极有可能是完整的。例如,检测软件是否被篡改,

文件校验:我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。MD5 HASH算法的"数字指纹"特性,使它成为目前应用最广泛的一种文件完整性校验和(Checksum)算法,不少Unix系统有提供计算md5 checksum的命令。

数字签名:HASH 算法也是现代密码体系中的一个重要组成部分。由于非对称算法的运算速度较慢,所以在数字签名协议中,单向散列函数扮演了一个重要的角色。 对 HASH 值,又称"数字摘要"进行数字签名,在统计上可以认为与对文件本身进行数字签名是等效的。而且这样的协议还有其他的优点。

鉴权协议:鉴权协议又被称作挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。

数字签名:一般地,把对一个信息的摘要称为该消息的指纹或数字签名。数字签名是保证信息的完整性和不可否认性的方法。数据的完整性是指信宿接收到的消息一定是信源发送的信息,而中间绝无任何更改;信息的不可否认性是指信源不能否认曾经发送过的信息。其实,通过数字签名还能实现对信源的身份识别(认证),即确定“信源”是否是信宿意定的通信伙伴。 数字签名应该具有唯一性,即不同的消息的签名是不一样的;同时还应具有不可伪造性,即不可能找到另一个消息,使其签名与已有的消息的签名一样;还应具有不可逆性,即无法根据签名还原被签名的消息的任何信息。这些特征恰恰都是消息摘要算法的特征,所以消息摘要算法适合作为数字签名算法。

注:

如有错误、侵权,请联系作者更改删除!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三九笔墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值