一、引入

由于项目中需要用到hash算法,然而研究生以来都没有接触过真正有关密码算法的项目,今天先了解下国密算法和密码学中应用最广泛的三类算法:
1、对称算法(分组密码算法)代表分组密码算法(DES和SM4);
2、非对称算法(公钥密码算法)代表公钥密码算法(RSA和SM2);
3、杂凑算法(摘要算法)代表摘要算法(HAS-256系列和SM3);
来了解下他们之间的区别和用法。
参考:

二、算法区别
2.1分组密码算法——国际DES、国密SM4

分组密码就是将明文数据按固定长度进行分组,然后在同一密钥控制下逐组进行加密,从而将各个明文分组变换成一个等长的密文分组的密码。其中二进制明文分组的长度称为该分组密码的分组规模。
国际的DES算法和国产的SM4算法的目的都是为了加密保护静态储存和传输信道中的数据

DES算法

SM4算法

计算基础

二进制

二进制

算法结构

使用标准的算术和逻辑运算、先代替后置换

基本轮函数加迭代、含非线性变换

计算轮数

16轮

32轮

密钥长度

64位

128位

有效密钥长度

56位

128位

实现性能

软件实现慢、硬件实现快

软件实现和硬件实现都快

安全性

较低

算法上看,国产SM4算法在计算过程中增加非线性变换,理论上能大大提高其算法的安全性,并且由专业机构进行了密码分析,民间也对21轮SM4进行了差分密码分析,结论均为安全性较高。

2.2公钥密码算法(非对称算法)——国际RSA、国密SM2

公钥密码系统与只使用一个密钥的对称传统密码不同,算法是基于数学函数而不是基于替换和置换。公钥密码学是非对称的,它使用两个独立的密钥,即密钥分为公钥和私钥,因此称双密钥体制。双钥体制的公钥可以公开,因此称为公钥算法。

RSA算法

SM2算法

计算结构

基于特殊的可逆模幂运算

基于椭圆曲线

计算复杂度

亚指数级

完全指数级

相同的安全性能下所需要的公钥位数

较多

较少(160位的SM2与1024位的RSA具有相同的安全等级)

密钥生成速度


较RSA算法快百倍以上

解密加密速度

一般

较快

安全性

基于分解大整数的难度

基于离散对数问题、fcdlp数学难题

2.3摘要算法(签名算法) 国际SHA-256与国密SM3

摘要函数在密码学中具有重要的地位,被广泛应用在数字签名,消息认证,数据完整性检测等领域。摘要函数通常被认为需要满足三个基本特性:碰撞稳固性,原根稳固性和第二原根稳固性。
SM3算法适用于商用密码应用中的数字签名和验证,是在SHA-256基础上改进实现的一种算法。SM3算法采用Merkle-Damgard结构,消息分组长度为512位,摘要值长度为256位。
SM3算法的压缩函数与SHA-256的压缩函数具有相似的结构,但是SM3算法的设计更加复杂,比如压缩函数的每一轮都使用2个消息字。
现今为止,SM3算法的安全性相对较高。安全是智能卡的核心,而算法是安全的基础。

2.3.1国际SHA-256

SHA256原理将算法中可以单独分出的模块,包括常量的初始化、信息预处理、使用到的逻辑运算。
信息的预处理分为两个步骤:附加填充比特和附加长度
附加填充比特
在报文末尾进行填充,使报文长度在对512取模以后的余数是448

填充是这样进行的:先补第一个比特为1,然后都补0,直到长度满足对512取模后余数是448。

需要注意的是,信息必须进行填充,也就是说,即使长度已经满足对512取模后余数是448,补位也必须要进行,这时要填充512个比特。

因此,填充是至少补一位,最多补512位。

例:以信息“abc”为例显示补位的过程。

a,b,c对应的ASCII码分别是97,98,99

于是原始信息的二进制编码为:01100001 01100010 01100011

补位第一步,首先补一个“1” : 0110000101100010 01100011 1

补位第二步,补423个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000
附加长度值
附加长度值就是将原始数据(第一步填充前的消息)的长度信息补到已经进行了填充操作的消息后面。

2.3.2国密SM3

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。
SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。
SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。
SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。
SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。
由于SM1、SM4加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。
SM3算法:SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性。SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。