单向散列函数算法

1 概述

单向散列函数算法也称Hash(哈希)算法,是一种将任意长度的消息压缩到某一固定长度(消息摘要的)的函数(该过程不可逆)。

特性:

  • 根据任意长度的信息计算固定长度的散列值;
  • 具备单向性(通过散列值不能反算出消息来)
  • 抗碰撞性

常用的算法包括:

  • MD4、MD5系列;
  • SHA系列;
  • 杂凑算法-国密SM3。

2 算法原理

2.1 MD5

MD5消息摘要算法对输入的任意长度的消息进行运算,产生一个128位的消息摘要。
(1)数据填充
在这里插入图片描述
(2)添加长度
在这里插入图片描述
(3)初始化变量
在这里插入图片描述
单向散列函数算法_第1张图片
(4)数据处理
单向散列函数算法_第2张图片
(5)输出
在这里插入图片描述

2.2 SHA系列

  • SHA-1:1995年发布,曾被视为是MD5(更早之前被广为使用的杂凑函数)的后继者。但SHA-1的安全性在2000年以后已经不被大多数的加密场景所接受。2017年荷兰密码学研究小组CWI和Google正式宣布攻破了SHA-1
  • SHA-2:2001年发布,包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。它的演算法跟SHA-1基本上仍然相似。
  • SHA-3:2015年正式发布,SHA-3并不是要取代SHA-2,因为SHA-2目前并没有出现明显的弱点。由于对MD5出现成功的破解,以及对SHA-0和SHA-1出现理论上破解的方法,NIST感觉需要一个与之前演算法不同的,可替换的加密杂凑演算法,也就是现在的SHA-3。

SHA算法设计基于和MD5相同的原理,根据不同的初始化和逻辑运算,进而产生不同位数的固定串。

2.3 国密SM3

SM3是在SHA-256的基础上改进得到的,添加了压缩和消息扩展两个部分。生成的是一个固定的256位的串。
单向散列函数算法_第3张图片
单向散列函数算法_第4张图片
单向散列函数算法_第5张图片

3 总结

单向散列函数算法具有以下几个共同特性:

  • 实现流程相同,都是数据填充、添加长度、初始化变量、数据处理、输出的过程;
  • 相同的实现原理,定义初始化变量及逻辑运算函数进行数据处理;
  • 在向前衍生发展的,在数据处理中进行改进。

该类算法的关键点是:定义逻辑运算函数,数据移位,运算过程迭代。

4 参考

[1]《加密与解密 第4版》单向散列算法
[2]《SM3密码杂凑算法》

你可能感兴趣的:(加密算法)