本发明涉及信息安全领域,特别涉及一种基于国密算法的安卓信息加密系统及方法。
背景技术:
信息安全问题一直以来都是全世界持续关注的焦点问题之一,信息能否安全的传递关系着每一个人自身的隐私安全。随着现代通信的不断发展和移动终端自身性能的不断提高,手机等移动终端已经进入了智能数字时代,通过智能手机进行通信变的越来越广泛,通信服务也越来越多样化,其中手机信息服务是一种使用广泛的通信服务。人们通过信息收发个人和商业信息,但信息的传输面临着安全性的问题,如窃取、拦截、修改等,而个人隐私信息和商业信息的泄露可能会带来严重的后果。因此,端对端之间信息的安全传输就显得尤为重要,设计一个信息加密软件来保障信息传递的安全是有必要的。
软件的运行离不开操作系统的支持,因此,想要设计信息加密软件,首先要了解智能手机的操作系统。目前智能手机中最主要的操作系统平台之一就是android系统,由于其开源性和易用性等诸多优越性,android系统成为当今移动设备的主流操作系统。但android系统的开源性及宽松的权限管理机制又使其具有很大的安全隐患。因此,本系统旨在实现基于android平台的信息加密系统。
针对手机的信息加密系统,当前研究主要存在以下两方面的局限性:
(1)使用单一对称密码,密钥分配困难。对称密码体制的优势在于加密系统花费小,算法简易,效率非常高。缺点是密钥必须以安全的方式秘密地分配和交换,这使得对称密码的密钥的分发往往过程复杂,代价高昂;
(2)使用单一非对称密码,加密效率低。为了改善对称密码体制的弊端,人们又提出了非对称密码体制。在非对称密码体制中,加密和解密使用的是两个不同的密钥,加密密钥是公开的密钥,称为公钥,而解密密钥,只有解密人自己掌握,称为私钥。非对称密码体制的安全性在于非法攻击者无法从公开的加密密钥推算出相应的解密密钥,其优势则在于两个使用者能够安全的沟通而无需通过秘密信道传输密钥。不过,非对称加密体制虽然解决了对称加密体制密钥传输的难题,但其加密算法较复杂,加密速度较慢,因此并不适合加密数据量大的信息。
技术实现要素:
本发明主要解决的技术问题是:克服现有技术的不足,提出一种基于国密算法的安卓信息加密系统及方法,将国密sm2算法、sm4算法密码体制相结合的混合密码体制,综合了对称密码体制和非对称密码体制的优缺点,使用对称密码算法加密明文,用非对称密码算法加密对称密码算法使用的密钥。既利用了对称密码体制的加解密速度快的优势,又解决了密钥安全分发的问题,提高加密速度,减少资源消耗,进一步提高信息传输和密钥共享的安全性,实现服务器统一管理存储密钥信息。
本发明技术解决方案:一种基于国密算法的安卓信息加密系统,其创新性体现在:
(1)通过分析研究算法理论基础及查阅大量文献,提出一种将国密sm2算法、sm4算法体制相结合的混合密码体制,以增强信息在传输过程中的安全性和完整性。实验证明,这种算法体制可提高信息加密的效率,并占用较少的手机资源;
(2)采用安全哈希算法(securehashalgorithm)对发送前后的明文分别进行哈希比较,验证发送方身份以提高信息传输和密钥共享的安全性。同时设计sqlite数据库和手机终端的交互,解决私密明文收发双方数据传输的问题;
(3)实现私密信息安全系统,对在通信网络中传输的明文进行sm4算法加密,并采用sm2算法对sm4算法的密钥进行加密,方便服务器实现sm2算法公钥的管理和sm4算法密钥的交换。
本发明的一种基于国密算法的安卓信息加密系统,包括输入信息编码模块、sm2算法和sm4算法混合加解密模块、数据库导入联系人模块和数字签名认证模块;
输入信息编码模块,用于处理经过android系统发送中文字符时可能出现的乱码问题;处理中文字符时,将中文字符转为unicode编码的处理,英文和数字的ascii码小于128,根据此条件判断读入的字符是否为中文字符,如果是中文字符,则将每个中文字符转化为16位的unicode码,并在前面加上unicode转义字符‘\u’,然后将明文转换为对应的十六进制比特串;接收方收到密文后,只需在解密后对前面带有‘\u’字符的部分进行unicode码转中文字符的操作即得到正确的明文;
sm2算法和sm4算法混合加解密模块。发送方输入想要发送的内容,经输入信息编码模块处理后采用sm2算法与sm4算法混合加解密模块来加密发送方发送的明文;sm4算法是一个分组算法,数据分组长度为128bit,密钥长度为128bit;加密算法采用32轮迭代结构,每轮使用一个轮密钥。先用sm4算法加密明文,再用sm2算法加密sm4算法的密钥。在加密sm4算法密钥的过程中,先将sm4算法的密钥转化为椭圆曲线上的点,再用sm2算法的公钥进行加密,加密后进行解码即将加密后椭圆曲线点的坐标转化为sm4算法密钥的密文比特串;
解密过程与加密过程类似,接收方在接收到发送方发送的密文和加密密钥后,先根据sm2算法的私钥对sm4算法的密钥进行解密,然后再用sm4算法的密钥解密密文,得到明文。本发明为发送方和接收方提供了方便简洁的接口,解密的操作对接收方是透明的,接收方只需将接收到的密文输入到解密文本框,选择解密操作即可;即使传送过程中密文被截获,因为sm2算法的私钥保存在发送方手中,非法攻击者无法破译加密的密钥,更无法破译密文,因此明文的安全性得到保证;
数据库导入联系人模块。发送方输入明文后,运用数据库技术,实现联系人的快速导入。发送明文时,发送方可从存储联系人信息的sqlite数据库中添加接收方,还能将新的联系人信息存入到sqlite数据库中,为发送方提供更简便快捷的接口;
数字签名认证模块,接收方收到密文后,认证发送方身份,验证传输的安全性;发送方对需要发送的明文进行哈希求得摘要,然后用发送方的sm2算法的私钥对摘要结果进行加密,形成数字签名;发送方同时将sm2算法和sm4算法混合加解密模块加密后的密文、sm2算法和sm4算法混合加解密模块加密后的密钥、数字签名传输给接收方,接收方通过判断数字签名验证算法比较摘要信息是否相同,进行发送方身份的验证,若相同则发送方身份验证成功,不相同,则未通过验证,请求发送方重发。
所述sm2算法和sm4算法混合加解密模块中,sm4算法为分组密码算法,加解密的分组大小为128bit,故对明文进行加解密时,若消息长度超过128bit,需要进行分组,若消息长度不足128bit,则要进行填充;对于sm4算法的数据填充,采用pkcs7填充方式,不足部分填充为需要填充字节数,若数据大小是分块大小n的倍数时,则增加一个全为n的分块,n是大于1的整数。
所述sm2算法和sm4算法混合加解密模块中,用sm2算法对sm4算法的密钥进行加密的流程为:先将sm4算法的密钥转化为椭圆曲线上的点,再用sm2算法的公钥进行加密,加密后进行解码即将加密后椭圆曲线点的坐标转化为sm4算法密钥的密文比特串。
本发明的一种基于国密算法的安卓信息加密方法,包括以下步骤:
第一步,发送方输入明文,输入信息编码模块处理明文中的中文字符;
第二步,对需要发送的明文进行哈希求得摘要,用发送方sm2算法的私钥对摘要进行加密,形成数字签名;
第三步,sm2算法和sm4算法混合加解密模块加密发送方输入的明文,形成密文;
第四步,发送方通过数据库导入联系人模块,导入联系人信息;
第五步,发送方同时将密文、sm4算法加密后的密钥、数字签名传输给接收方;
第六步,接收方收到信息后,sm2算法和sm4算法混合加解密模块根据sm2算法的私钥对sm4算法的密钥进行解密,然后再用sm4算法的密钥解密密文,得到明文;
第七步,接收方通过数字签名认证模块比较明文的摘要是否相同,用来验证发送方身份,若相同则身份验证成功,不相同则未通过验证,请求重发;
上述第一步中,采用输入信息编码模块处理发送方发送的明文,处理发送中文字符时可能出现的乱码问题,将中文字符转为unicode编码。
上述第三步中,用sm2算法和sm4算法混合加解密模块加密发送方输入的明文;对信息加密的算法进行检测,验证基于国密算法的混合加密信息系统加密的性能。
上述第六步中,混合加解密模块根据sm2算法的私钥对sm4算法的密钥解密。接收方将收到的加密后的密钥编码为椭圆曲线上的密文点,用sm2算法的私钥进行解密,得到椭圆曲线上的明文点,再将明文点解码为明文。
本发明与现有技术相比的优点在于:
(1)本发明采用基于椭圆曲线ecc的sm2算法以及基于feistel结构的sm4算法的混合密码加密算法,结合了对称密码体制和非对称密码体制的优点,实现了对信息的快速加密以及对密钥的安全便捷管理,大大提高了信息的加密效率,富有创新性,同时又兼顾了安全性,还可多平台移植,易于推广和实现;
(2)本发明从安全性、加解密有效性和加解密效率三方面验证。从性能分析和测试结果来看安全性良好,加解密效率较高,占用空间较小;对待加解密信息多样的内容能做好识别处理并完成加解密,加解密有效性良好;
(3)目前信息加密的研究成果大多基于对称密码体制诸如aes、des、3des等和非对称密码体制如rsa、elgamal、ecc等的研究,而将其国产化并应用在国密算法上,还没有相关的研究成果。目前关于国密算法如sm2算法、sm4算法在加密信息传输上的加解密效率、兼容性、时间空间成本等方面的研究也很少。
附图说明
图1为本发明系统框图;
图2为本发明中sm4算法加密明文示意图;
图3为本发明中数据库导入联系人模块展示图;
图4为sm2算法使用方程y2=x3–x曲线图;
图5为本发明中sm2算法加解密流程图;
图6为本发明中sm4算法加密流程图。
具体实施方式
本发明解决方案通过以下方案实现:发送方在输入文本框内输入想要加密发送的明文,并在联系人区域添加接收方的手机号码,点击加密并发送按钮,即可将sm4算法加密后的密文、sm2算法加密后sm4算法的密钥和数字签名发送给接收方;接收方收到密文后,将密文输入到相应文本框区域,点击解密按钮即可看到明文。
如图1所示,本发明的一种基于国密算法的安卓信息加密系统,包括输入信息编码、sm2算法和sm4算法混合加解密、数据库导入联系人、数字签名认证四大模块。
输入信息编码模块。android系统下很容易实现英文或数字的编码,但在发送中文字符时可能出现乱码问题。因此在发送含有中文的信息时应做编解码方面的处理。输入信息编码模块在处理中文字符问题时,采用将中文字符转为unicode编码的处理,英文和数字的ascii码小于128,可根据此条件判断读入的字符是否为中文字符,如果是中文字符,则将每个中文字符转化为16位的unicode码,并在前面加上特殊字符‘\u’,然后将明文转换为对应的十六进制比特串,就可以正确传送明文并加密。收到被加密的信息后,只需在解密后对前面带有‘\u’字符的部分进行unicode码转中文字符的操作即可得到正确的明文。
sm2算法和sm4算法混合加解密模块。采用sm2算法与sm4算法混合的加密算法来加密明文。先用sm4算法加密明文,再用sm2算法加密sm4算法的密钥。在加密sm4算法密钥的过程中,先将sm4算法的密钥转化为椭圆曲线上的点,再用sm2算法的公钥进行加密,加密后进行解码即将加密后椭圆曲线点的坐标转化为sm4算法密钥的密文比特串;
由于sm4算法是分组密码算法,加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,若消息长度不足,则要进行填充。如图2所示,对于sm4算法的数据填充,采用pkcs7填充方式,不足部分填充为需要填充字节数。若数据大小是分块大小n的倍数时,则增加一个全为n的分块,n是大于1的整数。如8字节块,需要填充4字节时,则如下填充。
…|dddddddddddddddd|dddddddd04040404|
解密过程与加密过程类似,接收方在接收到发送方发送的密文和加密密钥后,先根据sm2算法的私钥对sm4算法的密钥进行解密,然后再用sm4算法的密钥解密密文,得到明文。本发明为发送方和接收方提供了方便简洁的接口,解密的操作对接收方是透明的,接收方只需将接收到的密文输入到解密文本框,选择解密操作即可;即使传送过程中密文被截获,因为sm2算法的私钥保存在发送方手中,非法攻击者无法破译加密的密钥,更无法破译密文,因此明文的安全性得到保证;
数据库导入联系人模块。该系统具有联系人管理功能模块,其功能界面如图2所示。该功能模块运用了数据库技术,实现联系人的快速导入。在发送明文时,发送方可以通过点击联系人图标,从存储联系人信息的sqlite数据库中添加接收方,而且还可以将新的联系人信息存入到sqlite数据库中,提供更简便快捷的接口。
数字签名认证模块。本模块主要是验证发送方身份,确保传输的安全性。本系统首先对需要发送的明文进行哈希求得摘要,然后用发送方sm2算法私钥对摘要进行加密,从而形成数字签名。发送方同时将密文、sm4算法加密后的密钥、数字签名传输给接收方,接收方通过数字签名验证算法比较摘要是否相同,来进行验证发送方身份。若相同则身份验证成功,不相同则未通过验证,请求重发。
本发明通过sm2算法和sm4算法的混合加密算法实现对于明文的加密。发送方首先在输入文本框内输入想要加密发送的明文,在联系人区域添加接收方的手机号码,点击加密并发送按钮,即可将经过sm2算法公钥加密后sm4算法的密钥、sm4算法加密后的密文和数字签名发送给接收方;接收方将密文和密钥输入到软件对密文解密的相应文本框区域,点击解密按钮即可查看到原来的明文。为方便使用,系统提供了联系人导入功能,同时还提供了数字签名认证功能,进一步提高了信息加密传输过程的安全性。
sm2算法和sm4算法混合加解密模块将sm2算法、sm4算法结合。其中:
sm2算法由国家密码管理局于2010年12月17日发布,全称为椭圆曲线算法。椭圆曲线并不是椭圆,之所以称为椭圆曲线是因为它们是用三次方程来表示的,并且该方程与计算椭圆周长的方程相似。一般而言,椭圆曲线的三次方程形为:y2+axy+by=x3+cx2+dx+e(其中a,b,c,d,e是满足某些条件的实数,因为方程中的指数最高是3,所以称之为三次方程,或者说方程的次数为3),而sm2算法使用的方程为:y2=x3+ax+b,在sm2算法标准中,通过指定a、b系数,确定了唯一的标准曲线。
图4为sm2算法使用方程y2=x3–x曲线图。
①p点为基点;
②通过p点做切线,交与点2p点,在2p’点做竖线,交与2p点,2p点即为p点的2倍点;
③进一步,p点和2p点之间做直线,交与3p’点,在3p’点做竖线,交与3p点,3p点即为p点的3倍点;
④同理,可以计算出p点的4、5、6…倍点;
在椭圆曲线算法中,将倍数d作为私钥,将q作为公钥。sm2算法的安全性基于数学难题离散对数问题实现,即考虑等式q=dp,其中q、p属于同一条椭圆曲线ep(a,b),d<p,则通过p、q求d是计算安全的。从直观上理解,正向计算一个倍点是容易的,反向计算一个点是p的几倍点则困难的多。
非对称加密算法sm2加解密算法流程图如图5所示:
1、发送方选定一条椭圆曲线ep(a,b),并取椭圆曲线上一点作为基点g,使得g的阶n是一个大素数;
2、发送方选择一个私有密钥k,计算p=kg,然后公开(p,a,b,g,p),p为公钥,保密k,k为私钥;
3、发送方将待传输的明文变换成为ep(a,b)中一个点pm,然后选择随机数r,计算密文cm=(rg,pm+rp),如果r使得rg或者rp为o,则要重新选择r;
4、将密文发送给接收方;
5、接收方计算cm:(pm+rp)-k(rg)=pm+rkg-krg=pm,即得到椭圆曲线上的明文点;
6、再对上述得到的明文点进行解码就得到明文。
作为公钥密码算法,sm2算法具有密钥分配和管理简便的优点,而且现今对椭圆曲线研究的时间短,至今一直没有找到亚指数级算法。正是由于目前所知求解ecdlp的最好方法是指数级的,这使得选用sm2算法作加解密及数字签名时,所要求的密钥长度比其他公钥密码算法如rsa算法要短得多。
所述sm4算法是分组对称密码算法,用于实现数据的加解密运算,以保证数据和信息的机密性,其加密流程图如图6所示。
该算法的分组长度为128bit,密钥长度为128bit。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
1.密钥及密钥参量。加密密钥长度为128bit,表示为mk=(mk0,mk1,mk2,mk3),其中mki(i=0,1,2,3)为字。轮密钥表示为(rk0,rk1,…,rk31),其中rki(i=0,…,31)为字。轮密钥由加密密钥生成。fk=(fk0,fk1,fk2,fk3)为系统参数,ck=(ck0,ck1,…,ck31)为固定参数,用于密钥扩展算法,其中fki(i=0,…,3)、cki(i=0,…,31)为字。
2.轮函数f采用非线性迭代结构,以字为单位进行加密运算,称一次迭代运算为一轮变换。
设输入为
f(x0,x1,x2,x3,rk)=x0⊕t(x1⊕x2⊕x3⊕rk)
3.合成置换t:
(a)非线性变换τ。τ由四个并行的s盒构成。设输入为
s盒中的数据均采用16进制表示。
(b)线性变换l。非线性变换τ的输出是线性变换l的输入。设输入为
c=l(b)=b⊕(b<<<2)⊕(b<<<10)⊕(b<<<18)⊕(b<<<24)。
4.密钥扩展算法中加密算法的轮密钥由加密密钥通过密钥扩展算法生成。
加密密钥mk=(mk0,mk1,mk2,mk3),
令
首先,(k0,k1,k2,k3)=(mk0⊕fk0,mk1⊕fk1,mk2⊕fk2,mk3⊕fk3)
然后,对i=0,1,…,31:
rki=ki+4=ki⊕t’(ki+1⊕ki+2⊕ki+3⊕cki)
说明:
(a)t’变换与加密算法轮函数中的t基本相同,只将其中的线性变换l修改为以下l’:l’(b)=b⊕(b<<<13)⊕(b<<<23);
(b)系统参fk的取值,采用16进制表示为:fk0=(a3b1bac6),fk1=(56aa3350),fk2=(677d9197),fk3=(b27022dc);
(c)固定参数ck的取值方法为:
设cki,j为cki的第j字节(i=0,1,…,31;j=0,1,2,3),即
5.对称加密算法sm4加解密算法
定义反序变换r为:r(a0,a1,a2,a3)=(a3,a2,a1,a0),
设明文输入为
xi+4=f(xi,xi+1,xi+2,xi+3,rki)=xi⊕t(xi+1⊕xi+2⊕xi+3⊕rki),i=0,1,…,31。(y0,y1,y2,y3)=r(x32,x33,x34,x35)=(x35,x34,x33,0)。
sm4算法的解密变换和加密变换结构相同,不同的仅是轮密钥的使用顺序。
加密时轮密钥的使用顺序为:(rk0,rk1,…,rk31);
解密时轮密钥的使用顺序为:(rk31,rk30,…,rk0)。
本发明一种基于国密算法的安卓信息加密方法,包括以下步骤:
第一步,发送方输入明文,输入信息编码模块处理明文中的中文字符;
第二步,对需要发送的明文进行哈希求得摘要,用发送方sm2算法的私钥对摘要进行加密,形成数字签名;
第三步,sm2算法和sm4算法混合加解密模块加密发送方输入的明文,形成密文;
第四步,发送方通过数据库导入联系人模块,导入联系人信息;
第五步,发送方同时将密文、sm4算法加密后的密钥、数字签名传输给接收方;
第六步,接收方收到信息后,sm2算法和sm4算法混合加解密模块根据sm2算法的私钥对sm4算法的密钥进行解密,然后再用sm4算法的密钥解密密文,得到明文。
第七步,接收方通过数字签名认证模块比较明文的摘要是否相同,用来验证发送方身份,若相同则身份验证成功,不相同则未通过验证,请求重发;
本发明从加密算法的有效性、解密算法的有效性以及算法的性能这三个方面来进行检测,测试内容及其预期结果如表1所示。
表1
(1)检测加密算法的有效性。对包含内容分别为纯英文(含字符),纯中文,纯数字,英文数字,中文数字,英文中文,中文英文数字混合的不同数据在安卓环境中代入加密模型进行检测。
(2)检测解密算法的有效性。对包含内容分别为纯英文(含字符),纯中文,纯数字,英文数字,中文数字,英文中文,中文英文数字混合的不同数据在安卓环境中代入解密模型进行检测。
(3)检测算法的性能。私密信息加密中,主要是对明文的加密。因此,这里将主要对信息加密的算法进行实验分析,验证基于混合加密的国密算法能够更好地用于私密信息加密。
经测试,本发明在中文、英文、数字、中英文混合、中文数字、英文数字、中英文数字混合的方面的加密性能良好,实现了密钥的保密传输以及明文的正确加解密。
本发明实现了在个体机上以及模拟器平台上的性能测试,在运算速度、传输成功率、加解密成功率方面均表现良好,且程序运行流畅,没有卡顿现象。
本发明实现了收发双方的身份认证,防止了中间人攻击等一系列攻击行为,保障了密钥共享及信息加密的安全性。