基于Android V2签名机制的应用签名系统的设计与实现
2019-05-14于炳虎
于炳虎
摘要:Android7.0及以上版本开始使用一种新的签名打包机制APK Signature Scheme V2,相比V1版本签名,新的签名机制具有更多优点,随着Android系统版本的提升,V2签名机制将逐渐广泛使用。本文基于Android V2签名机制,设计实现了一套安全有效的移动应用签名系统,可实现APK的在线自动化签名,为应用签名领域提供了切实可行的实现方案。
关键词:Android;V2签名;移动应用;自动化
中图分类号:TP309 文献标识码:A 文章编号:1007-9416(2019)02-0192-03
0 引言
数字签名机制在Android应用开发中有着十分重要的作用,不做签名的应用是无法在Android系统上安装使用的,不管是真机还是模拟器,都必须经过数字签名后才可以安装。在开发调试阶段,虽然开发者并没有设置签名证书等操作,但其实开发平台已经自动给程序进行了签名,使用的是Debug证书。开发完成准备上线发布的时候,使用的是开发者创建的包含开发者信息的证书。Android使用数字证书来标识应用程序的开发者或者拥有者,应用程序更新的时候,系统要求应用签名必须一致,签名不一致的应用无法安装升级。如果开发的系统应用,使用到了一些系统权限,则需要保证应用签名和系统签名一致,否则无法安装。可见,Android签名机制是开发者在应用开发过程中必须面对的一个重要环节。Android在7.0版本系统之后发布了全新的应用签名机制APK Signature Scheme V2,V2表示第2版本,V1是上一版签名机制,相比于V1签名机制,新的签名机制V2版本具有更高的安全性和效率性,简单说就是更安全,防止二次打包,验签安装速度更快,用户体验更好。
本软件系统目标是基于Android系统最新的V2签名机制,实现一套在线自动化的自定义签名系统,用户使用此系统可实现对Android应用APK文件的在线自动化签名,签名后的应用可在目标终端上通过验签,安装使用。系统提供了友好的用户交互界面,操作简单,功能丰富,运行稳定。
1 相关技术介绍
1.1 数字签名
数字签名技术主要应用在信息安全领域,使用范围较广,主要用于證明某个信息或者数据是本人发出的或本人认同的,从数字签名的原理来看,它有三个特点,鉴权、完整性和不可抵赖性,其中不可抵赖性说明了消息的接收方可以通过数字签名来防止后续的抵赖行为。公钥加密算法是数字签名技术的实现基础和理论依据,在公钥密码体制中,用户有一对公私密钥对,公钥公开,私钥保密,用户使用私钥加密摘要信息,以生成数字签名。由于私钥的唯一保密性,保证了数字签名的可靠性[1]。
1.2 签名版本
Android V1签名机制是7.0系统版本之前一直使用的方案,V1使用的是Jar Signature,来自JDK。7.0之后Android推出了全新的V2版本签名机制,相比于V1版本,V2具有更快的验签和安装过程,并且增强了完整性保证。在V1版本中,解压缩打开签名后的APK包,在解压后的META-INF目录下一般会有三个文件,即MANIFEST.MF,CERT.SF,CERT.RSA三个文件,这里用不同的证书和签名方式得到的名字可能不同,以及对于多个证书的情况,就会对应有多个.MF,.SF,CERT.RSA文件。V1版本签名的主要问题有两个,一是在校验的过程中需要解压,二是APK包的完整性校验不够强。因此,Android推出了V2版本签名,它的推出就是解决V1存在的两个问题。V2签名后,APK文件从原来的3块划分,变成了4块划分,新增加了一个块,整体包括区块1(Contents of ZIP entries)、区块2(APK Signing Block)、区块3(ZIP Central Directory)和区块4(ZIP End of Central Directory),其中应用签名方案的签名信息会被保存在区块2中, 而区块1、区块3和区块4是受保护的,在签名后任何对区块1、3、4的修改都逃不过新的应用签名方案的检查。简单来说,V2签名模式在原先APK块中增加了一个新的块(签名块),新的块存储了签名,摘要,签名算法,证书链,额外属性等信息,并且这个块有特定的格式[2]。本文签名服务是基于V2的签名结构和组织形式实现的。
1.3 证书与算法
本软件系统签名证书支持X.509格式,证书的加密算法使用了国密SM2/SM3算法。X.509是一种通用的证书格式,由证书主体、证书签名算法标识、签名组成,和RSA证书主要不同的是SM2证书的签名算法标识。SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,在同等强度下相比RSA,SM2的密钥更短,SM2证书配套的签名算法是基于SM3的摘要算法[3]。
2 系统需求分析
为了实现系统的自动化,软件在设计阶段弱化了后台管理的功能性,如果需要增加系统的管控能力,后台管理可增加操作的审核,即应用签名需首先提交审核,后台管理员审核应用是否符合应用签名条件,审核通过后管理员负责应用的签名操作。审核机制可设计实现成可配置的管理项,这样更加灵活适用。
本系统在设计之初引入了操作审核机制,考虑到系统的自动化要求,帮助用户更加迅速的完成签名操作,系统在实现阶段将审核机制做成了可配置项。本系统功能模块如图1所示,详细功能需求描述如下:
(1)门户信息展示。门户包含首页等多个页面,门户首页展示系统平台提供的服务内容,还包括介绍安全领域的风险态势与政策法规的多个信息展示页。(2)应用管理。创建和管理应用,用户可以创建应用,包括上传应用,填写应用基本信息。用户可对所属应用进行管理操作,包括删除应用和查看详情。(3)应用签名。审核机制开启后,用户申请应用签名,等待管理员审核,审核通过后完成应用签名。关闭审核机制后,用户申请应用签名即可完成签名操作。(4)签名应用下载。下载签名应用,签名完成后,用户可以下载已签名的应用文件至本地。签名后的应用文件名称做了标识重命名。(5)用户注册。用户进入系统平台后,进入登录注册页面,填写用户信息和组织信息,注册账户。(6)用户登录与登出。用户进入系统平台后,进入登录页面,使用已注册的账户登录系统,在登录状态下可以注销账户,退出系统。(7)后台管理员登录与登出。管理员使用已分配的账户可以登录系统后台,在登录状态下管理员可以注销账户,退出系统。管理员账户可配置,不可申请注册。(8)后台用户管理。管理员可以查看所有已注册到平台的用户,可以根据用户手机号和用户名查询具体的用户,可以删除管理列表中的用户,可以启用或停用某一用户,停用后,此用户无法登录系统平台,启用后回复用户正常功能。(9)后台应用管理。管理员可以查看所有用户创建的应用信息,主要包括应用基本信息和签名状态等,以列表形式展示,管理员可输入应用名称等查询参数查询应用,可以查看应用详情、下载应用、进行应用签名操作。审核机制开启后,用户申请应用签名,管理员可以审核通过或驳回申请,审核通过后,管理员可以生成签名应用,用户可以下载签名后应用。用户未申请签名的状态下,管理员可以授权签名,签名后用户无法下载,只有管理员有权下载。授权签名操作主要面对一些特殊情况。(10)系统平台配置。配置前端用户的注册、登录、应用上传、审核至等功能项。主要对各功能性的开启关闭做配置,开启状态功能可以正常使用,关闭状态当前功能不可使用。以此做到管理员对系统平台的可管可控。
3 系统架构设计
移动应用签名系统基于前后端分离架构设计开发,前后端分离原则,简单来讲就是前端和后端的代码分离,也是技术上做分离,并且直接采用物理分离的方式部署,进一步促使进行更彻底的分离。前后端交互界面更加清晰,后端的接口简洁明了,更容易维护。前端Web服务,后端签名服务。服务的拆分提高了系统的松耦合,每个服务只负责单一业务逻辑的职能,在实现的过程中较为独立,服务之间的接口调用基于HTTP协议,采用Restful风格,数据格式JSON。系统架构图如图2所示。
4 系统实现
系统采用前后端服务分离架构,前端Web服务,后端签名服务,独立开发部署,物理分离。服务的拆分提高了系统的松耦合,每个服务只负责单一业务逻辑的职能,在实现的过程中较为独立,服务之间的接口调用基于HTTP协议,采用Restful风格。
4.1 前端Web服務
Web服务中,使用当前流行的VueJS前端框架,此框架采用MVVM模式设计,数据驱动和组件化开发是VueJS框架的核心思想。UI框架选用了基于VueJS的ElementUI框架,它是基于VueJS的桌面端UI框架,借用了Bootstrap框架的思想,使用了栅格布局,因此对移动端有一定的适配性。后台提供了部分数据的统计分析功能,因此引入了图表组件Vue-Echarts,这个组件库兼容IE6+、完美支持移动端、图表类型丰富,它是方便快捷的HTML5交互性图表库。Web服务器使用Nginx,使用反向代理实现前后端分离的架构。
4.2 后端应用服务
后端应用服务的实现基于Spring Boot框架,在用户权限管理的实现中,使用了Spring Security组件,它是一套Web应用安全性的完整解决方案,对一些非法访问做到了合理控制,数据缓存的处理方式中,采用了Spring Cache和Redis组合,Spring Boot与Redis做到了无缝对接,完美支持。由于签名逻辑是一个耗时任务,因此使用异步耗时任务机制以及定时任务机制,HTTP通信机制中采用了Spring整合的RestTemplate组件,这个组件是Spring提供的用于访问Rest服务的客户端,提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。对前后端数据接口调用,实现了跨域请求,做到了跨域的全局配置。
4.3 后端签名服务
签名服务独立部署在签名服务器中,并配置密钥管理服务。应用签名是本系统平台的主要业务功能,因此签名服务必须考虑并发、响应和容错等能力。签名证书支持X.509格式,证书采用国密SM2/SM3算法。签名实现使用的是Zipalign、Apksigner方案,基于V2签名结构与区块组成,两步完成对APK包的V2自定义签名,生成的签名信息以追加的方式插入到原签名信息后,生成的签名文件可指定存储路径。此过程可以实现写入渠道号等部分信息,因为签名块本身是没有加密的,因此补充信息可写入到这个块区,系统验签通过[3]。
4.4 日志与异常
系统日志模块的实现使用了Spring框架默认的日志组件,记录了系统运行中的逻辑错误、非法请求、异常操作等信息。日志级别定义了四级,即错误、异常、警告和信息。错误和异常日志在本系统实现中使用文件系统存储,用于用户系统运营维护阶段的排查,异常日志和错误日志会详细记录事件发生的上下文状态信息,警告和信息日志可根据管理需求定义范围。
5 结语
本文主要介绍了基于Android V2签名机制的移动应用自定义签名系统的设计与实现,所设计的移动应用签名系统可以实现应用的在线自动化签名与下载操作。系统采用了成熟的开发模式和架构风格,系统功能性集中,可满足用户的多项需求。为应用签名领域提供了切实可行的实现方案。
参考文献
[1] 谢佳筠,伏晓,骆斌.Android防护技术研究进展[J].计算机工程,2018(2):163-170.
[2] 牛豪飞.Android应用保护方案的设计与实现[D].北京邮电大学,2018.
[3] 丁竹青,张维君.基于对Android安全体系的分析[J].信息通信,2016(9):159-160.
Design and Implementation of Application Signature System
Based on Android V2 Signature Mechanism
YU Bing-hu
(First Research Institute of the Ministry of Public Security,Beijing 100048)
Abstract:Android version 7.0 and above began to use a new signature packaging mechanism APK Signature Scheme V2, compared with V1 version signature, the new signature mechanism has more advantages, with the upgrade of Android system version, V2 signature mechanism will gradually be widely used. Based on Android V2 signature mechanism, this paper designs and implements a secure and effective mobile application signature system, which can realize APK's online automatic signature, and provides a feasible implementation scheme for the field of application signature.
Key words:Android; V2 signature; mobile application;automation