基于安卓系统的国密硬件加密系统设计与实现
2019-01-08孙金奇
孙金奇
摘要:移动手机的快速普及以及移动互连网络的快速发展,给人们的生活工作带来了极大的便利,人们可以使用移动手机终端的APP来实现上下班打卡、编辑工作文件、访问公司内网、与朋友视频通话等工作生活需求。但是,移动互联网的信息安全问题也为我们的生活工作带来了新的挑战,手机端硬件加密系统应运而生。然而,不同的手机硬件加密系统硬件构造、硬件体系不同,并未形成统一的对外接口,导致手机应用APP必须使用不同的版本来适配不同的加密硬件。因此,本系统主要解决硬件系统的统一对外出口问题,在不修改应用APP的前提下统一调用不同的加密硬件,故此,安全APP是本系统的核心。
关键词:Android;国密;加解密;签名验签;终端可信硬件密码模块
中图分类号:TP311.52 文献标识码:A 文章编号:1007-9416(2019)10-0187-03
0 引言
近年来随着移动手机的应用与普及以及手机操作系统的进一步革新与完善,手机应用需求越来越多。例如:手机支付使我们再也不必带钱包拿几百块钱现金甚至银行卡去买东西,可以通过手机扫码支付,直接打通用户、商家与银行的信息流。二十年前,我们去陌生城市旅游商务等需要买一张地图,甚至到一个地方就需要向路人打听如何去往自己的目的地,但是当前的手机导航让我们无论身处何地,只要有网络信号就可以快速获取当前位置、如何去往目的地。可以说智能手机的发展改变了我们的生活,但是智能手机的快速发展也存在一定的问题,例如:假基站获取我们的网络信号来进行诈骗与传销;手机网络病毒远程植入获取用户通信录、个人信息、支付信息等;网络通信内容被人窃听甚至网上售卖等。因此,亟需手机安全加密系统来保护个人信息不泄露。
当下手机端的加密有硬件加密和软件加密之分,软件加密是通过加密软件来保护信息流入流出的安全可靠,但软加密效率相对低下。硬件加密主要是通过手机内置加密芯片(如华为Mate系列手机的Inse加密模块)、TF加密卡以及手机贴膜卡实现。这三种加密方式可以实现相同的业务功能,但是由于这三种加密方式的硬件基础不同,应用程序如果想分别调用这三种方法只能编写三个版本的软件系统或编写一个统一的调用接口来统一调用。显然使用三个版本应用程序工作量巨大是不可取的,因此需要一款统一的加密硬件调用接口程序供应用程序调用,这也是本文的重点。
1 相关技术介绍
1.1 Android系统架构
Android系统是当下最流行的手机操作系统之一,是由谷歌公司开发一款基于Linux系统的开源操作系统。Android平台的核心是Android系统,该平台是由操作系统、中间件、应用程序以及用户界面组成。其中,其核心软件是基于Linux系统,使用C语言开发编写;中间件使用C++语言编写,为底层操作提供支持与保障;应用软件是由各种应用公司开发研制,用于满足用户的各种功能需求。
Android系统采用与大部分操作系统类似的分层架构,如图1所示分为四个层次,分别是:APPLICATIONS(应用层)、APPLICATION FRAMEWORK(应用框架层)、运行库层以及LINUX KERNEL(Linux内核层)。应用层主要是面向用户的可视化功能软件,如:短信、日历、天气、微信、备忘录等,所有面向应用层的软件均由JAVA编写。应用框架层为应用层的软件提供运行框架,提供了丰富的UI接口,方便应用开发人员调用底层服务。运行库层包含丰富的C/C++库,通过应用框架层为开发者提供各种功能服务。Linux内核提供各种进程管理、内存分配、设备驱动管理、堆栈是文件系统管理等功能服务。
Android系统开发有活动(Activity)、服务(Service)、广播接收器(BroadcastReciever)、内容提供商(Content Provider)四大组件。活动是所有应用程序的根本,所有程序都运行在活动中。应用程序每一个界面就是一个活动,其中有各种图片、文字、按钮等,类似于一个网页。服务不提供页面,可以与其它组件交互,在后台运行。服务是一种程序,在不主动关闭的情况下它可以在后台运行很长时间。广播接收器广泛应用于应用程序间的信息传输机制,应用程序可以使用其对外部事件进行有针对性的过滤。内容提供商实现多个应用程序之间数据的共享。
1.2 国密加密体系
国密算法是由国家密码局指定的国产商用密码算法,可实现商用加解密运算、签名验签认证等功能服务,其主要算法有SM1、SM2、SM3、SM4。
SM1是商用密码算法中的分组标准对称算法,密鑰与分组长度均为128bit,该算法强度与软硬件速率性能均与AES类似,该算法只是以IP核的形式存储在安全芯片中,具体算法内容保密,不向外公开。SM2是一款国密局发布的椭圆曲线公钥密码算法,其相对于国际上的RSA更加安全可靠。椭圆曲线是由维尔斯特拉斯方程确定的平面曲线,椭圆曲线是基于离散对数问题问题实现的加密方式,至今暂无有效的方法解决这一问题。椭圆曲线算法相对于RSA有如下优势:(1)计算量小,处理速度快,相对于RSA可以快速实现签名验签和加解密;(2)带宽需求低;(3)安全性高,160位的椭圆曲线密码强度与1024位的RSA强度相当;(4)存储量小,SM2的存储空间是192-256bit,RSA的存储空间为2048-4096bit;(5)计算复杂度高,SM2的计算复杂度是完全指数级别,而RSA的计算复杂度为亚指数级别。SM3是我国采用的一种散列函数密码标准(GM/T0004-2012《SM3密码杂凑算法》)。在我国商用密码中,其主要应用于签名验签、消息认证码生成验证、随机数生成等,其生成效率与SHA-256相当。SM4是国家秘密局采用的分组密码标准(GM/T0002-2012《SM4分组密码算法》),SM4主要用于数据的加密与解密,其分组长度与密钥的长度都是128比特,加密与密钥扩展算法均采用32为非线性迭代结构,S盒子是固定的8bit输入输出。
2 系统架构设计
手机移动应用加解密与签名验签系统采用的是前后端分离的设计结构。前后端分离设计,是一种前端代码与后端代码的分离,也是前端内部逻辑与后端内部逻辑的分离(前后端系统可以独立地完成其内部子功能逻辑),更是前后端物理部署的分离。前后端分离使业务逻辑更加清晰,减少了前后端功能的耦合,某个子功能的错误不会迭代影响其他子功能的错误,更重要的是前端错误不会影响后端服务器错误,后端服务器功能增减与更新迭代不会影响手机前端功能。终端包括智能手机等在内的移动终端,其硬件部分由可信终端硬件和可信的硬件密码模块等组成;软件部分由移动操作系统、业务APP和安全APP组成,如图2所示。其中业务APP是需要加密的手机端普通APP程序,安全APP是手机端APP与终端可信硬件密码模块之间的统一接口(直接调用手机内置安全加密芯片(Inse)、手机贴膜卡加密芯片、TF加密卡芯片)[1]。
3 系统实现
本系统采用前后端分离的架构逻辑,前端手机安全APP模块,后端签名服务器、功能调用接口、终端可信硬件密码模块,相互逻辑解耦合,独立开发、独立部署。手机端服务的业务功能逻辑拆分提高了系统开发安全、降低了系统冗余。同时,由于功能模块相互低耦合度,提高了系统的鲁棒性,降低了开发难度[2,3]。
3.1 后端服务器
后端服务器主要实现对手机前端应用APP发来的签名包进行验签,验签成功后获取SM2(国密)国密加密公钥值。然后,通过签名响应的形式将本地生成的SM4(国密)通信密钥以获取的SM2(国密)公钥加密的形式进行传输,进而实现会话密钥的交换。后端服务器同时还进行时间戳辨认、IMSI号审核、包名审计等,以确定申请人信息无误,防止重放攻击等恶意代码入侵,并以日志的形式记录每一条签名信息与加密信息。
3.2 手机端安全APP模块
手机端安全APP模块主要实现对终端可信硬件密码模块的选择,以确保应用APP使用最优的加密方式。由于手机端加密方式多样,为保证应用开发的统一,必须使用统一的信息对外出口。因此,安全APP模块是本系统的核心,是终端可信硬件密码模块与手机应用APP之间的桥梁。手机应用APP不需要知道调用的是何种加密模块,只需要调用统一接口,就可以实现应用的签名/验签和加/解密功能,在软件上实現了加密模块选择调用的透明化!
安全APP模块会按照加密速度优先级以优先调用手机内置安全加密芯片(Inse),如果无此安全APP的情况下,调用手机贴膜卡加密模块,最后调用TF加密卡模块。如果这几个安全加密模块都不存在,则返回硬件未找到,否则,调用优先级最高的加密模块实现国密签名/验签和加/解密操作。安全APP在启动时首先会初始化手机的硬件资源,如手机的IMEI号,应用APP包名、终端可信硬件密码模块的配置情况等。安全APP一旦获取了终端可信硬件密码模块的信息,将主动选择该密码模块(如有多种密码模块则选择最优模块)。当应用APP发来签名请求时,安全APP将整合已有信息调用签名接口获取带有签名公钥签名信息。然后,当应用APP获取服务端发来的响应信息时,安全APP使用验签接口,调用终端可信硬件密码模块验签信息,并使用SM2解密密钥获取SM4会话密钥。最后,应用APP即可与服务器使用SM4会话密钥进行会话操作。其中会话密钥以键值对的形式与应用APP的包名存储在安全APP中,以区分不同应用APP的会话密钥。
3.3 手机端功能接口
(1)签名接口。签名接口主要是在手机端安全APP初始化选定终端可信硬件密码模块后,与终端可信硬件密码模块通信的接口,通过签名接口安全APP可以获取加密模块的SM2(国密非对称加密算法)签名公钥以及使用SM2(国密国密非对称加密算法)私钥签名的SM2(国密非对称加密算法)加密公钥签名信息值,通过bate64转化后发送给应用APP。(2)验签接口。验签接口主要实现在后台服务器验签应用APP发送的签名数据成功后,发送响应数据。其数据也是一串签名数据,其中包含SM2(国密国密非对称加密算法)签名公钥、使用SM2(国密国密非对称加密算法)公钥加密后的SM4(国密对称加密算法)会话密钥值等。通过验签接口,可以验签后台服务端发来数据的合法性,同时通过安全APP解密获取会话密钥值。(3)加密接口/解密接口。通过验签接口获取的存储在安全APP中的会话密钥,应用APP可以实时与后台服务器进行SM4(国密对称加密算法)加密的会话通信。(4)公钥导出接口。由于签名验签时需要验签方获取签名方的公钥信息,因此需要通过公钥导出接口调用安全APP获取加密模块的签名验签公钥字符串。
4 结语
本文主要介绍了基于安卓系统的国密硬件加密系统的设计与实现,所设计的移动应用加密系统可以实现在线硬件加密模块的调度,包括加密模块发现、模块选择以及硬件功能调用等。用户在不需要关心硬件加密模块的前提下,快速实现加解密与签名验签操作,在软件层实现对用户的透明不可见,用户不需要关心自己调用的是何种硬件加密方式,极大地提高了用户调用效率,减少了下游用户的开发难度,提高了开发效率。
参考文献
[1] 热夏提·艾尔肯.基于透明加密的Android平台加密系统的设计与实现[D].中国科学院大学(中国科学院工程管理与信息技术学院),2017.
[2] 李济洋,赵鹏远,刘喆.基于加密SD卡的内网移动终端可信接入方案[J].网络与信息安全学报,2019,5(04):108-118.
[3] 王志贺,骆钊,谢吉华,顾伟,陈海超,许超,周亮.基于SM2密码体系的SD卡的电力移动终端安全接入方案[J].中国电力,2015,48(05):75-80.