一种基于SM4的认证加密算法和解密算法
技术领域
本发明涉及加密算法技术领域,具体涉及一种基于SM4的认证加密算法和解密算法。
背景技术
近些年,国家对信息安全的关注已经上升到一个空前的高度。由于黑客技术的迅猛发展,人们的日常生活受到严重的影响,如陌生诈骗电话、银行卡密码盗取、支付宝余额不翼而飞以及个人身份信息泄露等。身边的信息危害无处不在,那么如何保障数据的机密性和真实性俨然成为社会讨论的热点话题,也是大家高度关注的课题。
原来用于无线局域网的国密算法SMS4被定义为SM4作为密码行业标准发布。SM4是一个分组对称密钥算法,明文、密钥、密文都是16字节,加密和解密密钥相同。通过32次循环的非线性迭代轮函数来实现加密和解密。其中包括非线性变换S盒,以及由移位异或构成的线性变换。除了256字节的S盒之外,还定义了另外两组参数FK以及CK(具体数据参考密码局网站)。基本过程是首先把16字节密钥按照4字节一组分成4组,然后根据密钥扩展算法,生成32组4字节轮密钥;再把输入的16字节数据也按照4字节一组分成4组然后进行循环运算(这点和AES算法类似)。
认证加密算法是基于对称密码的密码技术。它能够保证数据在信道传输过程中数据的机密性和真实性,让不法分子难以伪造篡改数据,在一定程度上能够解决上述问题。
针对目前数据在传输过程中,无法保证其传输信道的安全性和完整性。那么在传输的过程中,数据有可能被窃取或篡改,导致数据的不可信。目前,手机验证码已经全面普及到我们的生活中,很多登录信息、支付信息以及验证信息都是通过验证码传输到手机上,那这个过程就非常危险。为了解决这一问题,本发明提出一种基于国标对称密码SM4的认证加密算法SMAE,该算法能够保证数据的机密性和完整性,能够在一定程度上解决该问题。
发明内容
有鉴于此,本发明的目的在于克服现有技术的不足,提供一种基于SM4的认证加密算法和解密算法,以解决现有技术中数据传输过程中无法保证其传输数据的安全性和完整性的问题。
为实现以上目的,本发明采用如下技术方案:
一种基于SM4的认证加密算法,包括:
步骤S1、定义加密算法所需要的变量参数;其中,所述变量参数包括:用户密钥Key、系统参数IV、斐波那契数列模256后的32字节16进制序列const;
步骤S2、输入用户密钥Key、系统参数IV和斐波那契数列模256后的32字节16进制序列const,利用状态更新函数得到数据初始化后的状态值Su;
步骤S3、将明文P和Su输入到状态更新函数中进行v轮状态更新,得到状态值Su+v;同时,将明文P和Su利用对称密码算法SM4进行加密,得到密文C;
步骤S4、定义临时参数tmp,将临时参数tmp和Su+v输入到状态更新函数中进行7轮状态更新,得到状态值Su+v+7;
步骤S5、根据状态值Su+v+7,按预设认证码生成算法得到明文P的认证码Tag。
优选地,所述步骤S2包括:
步骤S21、输入用户密钥Key、系统参数IV和斐波那契数列模256后的32字节16进制序列const,对初始状态S-10,j,j=0,1,2,3,4进行赋值;
S-10,1=const1
S-10,2=const0
步骤S22、载入用户密钥Key和系统参数IV初始化16字节的数据集mi={m2k,m2k+1,k=-5,-4,-3,...,-1};
m2k=key
步骤S23、将数据集mi和初始状态S-10,i的赋值输入到状态更新函数中进行10轮状态更新,得到10轮状态更新后的状态值S0;
步骤S24、将相关数据AD按照128bit分为u组,记为AD={ADi,i=0,1,...u-1}后,将ADi和步骤S23输出的状态值输入到状态更新函数中进行u轮状态更新,得到u轮状态更新后的状态值Su。
优选地,所述步骤S23具体为:
将数据集mi和初始状态S-10,i的赋值输入状态更新函数:
Si+1,1=SM4Round(Si,0,T(Si,1))
Si+1,2=SM4Round(Si,1,T(Si,2))
Si+1,3=SM4Round(Si,2,T(Si,3))
Si+1,4=SM4Round(Si,3,T(Si,4))
其中,i=-10,-9,...,-1,其中为线性变换;经过10轮状态更新后的状态值为:
优选地,所述步骤S24具体为:
将相关数据AD按照128bit分为u组,记为AD={ADi,i=0,1,...u-1};
将ADi和步骤S23输出的状态值输入到状态更新函数中进行u轮状态更新:
Si+1,1=SM4Round(Si,0,T(Si,1))
Si+1,2=SM4Round(Si,1,T(Si,2))
Si+1,3=SM4Round(Si,2,T(Si,3))
Si+1,4=SM4Round(Si,3,T(Si,4))
其中,i=0,1,2,...,u-1;经过u轮状态更新后的状态值为:
优选地,所述步骤S3包括:
步骤S31、将输入的明文P按16-byte分为v组,记为P={Pm,m=0,1,...v-1},若最后一个明文分组Pv-1不足128bits,用0进行填充补齐;
步骤S32、将Pm和步骤S2输出的状态值Su输入到状态更新函数中进行v轮状态更新,得到状态值Su+v;
步骤S33、利用对称密码算法SM4加密Pm和步骤S1输出的状态值Su,得到密文C=C0||C1||...||Cv-1,Cm=SM4(Pm,Su+m),其中,Su+m作为加密密钥,Su+m根据步骤S22中的状态更新函数求解Su+m+1=StateUpdate(Su+m,Pm)。
优选地,所述步骤S4包括:
步骤S41、定义临时参数tmp,其中,msglen为明文P的消息长度,adlen为相关数据AD的数据长度;
步骤S42、将临时参数tmp和步骤S3输出的状态值Su+v输入到状态更新函数中进行7轮状态更新,得到状态值Su+v+7=(Su+v+7,0,Su+v+7,1,Su+v+7,2,Su+v+7,3,Su+v+7,4)。
优选地,所述步骤S5具体为:
计算取T的前t位作为明文P的认证码Tag,64≤t≤128。
一种基于SM4的认证解密算法,与上述的基于SM4的认证加密算法配套使用,包括:
步骤S101、输入密文C、密钥Key以及认证码Tag,利用状态更新函数得到数据初始化后的状态值;
步骤S102、对密文C进行分组,对分组后的密文顺序解密,然后再利用状态更新函数更新状态值;
步骤S103、执行加密算法中的认证码生成算法,得到新的认证码Tag’;
步骤S104、比对Tag’和Tag,如果两个认证码相匹配,那么系统解密出正确的明文P,否则加密失败,解密出的消息无效,说明明文P可能被篡改。
优选地,所述步骤S102中,对密文C按128bit进行分组。
优选地,所述步骤S102中,对分组后的密文按SM4解密算法顺序解密。
本发明采用以上技术方案,至少具备以下有益效果:
由上述技术方案可知,本发明提供的这种基于SM4的认证加密算法,利用国标对称密码算法SM4构造了一种认证加密算法,该算法并不是简单地将加密算法和认证码生成算法组合在一起,而是让加密算法和认证码生成算法进行步骤共享(例如:都利用了状态更新函数更新状态值,而本发明提供的这种状态更新函数是发明人在现有技术的基础上探索构建的,安全性能高,黑客很难基于现有技术进行破解),这种认证加密算法能够提高算法效率,安全性高,是一种能够同时保证数据安全性和完整性的算法。
可以理解的是,在日常生活中,手机验证码已经普及到我们每一个人中,无论是电子支付、身份认证、用户注册等等都必须要使用手机验证码。由此可见,验证码在日常事务中扮演着很重要的角色。但是,一般情况下,短信验证码都是以明文的形式发送到用户的手机上,如此高风险的验证码也是导致了近年来网络诈骗事件频频发生,不法分子凭借截取短信验证码,就可以实施转账操作。而本发明的技术方案,对明文加密的同时,对验证码的生成方式进行了改进,针对验证码的安全漏洞,能够提供相应的安全解决方案(本发明提供的是算法改进后的认证码),保障了验证码的安全性和完整性。同时,SM4是我国对称密码国标算法,具有自主可控权,能够在一定程度上防止国外恶意攻击。进一步提高了数据传输过程中数据的安全性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的基于SM4的认证加密算法的流程示意图;
图2为本发明一实施例提供的基于SM4的认证解密算法的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将对本发明的技术方案进行详细的描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本发明所保护的范围。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
参见图1,本发明一实施例提供的一种基于SM4的认证加密算法,包括:
步骤S1、定义加密算法所需要的变量参数(参见如下表一);其中,所述变量参数包括:用户密钥Key、系统参数IV、斐波那契数列模256后的32字节16进制序列const;
步骤S2、输入用户密钥Key、系统参数IV和斐波那契数列模256后的32字节16进制序列const,利用状态更新函数得到数据初始化后的状态值Su;
步骤S3、将明文P和Su输入到状态更新函数中进行v轮状态更新,得到状态值Su+v;同时,将明文P和Su利用对称密码算法SM4进行加密,得到密文C;
步骤S4、定义临时参数tmp,将临时参数tmp和Su+v输入到状态更新函数中进行7轮状态更新,得到状态值Su+v+7;
步骤S5、根据状态值Su+v+7,按预设认证码生成算法得到明文P的认证码Tag。
表一
由上述技术方案可知,本发明提供的这种基于SM4的认证加密算法,利用国标对称密码算法SM4构造了一种认证加密算法,该算法并不是简单地将加密算法和认证码生成算法组合在一起,而是让加密算法和认证码生成算法进行步骤共享(例如:都利用了状态更新函数更新状态值,而本发明提供的这种状态更新函数是发明人在现有技术的基础上探索构建的,安全性能高,黑客很难基于现有技术进行破解),这种认证加密算法能够提高算法效率,安全性高,是一种能够同时保证数据安全性和完整性的算法。
可以理解的是,在日常生活中,手机验证码已经普及到我们每一个人中,无论是电子支付、身份认证、用户注册等等都必须要使用手机验证码。由此可见,验证码在日常事务中扮演着很重要的角色。但是,一般情况下,短信验证码都是以明文的形式发送到用户的手机上,如此高风险的验证码也是导致了近年来网络诈骗事件频频发生,不法分子凭借截取短信验证码,就可以实施转账操作。而本发明的技术方案,对明文加密的同时,对验证码的生成方式进行了改进,针对验证码的安全漏洞,能够提供相应的安全解决方案(本发明提供的算法改进后的认证码),保障了验证码的安全性和完整性。同时,SM4是我国对称密码国标算法,具有自主可控权,能够在一定程度上防止国外恶意攻击。进一步提高了数据传输过程中数据的安全性。
优选地,所述步骤S2包括:
步骤S21、输入用户密钥Key、系统参数IV和斐波那契数列模256后的32字节16进制序列const,对初始状态S-10,j,j=0,1,2,3,4进行赋值;
S-10,1=const1
S-10,2=const0
步骤S22、载入用户密钥Key和系统参数IV初始化16字节的数据集mi={m2k,m2k+1,k=-5,-4,-3,...,-1};
m2k=key
步骤S23、将数据集mi和初始状态S-10,i的赋值输入到状态更新函数中进行10轮状态更新,得到10轮状态更新后的状态值S0;
步骤S24、将相关数据AD按照128bit分为u组,记为AD={ADi,i=0,1,...u-1}后,将ADi和步骤S23输出的状态值输入到状态更新函数中进行u轮状态更新,得到u轮状态更新后的状态值Su。
优选地,所述步骤S23具体为:
将数据集mi和初始状态S-10,i的赋值输入状态更新函数:
Si+1,1=SM4Round(Si,0,T(Si,1))
Si+1,2=SM4Round(Si,1,T(Si,2))
Si+1,3=SM4Round(Si,2,T(Si,3))
Si+1,4=SM4Round(Si,3,T(Si,4))
其中,i=-10,-9,...,-1,其中为线性变换;经过10轮状态更新后的状态值为:
优选地,所述步骤S24具体为:
将相关数据AD按照128bit分为u组,记为AD={ADi,i=0,1,...u-1};
将ADi和步骤S23输出的状态值输入到状态更新函数中进行u轮状态更新:
Si+1,1=SM4Round(Si,0,T(Si,1))
Si+1,2=SM4Round(Si,1,T(Si,2))
Si+1,3=SM4Round(Si,2,T(Si,3))
Si+1,4=SM4Round(Si,3,T(Si,4))
其中,i=0,1,2,...,u-1;经过u轮状态更新后的状态值为:
优选地,所述步骤S3包括:
步骤S31、将输入的明文P按16-byte分为v组,记为P={Pm,m=0,1,...v-1},若最后一个明文分组Pv-1不足128bits,用0进行填充补齐;
步骤S32、将Pm和步骤S2输出的状态值Su输入到状态更新函数中进行v轮状态更新,得到状态值Su+v;
步骤S33、利用对称密码算法SM4加密Pm和步骤S1输出的状态值Su,得到密文C=C0||C1||...||Cv-1,Cm=SM4(Pm,Su+m),其中,Su+m作为加密密钥,Su+m根据步骤S22中的状态更新函数求解Su+m+1=StateUpdate(Su+m,Pm)。
优选地,所述步骤S4包括:
步骤S41、定义临时参数tmp,其中,msglen为明文P的消息长度,adlen为相关数据AD的数据长度;
步骤S42、将临时参数tmp和步骤S3输出的状态值Su+v输入到状态更新函数中进行7轮状态更新,得到状态值Su+v+7=(Su+v+7,0,Su+v+7,1,Su+v+7,2,Su+v+7,3,Su+v+7,4)。
优选地,所述步骤S5具体为:
计算取T的前t位作为明文P的认证码Tag,64≤t≤128。
参见图2,本发明还提出了一种基于SM4的认证解密算法,与上述的基于SM4的认证加密算法配套使用,包括:
步骤S101、输入密文C、密钥Key以及认证码Tag,利用状态更新函数得到数据初始化后的状态值;
步骤S102、对密文C进行分组,对分组后的密文顺序解密,然后再利用状态更新函数更新状态值;
步骤S103、执行加密算法中的认证码生成算法,得到新的认证码Tag’;
步骤S104、比对Tag’和Tag,如果两个认证码相匹配,那么系统解密出正确的明文P,否则加密失败,解密出的消息无效,说明明文P可能被篡改。
优选地,所述步骤S102中,对密文C按128bit进行分组。
优选地,所述步骤S102中,对分组后的密文按SM4解密算法顺序解密。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。术语“多个”指两个或两个以上,除非另有明确的限定。