APP下载

SM2/SM3/SM4在Android系统中的研究与实现

2019-01-21韩星玥杨中皇

西安邮电大学学报 2018年6期
关键词:数字签名加密算法密钥

郑 东, 韩星玥, 杨中皇,2

(1.西安邮电大学 无线网络安全技术国家工程实验室, 陕西 西安 710121;2.高雄师范大学 软件工程与管理学系, 台湾 高雄 82444)

移动终端智能设备已从最初的智能手机领域进入教育、医疗、军事等重要行业。智能手机逐渐取代个人电脑成为人类生活、工作和学习中不可或缺的一部分[1-2]。基于Linux的Android手机操作系统[3]是目前最热门的移动操作系统之一。Android手机代码的开源性,导致其逐渐成为大量恶意攻击者的首选目标之一[4]。美国《消费者报告》2012年度“State of the Net”报告指出,近40%的美国手机用户没有采取适当的安全措施,在账户未经准许的情况下,560万人被擅自访问[5]。TrustGo公司分析应用报告显示,在Google Play上,3.15%的应用有可能泄露用户隐私或者存在恶意行为。而在中国国内知名的91应用市场上,该比例则为19.7%。同时,大量的第三方应用市场的存在,对于Android设备的安全造成了严重的威胁。

随着智能手机的普及,不论是个人,还是企业或政府单位都不可避免地用到自带设备(bring your own device, BYOD)[6]。但是,现有网络安全设备存在局限性,使得恶意软件能够通过智能手机转移到PC或服务器上,可以实现对隐私的窃取。高级加密标准(advanced encryption standard, AES)、椭圆曲线数字签名算法(elliptic curve digital Signature algorithm, ECDSA)和安全哈希算法(secure hash algorithm, SHA)等是智能手机所用的核心密码算法,但是,这些算法不符合中国商用密码规范,其安全性不适用于所有的智能终端,并且用户的资料预设储存在国外,难以保护中国消费者的隐私。目前,国家密码管理局公布了适用于商用和军用等的密码算法,同时,SM2椭圆曲线公钥密码算法与SM9标识密码算法[7]也已成为国际标准。

本文将满足我国商用密码规范的密码算法SM2/SM3/SM4算法添加到Android源码中,以期为Android系统提供更加健全的加密机制。

1 Android系统架构与系统工具

1.1 Android系统架构

Android系统[8]架构从下到上依次是Linux内核层、系统库与运行时库层、应用程序框架层和应用程序层,如图1所示。这种层次化设计既能够为系统提供安全,还能够保持操作系统的开放性。

图1 Android系统框架

Linux内核层包括系统层安全机制、内存管理、进程管理、网络堆栈及一系列的驱动模块,位于硬件与其他的软件层之间,提供与硬件交互。与此同时,还可以区别与阻隔该层与下一层,即使是该层自身产生了一些变化,也不会对任何一层产生影响。需要特别注意的是,内核层中不包含虚拟性的内存文件。

系统库与运行时库层包含了Android系统的系统库、运行环境和应用框架层。系统函数库与运行时库层是为应用程序运行提供服务的一些C/C++库;核心库中既包含了Java核心类库的大多数功能,也包含了利用Java本地调用(Java native interface,JNI)等方式封装的C/C++库,向应用框架层提供调用底层程序库的接口,还包含了解释运行Java字节码的ART虚拟机。应用软件架构层为应用开发者提供了用以访问核心功能的应用程序接口(application program interface, API)。

在Android系统中,上层应用程序需利用Java语言开发。比如,通信工具、通讯录等应用程序。

1.2 Android系统工具

Android系统工具不仅包括Android调试桥(android debug bridge, ADB)和logcat等,还包括开发工具Gradle、TraceView和本地开发工具包(native development kits, NDK)等。

1.2.1 Android调试工具

ADB是一个可执行程序,位于软件开发工具包(software development kit, SDK)安装路径下platform-tools目录中,可快速建立与模拟器的通信渠道。ABD采用客户端/服务器(Client/Server,C/S)模型,框架由ADB Client、ADB Server和ADB Daemon 等3个重要部分组成。

Logcat是一个命令行工具,用于得到程序对应的日志信息。Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和某些系统的缓冲区中记录,缓冲区可以通过logcat命令来查看和使用。

1.2.2 Android开发工具

