2017-2018-2 20179216 《网络攻防与实践》SM234算法
国密商用算法是指国密SM系列算法,包括基于椭圆曲线的非对称公钥密码SM2算法、密码杂凑SM3算法、分组密码SM4算法,还有只以IP核形式提供的非公开算法流程的对称密码SM1算法等。国密即国家密码局认定的国产密码算法。主要有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,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。
SM2椭圆曲线公钥密码算法原理
《SM2椭圆曲线公钥密码算法》包括总则、数字签名算法、密钥交换协议、公钥加密算法四个部分,并在每个部分的附录详细说明了实现的相关细节及示例。国密SM2算法是商用的ECC椭圆曲线公钥密码算法,其具有公钥加密、密钥交换以及数字签名的功能。椭圆曲线参数并没有给出推荐的曲线,曲线参数的产生需要利用一定的算法产生。但在实际使用中,国密局推荐使用素数域256 位椭圆曲线,其曲线方程为y^2= x^3+ax+b。参数如下:
SM3密码杂凑算法原理
SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短。
杂凑密码算法又称为哈希密码算法或散列密码算法,其可以将任意长度的字符串作为算法输入,并输出固定长度的字符串。当算法的结构设计足够精妙复杂时,基本上可以做到对于任意输入都有唯一确定的输出与之对应,相反该输出也可以唯一标识该输入。
- 算法的本质
给数据加一个固定长度的指纹,这个固定长度就是256比特。 - 处理过程
第一步:填充
使填充后的数据的长度是512的整数倍 。先在数据的最尾巴上加一个1;然后把原始数据的长度用64比特表示,放在最后面;再看看现在的数据的长度值离512的整数还差多少个,差多少个就填多少个0在加的这个1和64比特的长度之间。
第二步:分组
把填充后的信息按照512比特一个分组进行分组,如果分成了N组,就是b(0),b(1),,,b(N-1)
第三步:迭代压缩得到最后的杂凑值(哈希值)
IV(n)=CF(IV(n-1),b(n-1)) 。如果信息分为N组,那么IV(N)就是最后得到的杂凑值。
SMS4分组密码算法原理
SMS4分组加密算法是中国无线标准中使用的分组加密算法,在2012年已经被国家商用密码管理局确定为国家密码行业标准,标准编号GM/T 0002-2012并且改名为SM4算法,与SM2椭圆曲线公钥密码算法,SM3密码杂凑算法共同作为国家密码的行业标准,在我国密码行业中有着极其重要的位置。
SMS4算法的分组长度为128bit,密钥长度也是128bit。加解密算法均采用32轮非平衡Feistel迭代结构,该结构最先出现在分组密码LOKI的密钥扩展算法中。SMS4通过32轮非线性迭代后加上一个反序变换,这样只需要解密密钥是加密密钥的逆序,就能使得解密算法与加密算法保持一致。SMS4加解密算法的结构完全相同,只是在使用伦密钥时解密密钥是加密密钥的逆序。
S盒是一种利用非线性变换构造的分组密码的一个组件,主要是为了实现分组密码过程中的混淆的特性和设计的。SMS4算法中的S盒在设计之初完全按照欧美分组密码的设计标准进行,它采用的方法是能够很好抵抗差值攻击的仿射函数逆映射复合法。
下图为加密实例:
Python实现国密算法
- SM2算法的实现
python3实现的国密SM2+SM3,SM3包括KDF功能,可配合SM2加解密(SM2调用了SM3模块)。SM2实现了各种素域下的签名、验签和加解密功能。
- SM3算法的实现
- SMS4算法的实现