基于国密算法的即时通信加密软件系统的设计与实现
2020-06-16奚宇航黄一平苏检德王淑沛
奚宇航 黄一平 苏检德 王淑沛
(广西师范大学电子工程学院 广西 桂林 541004)
0 引 言
随着移动互联网的迅猛发展,中国已成为全球最大的互联网市场之一。CNNIC第42次《中国互联网络发展状况统计报告》显示,截至2018年6月,中国互联网用户总数达8.02亿,超过印度位居全球网民首位[1]。《2018年中国互联网流量年度数据报告》中指出截至2018年12月,以微信、QQ为首的即时通信聊天行业独立设备数达12.35亿,同比增长10.3%,行业渗透率达91.67%,其中微信的月独立设备达10.87亿台,为12月唯一破十亿的APP,同比增长9.5%[2]。以QQ和微信所代表的即时通信应用服务在拥有如此庞大数量的用户基础上随之而来的是巨大的安全隐患[3]。用户使用QQ、微信每天都会接收发送庞大的数据,其信息安全问题值得关注。信息安全保护的核心就是以RSA加密算法和随机AES密钥加密相结合进行即时数据加密[4]。虽然RSA的私钥保存在系统的通信服务器中,想要通过攻克AES算法的密钥获取聊天内容的难度很大[5]。但是,一方面由于承担的流量巨大,运营商或者服务商通常只对包数据中的个人数据进行隐藏,其中通信的大部分还是通过明文的方式进行传输,因此存在被窃取和篡改的可能性[6]。另一方面,在手机数据的显示端是明文显示,非常容易造成截取传播敏感社交信息、行政事务信息和金融信息的不良后果,进而造成非常恶劣的影响[7]。
针对上述即时通信软件存在的安全性问题,本文设计实现了基于国密算法的即时通信加密软件系统。以iOS操作系统的智能手机终端为例,本文采用随机密钥生成器,按照PKI的安全体系,利用对称与非对称加密算法相结合的思想,通过具备自主可控、安全性更高、性能更强的国密算法和智能移动终端的手势、数字密码锁相结合技术,实现了即时通信加密软件系统。本系统在数据传输层采用SM2公钥加密SM4随机密钥进行会话密钥分配,再由SM4密钥加密明文成密文进行传输。在消息显示层采用手势、数字密码锁的方式进行显示保护。
1 系统总体架构
整个通信系统由系统服务器、苹果APNs服务器和手机移动客户端组成。其中手机移动客户端主要由密聊首页、联系人和个人三个界面组成,系统的即时通信总流程图如图1所示。图中实线表示移动端A给移动端B发送即时消息,虚线为移动端B给移动端A发送即时消息,ID为系统服务器随机给移动端分配的标识符,UUID为移动客户端的苹果手机唯一标识符,其中ID和UUID形成键值对保存在系统服务器中,UUID可以被苹果的APNs服务器识别。在移动客户端进行三方登录成功后会由随机密钥生成器生成国密算法的SM2的公私钥对,公钥上传服务器,私钥保存在Keychain中。每次进行三方登录会更新Keychain中保存的私钥,同时更新系统服务器公钥。在首次即时通信的同时进行统一会话密钥操作,之后在移动客户端进行发送消息时,发送方通过统一的会话密钥将消息加密成密文和接收方的ID发送给服务器,由系统服务器找到ID对应的UUID,然后由苹果的APNs服务器将密文消息推送给接收方移动客户端进行会话密钥解密,最后通过手势数字密码验证成功后进行显示。
图1 系统即时通信总流程图
1.1 Keychain
Keychain是一个独立于APP之外的iOS系统级别安全的存储容器,可以用来为不同的应用保存敏感信息[8],比如私钥、密码、网络密码、认证令牌等。苹果用Keychain来保存Wi-Fi密码、VPN凭证等。Keychain中的Keychain Services安全机制保证存储的敏感信息不会被窃取,它可以包含任意数量的Keychain item,每条item 包含一条数据和很多的属性。每个Keychain包含数据和一组属性,对于需要保护的item,比如私钥或密码数据是加密的,会被Keychain保护起来;对于无需保护的item,比如证书数据未被加密。Keychain一共有五种类型:一般密码、网络密码、证书、密钥和身份证书(带私钥的证书),分别对应GenericPassword、InternetPassword、Certificate、Key和Identity[9]。本系统在三方登录成功后自动生成SM2密钥对,其中公钥上传系统服务器,私钥通过item关联Key类型保存在Keychain中,在统一会话密钥操作的过程中采用相同的方式将密钥保存在Keychain中。
1.2 国密算法
国产密码算法简称国密算法是由国家密码局认定的拥有自主知识产权的密码算法,在目前互联网领域使用最为广泛加密算法为SM2、SM3、SM4。其中SM2算法是基于ECC椭圆曲线密码机制使用256位曲线作为标准曲线的非对称加密算法,求解倍点的离散对数的难度远远大于大数分解和有限域上的离散对数求解,与目前使用最多的RSA非对称加密算法比较来看,其计算复杂度、安全度更高,相同安全性能下需要的公钥位数更少,加解密速度更快,在密钥生成速度上比RSA快百倍以上[10]。SM4是一种基于分组密码的对称加密算法,可实现对数据的实时加解密,保证数据的机密性,其加密机制是对明文消息进行固定块切割后再进行迭代加密,加密解密使用相同的密钥[11]。与目前使用较多的AES对称加密算法比较来看,在进行叠加加密轮操作的过程中两个算法的安全性均是基于S盒的非线性以及线性变换提供扩散作用,密钥的使用方式也均是将密钥与明文或加密结果“异或”。区别在于AES算法在每轮的最后使用密钥,而SM4算法在每轮开始使用密钥,在密钥调度算法的复杂度上,SM4更加简单[12]。故本系统在进行即时消息加密和统一会话密钥的过程中采用了安全性更高、自主可控性更好的国密算法进行即时消息加解密操作,这也更加符合国家自主可控的安全发展需求。
2 系统设计
系统采用了C/S架构模式,服务器端使用了J2EE标准、Spring框架和MySQL数据库,使用Java语言进行开发,连接遵循Http协议。移动客户端使用Objective-C语言进行开发,使用MVC架构和SQLite数据库,测试环境为iPhone simulator和iPhone真机。
系统对于即时消息的安全措施有两个方面:消息显示查阅层和传输层。在消息传输层中,移动客户端在三方登录后首先会自动随机生成SM2加密算法的公钥、私钥对,公钥上传到本地服务器,私钥保存到Keychain。三方登录成功后进入密聊首页进行添加好友的操作,好友添加成功是进行统一会话的前提,在互为好友进行第一次即时聊天时会通过拼接消息密文和会话密钥密文进行统一会话密钥操作,之后的即时消息加解密使用统一后的密钥。
系统在接收显示查阅端采用手势密码和数字密码结合进行显示安全验证保护。在聊天室显示聊天会话消息的时候会先进行手势密码解密校验,判断是不是第一次进入聊天室。如果是第一次进入聊天室则显示明文,之后再次进入聊天室全部消息统一显示“消息已加密!”,只有先设置手势密码才能对聊天室中消息进行解密后明文显示。在二次进入软件时会进行数字密码解密校验,不论软件是从熄屏状态、挂起后台还是完全杀死重新进入软件均需执行数字密码校验后才能进入软件,数字密码不要求用户强制设置。不进行数字密码设置二次进入软件后就不会唤起数字密码锁。
2.1 三方登录设计
系统的三方登录是进入系统软件的首步操作,包含了通过SDK获取关联值,登录系统服务器和添加用户信息。系统采用嵌入QQ和微信的SDK进行三方登录,使用三方登录对于用户来说能够显著降低用户的注册和登录成本,方便用户实现快捷登录或者注册;对应用来说降低了用户注册登录繁琐成本,减少隐形客户流失提高注册转化率;对第三方而言促进用户粘性,有利于对平台的拉新促活。三方登录成功后会生成SM2的公私密钥对,公钥上传系统服务器,私钥保存在Keychain中,详细步骤如下:
(1) 通过QQ或微信的SDK三方登录成功后得到微信或QQ关联登录用户的唯一标识uid和关联登录token,否则重新进行三方登录操作。
(2) 调用系统服务器的“服务器登录”接口传递uid和token参数,成功后会返回系统ID、系统昵称nickname、系统头像icon,否则重新登录系统服务器。
(3) 调用随机密码生成器生成SM2的公、私钥对(Uk,Pk),其中私钥保存在Keychain中。
(4) 调用系统服务器的“添加用户信息接口”传递ID和Uk参数到系统服务器,并以键值对的形式保存在数据库中。用户信息添加成功后跳转到密聊首页,否则重新进行添加。
三方登录的流程图如图2所示。
2.2 添加好友设计
添加好友是建立即时会话的前提,只有添加好友成功后,才能建立即时会话,统一会话密钥。在添加好友时扫描对方二维码获得系统对应的身份信息ID后会先与自己的ID进行比较。如果相同会弹出窗口“不能添加自己为好友!”;如果不相同则会和自己的联系人列表中的所有好友ID进行比较,如果有相同的,则直接跳转到与该联系人的聊天室界面,如果都不相同就会进行添加好友操作,向对方发送添加好友请求的即时推送,对方得到推送消息后同意添加则添加成功,反之不成功。系统的添加好友流程图如图3所示。
图3 添加好友流程图
2.3 即时消息推送设计
本系统在即时消息的推送过程中使用系统服务器和苹果原生的APNs服务器结合进行推送。系统具体推送步骤如下:
(1) 发送方Sender调用系统服务器的即时消息推送API接口接收会话密文消息Message和接收方Receiver的ID。
(2) 数据库保存Message并生成对应的字段Num。
(3) 根据Num生成一个URL查询地址Address,并且通过Receiver的ID找到对应的UUID。
(4) 调用APNs的接口将Address和UUID发送给APNs服务器,APNs根据UUID找到Receiver并推送Address即时消息。
在即时消息的推送过程中由于APNs每次推送的字节数有限,较长字节数的即时消息不能一次性推送完,所以通过访问URL查询地址获得完整的即时推送消息。系统的即时推送流程图如图4所示。
图4 即时推送流程图
2.4 传输安全设计
本系统在即时会话消息的传输过程中基于PKI的安全体系,采用数字信封的方式进行统一会话密钥分发。数字信封的原理就是采用对称加密算法加密大批量的数据,然后采用非对称加密算法对其中的对称密钥进行加密[13]。在解密的过程中首先用非对称加密算法解密获取对称加密算法的密钥,然后使用获取的密钥解密获取数据明文[14]。本系统在安全传输中主要包括两大部分:第一次建立即时会话时进行统一会话密钥操作;使用统一后的密钥对即时会话消息进行加密解密。
2.4.1统一会话密钥
系统在Sender(发送方)和Receiver(接收方)互为好友的前提下第一次进行即时聊天会统一会话密钥,具体步骤如下:
(1) Sender打开与Receiver的聊天室,监听此时聊天室的文字输入。
(2) 监听聊天室键盘中的“Send”按钮的点击,此时的即时会话明文为C1。
(3) 随机密码生成器会自动生成定长的SM4会话密钥Mk,并在Sender中的Keychain进行存储。同时通过Receiver的ID向系统服务器获取其SM2的公钥Pk。
(4) 通过公钥Pk加密Mk生成定长的会话密钥密文Ck。同时使用会话密钥Mk加密明文即时消息C1成C。拼接Ck和C成即时消息密文Message。
(5) 向系统服务器发送Message和Receiver的ID,系统服务器生成URL查询地址Address,调用APNs服务器接口发送Address和ID。
(6) APNs服务器通过ID将Address推送给Receiver。
(7) Receiver通过向Address发送POST请求获取到拼接的密文消息Message,截取定长的会话密钥密文Ck和即时密文消息C。
(8) Receiver用自己的私钥Uk解密Ck得到Mk,在Receiver中Keychain中存储Mk,同时用Mk解密C得到即时消息明文C1,并在Receiver的聊天室中显示。
当Sender和Receiver互加好友后的第一次即时聊天时,会在传递首条即时消息时同时传递会话密钥,经过第一条即时消息后Sender和Receiver就保持了统一的会话密钥,之后的即时聊天信息加解密全部使用Mk,本系统不作密钥的预先设定,每次三方登录后都会产生的新的SM2密钥对定期更新会话密钥。系统的统一会话密钥流程如图5所示。
图5 统一会话密钥流程图
2.4.2即时消息加解密
在Sender进行即时聊天中首先会判断是不是第一次与该好友进行即时会话,如果是,则会在第一次发送即时消息时进行统一会话密钥操作,如图5所示;如果不是,那么双方已经统一了会话密钥Mk,此时Sender只需要向系统服务器发送即时消息密文C和Receiver的ID,APNs调用推送接口推送的URL查询地址中只有即时消息密文C,Receiver接收到即时推送消息密文C,直接用本地保存的会话密钥Mk解密即可。同时在即时消息解密后在聊天室进行显示时要经过手势数字密码验证成功后才会显示即时消息明文。系统在Sender和Receiver进行即时会话通信中的消息加解密流程图如图6所示。
图6 即时消息加解密流程图
2.5 信息查阅安全设计
系统在对解密后的会话消息查阅的安全设计中采用数字、手势密码验证对会话消息进行安全保护。其中数字密码是进入APP时的安全验证,手势密码是在聊天中显示明文消息时的安全验证。详细信息查阅验证流程如下:
(1) 在进入软件的过程中判断如果是从熄屏状态、后台状态、完全杀死状态进入软件,那么就会查看用户有没有设置数字密码安全保护。如果设置了则会进入数字密码安全验证,验证成功进入软件,验证不成功则无法打开软件;如果没有设置数字密码安全验证则直接进入软件。
(2) 当进入软件后来到聊天室进行消息明文查阅时,判断是否第一次进入聊天室,如果是,则直接显示明文,否则进行手势密码安全验证。
(3) 在进行手势密码安全验证前,聊天室显示的聊天内容全部为“消息已加密!”,点击聊天室的“解密”按钮,判断用户有没有设置手势安全验证密码。如果设置了就直接进行手势安全验证,否则提示“请先设置手势密码”。设置成功后进行手势密码安全验证,验证成功后聊天记录刷新显示为明文消息。系统的信息查阅安全验证流程如图7所示。
(a) 数字密码验证 (b) 手势密码验证
2.6 技术创新点
本系统设计的创新点首要是在加密算法的选择上采用了安全性更高的自主国密算法,使得本系统在即时消息传输中更加安全;其次在公钥和会话密钥的保存中使用了Keychain安全存储容器,并且不对密钥做预先设定,每次三方登录会同步更新Keychain和系统服务器中的密钥,使得本系统在密钥保存中相对更加灵活安全;最后在信息查阅中设计了数字密码和手势密码安全验证两层保护,使得聊天室中的即时会话消息不能随意被查阅截取传阅,提高了信息查阅的安全性。
2.7 客户端实际应用效果图
系统的客户端实际应用效果图如图8、图9所示。其中,图8是手势、数字密码的界面图,图9是聊天室即时会话消息界面图。由图9可见在进入聊天室后显示的消息均为“消息已加密!”如果没有设置手势密码会提示“请先设置手势密码”,设置之后进入聊天室点击右上角的“解密”按钮,此时经过手势安全验证得到最终的明文即时会话消息。
图8 设置手势数字密码界面图
图9 聊天室会话消息图
3 结 语
本文研究的基于国密算法的即时通信加密软件系统依靠iOS平台设计并实现,在服务器端的即时消息传输层和移动客户端的即时消息显示层都进行了安全措施保护。在即时消息经过服务器进行即时推送的过程中使用非对称加密算法分发对称加密算法的密钥,并且在即时消息经过移动客户端进行即时消息查阅显示的过程中使用了手势、数字密码结合的方式对即时消息显示进行加密保护,最终设计并实现了本软件系统。该系统目前已在企业进行了试用,取得了不错的应用效果,满足商务人士更高要求的信息安全需求,具有较好的应用前景。本文设计方案也将为即时通信的安全方案提供有益参考。