Gradle是新一代自动化编译工具,也是Android Studio中应用程序开发默认的自动化构建工具。它是在Ant、Maven等自动化编译工具基础上发展而来,使用了一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置,具有Ant和Maven等工具的所有优点。Gradle也是一个基于Java虚拟机(java virtual machine, JVM)的构建工具,支持maven,Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件。

Groovy和Java语法相似,并且可以达到二进制级别的兼容,对于JVM,两者之间没有任何区别。同时,Groovy还可以使用Java中的各类API,并且两者可以进行混合编程。

Gradle的生命周具体包含Initialization、Configuration和Execuation共3个阶段,如图2所示。

图2 Gradle的生命周期

TraceView是Android SDK中内置的工具,可以加载trace文件,用图形的形式展示代码执行时间、次数及栈的调用,便于分析进程中各个线程的执行情况。其中Trace文件可以通过代码、Android Studio或者Dalvik虚拟机调试监控服务(dalvik debug monitor service, DDMS)生成。使用DDMS生成的trace文件,分析算法的执行及布局等。

NDK是一个工具集,可以开发C/C++动态库,并能自动将动态链接库(.so库)打包到应用程序中。在Ubuntu Linux下,使用NDK工具集成的交叉编译器编译openssl源代码,生成libcrypto.so动态库;在Windows下,通过Android Studio中的NDK实现对动态库打包。

2 密码算法

2.1 Android加密算法

Android系统基于Java加密体系结构(java cryptography architecture, JCA),并且JCA提供了一个可扩展的加密服务程序框架和一组API,即加密服务基于JCA保护系统安全。支持现有主要密码原语,如分组密码算法AES;消息摘要算法SHA-1和消息摘要算法(message digest algorithm, MD5);数字签名算法ECDSA和RSA算法。

ECDSA[9]是使用椭圆曲线密码(elliptic curves cryptography, ECC)对数字签名算法(digital signature algorithm, DSA)的模拟。ECDSA于1999年成为美国国家标准学会(american national standards institute, ANSI)标准,并于2000年成为电气和电子工程师协会(institute of electrical and electronics engineers, IEEE)和美国国家标准与技术研究院(national institute of standards and technology,NIST)标准。在1998年被国际标准化组织(international organization for standardization, ISO)所接受。

2001年,美国国家标准技术研究所发布了AES[10]算法,旨在取代DES[11],成为广泛使用的标准。AES算法明文分组的长度为128位即16字节,密钥长度可以为16字节,24字节或者32字节(128位,192位,256位)。AES算法加密过程涉及到4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey)。

SHA算法是美国国家标准技术研究所发布的国家标准FIPS PUB 180,主要适用于数字签名标准(digital signature standard, DSS)[12]里面定义的数字签名算法DSA。其中规定了SHA-1、SHA-224、SHA-256、SHA-384和SHA-512共5种单向散列算法。

2.2 SM2/SM3/SM4密码算法

密码学中常用的算法有对称算法、非对称算法和散列算法。为了提高算法的安全性,中国国家密码管理局制定了一系列密码标准及其应用规范,如SM1、SM2、SM3、SM4、SM9。其中已公布有SM2、SM3、SM9和SM4。

2.2.1 SM2椭圆曲线公钥密码算法

2010年12月,中国首次公开发布了SM2椭圆曲线公钥密码算法[13],2012年成为中国商用密码标准(标准号为GM/T 0003-2012),2016年成为中国国家密码标准(标准号为GB/T 32918-2016),2017年SM2数字签名算法成为ISO/IEC国际标准,是中国公钥密码算法标准。SM2算法的主要内容包含数字签名算法、密钥交换协议和公钥加密算法等。

2.2.2 SM3密码杂凑算法

SM3[14-15]杂凑算法是中国国家密码局于2010年12月17日公布的hash算法的商用标准。该标准可以对长度为l(l<264)比特的消息m,经过填充、迭代压缩、生成杂凑值,其杂凑值的输出为256比特。由于该标准使用了迭代压缩结构,将填充后的原数据,通过布尔函数与置换逻辑处理,在压缩过程中充分地进行扩散和扰乱,所以,SM3密码杂凑算法具有较高的复杂性与不可逆性。

2.2.3 SM4分组密码算法

由中国国家密码管理局于2006年1月6日公布的分组加密算法,是无线标准中的分组加密算法,2012年改名为SM4[16]。该算法是一个分组算法,其分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密密钥是加密密钥的逆序。

3 Android系统实现

3.1 系统架构与开发

3.1.1 系统架构

在Android 8.0源代码的基础上,通过添加SM2/SM3/SM4密码算法,实现对Android所提供加密服务安全性的改造,提高系统安全性和用户隐私的完整性。利用Android Studio开发应用程序,通过性能分析工具TraceView,分析具有相同功能的不同函数;同时利用AOSP平台,从Android网站上下载Android 8.0源代码,在源码中添加密码算法,通过编译源码生成刷机的系统镜像文件。

3.1.2 系统开发

在Linux系统下通过编译修改后的Android 8.0源代码,实现密码算法SM2/SM3/SM4在Android系统中的应用。

系统APK“FIPS”的功能界面如图3所示。点击SM3,在弹出对话框中输入“asdfghjkl”,输出哈希摘要,如图4所示。SM4加解密的过程分别如图5和图6所示。SM2加解密以及签名验证的过程分别如图7-10所示。

图3 FIPS功能界面

图4 SM3哈希

图5 SM4的加密过程

图6 SM4的解密过程

图7 SM2加密过程

图8 SM2解密过程

图9 SM2签名过程

图10 SM2验证过程

3.2 系统性能测试及分析

3.2.1 测试环境

在Android中,CPU频率可能会因功耗的变化而改变,从而影响设备的性能和测试结果的准确性。为了减少可能存在干扰源的影响,在测试之前,强制退出设备中所有非关键运行应用程序和服务。同时,断开WIFI和蓝牙服务,以避免在测试期间可能会影响设备的外部干扰。

利用Linux(Ubuntu 16.04 LTS)系统,实现对Android 8.0源代码的修改和编译。其客户端使用Android 8.0源代码结合Android Studio进行应用程序的开发,客户端开发与测试环境如表1所示。移动端实验设备为Pixel 2,其系统参数如表2所示,服务器端的开发环境如表3所示。

表1 客户端开发与测试环境

表2 Pixel 2系统参数

表3 AOSP源码编译环境

3.2.2 测试方法

通过运行应用程序测量算法的速度,测试过程可以在代码中加入简单的测时语句来直接显示出运行时间,循环1 000次求平均值,代码如下。

long startTime=System.currentTimeMillis();

long endTime=System.currentTimeMillis();

Role role=new Role();

(public class Role { void role(){

for(int i=0;i<1000;i++){

int sum=0;

sum=sum+i; } )

Log.d(TAG,"(endTime-startTime)");

3.2.3 测试结果

将SM2/SM3/SM4密码算法和Android系统中内置密码算法的进行对比测试。Java语言实现的SM2/SM3/SM4密码算法在Pixel 2上的测试结果如图11所示。

图11 Java语言实现的算法效能测试结果

为了提高该密码算法在Android系统中的高效性,采用NDK技术,通过C语言实现的SM2/SM3/SM4密码算法在Pixel 2的测试结果如图12所示。

图12 C语言实现的算法效能测试结果

对比图11和图12,可以得出C语言实现的算法速度比Java语言实现的速度快至少5倍。

因此,在满足用户对算法速度要求的基础上,Android系统中引入SM2/SM3/SM4密码算法,实现其密码功能,提供良好的用户体验。其中,SM2公钥加密算法是基于椭圆曲线算法ECC,使用椭圆曲线点定义密钥对,即使黑客使用常用暴力破解,也难以进行攻击,从而增强了算法的安全性,更有效地保护隐私数据。

4 结语

从移动手机安全性出发,对Android安全机制进行研究和分析,在Android 8.0源码中添加SM2/SM3/SM4密码算法,通过开发应用程序实现其密码功能,重新编译Android 8.0源码并定制ROM包实现刷机,使Android系统具备基于SM2/SM3/SM4密码算法的安全能力。测试结果表明,引入中国国家密码算法的Android系统能有效地保护用户隐私和数据。

猜你喜欢

数字签名加密算法密钥
基于正交拉丁方理论的数字签名分组批量验证
幻中邂逅之金色密钥
幻中邂逅之金色密钥
基于DES加密算法的改进研究
交通运输行业数字签名系统的设计与实现分析
密码系统中密钥的状态与保护*
浅析计算机安全防护中数字签名技术的应用
基于整数矩阵乘法的图像加密算法
TPM 2.0密钥迁移协议研究
混沌参数调制下RSA数据加密算法研究