一种基于安卓系统的第三方副署签名、验证方法与流程

文档序号:26194451发布日期:2021-08-06 18:48阅读:172来源:国知局
一种基于安卓系统的第三方副署签名、验证方法与流程

本发明涉及计算机信息安全技术,用于为安卓应用软件原生v2/v3签名机制提供一种第三方副署签名方法。



背景技术:

副署签名是在已经签名过的文件上附加签名,作为对已签名文件的认可和证明,其目的在于为了证明文件中的数据、动作或规定已签名者和副署签名者认可。

安卓应用程序v1签名机制下的数据格式是一个zip包,其分为三个数据块,包括zip条目的内容块(contentsofzipentries),zip中央目录块(centraldirectory),中央目录结尾块(endofcentraldirectory),解压之后是一系列目录和文件,其中目录meta-info是存放签名相关数据,manifest.mf文件用于存放安卓应用其他所有非meta-info文件夹内文件的名称以及杂凑值,而cert.rsa/cert.dsa是对android所有文件杂凑值的签名文件,cert.rsa/cert.dsa文件内容完全遵循pkcs7标准规范。

目前安卓系统的不断升级,安卓应用程序原生签名v1机制由于其存在很多缺点和安全隐患,逐步被安卓应用程序原生签名v2/v3机制所替代,但目前v2/v3签名机制下的副署签名方法还没有一个在不影响原生签名验证流程下安全可靠的副署签名机制。



技术实现要素:

针对上述技术问题,本发明提供一种基于安卓系统的第三方副署签名、验证方法,实现原生签名v2/v3机制下,更方便地进行软件安全认证或签名追溯。

为达到上述目的,本发明采用的技术方案为:一种基于安卓系统的第三方副署签名方法,在基于v2或v3签名机制的安卓应用软件签名数据块中,插入id-值对,其中在v2签名数据块中,id非0x7109871a;在v3签名数据块中,id非0x7109871a或0xf05368c0或0x3ba06f8c;id的值为副署签名数据;副署签名的方法是:以v2或v3签名数据块的值(v2签名机制中id为0x7109871a的值或v3签名机制中id为0xf05368c0的值)作为原文,使用第三方副署证书的私钥对原文进行副署签名。

由于安卓原生签名是对安卓数据块zip条路的内容块(contentsofzipentries),zip中央目录块(centraldirectory),中央目录结尾块(endofcentraldirectory)的杂凑进行签名,所以在此位置加入副署签名并不影响原生安卓应用的安装以及升级。

进一步的,上述第三方副署签名方法具体包括以下步骤:

s1、读取安卓应用软件原生签名块,从id0x7109871a中获取v2版本签名数据或从id0xf05368c0中获取v3版本签名数据。

s2、生成副署签名数据结构,包括版本号,杂凑算法,签发者主题项,签发者证书,签名算法等。

s3、使用从id0x7109871a中获取v2版本签名数据或从id0xf05368c0中获取签名数据作为附属签名的原文,对其做杂凑运算,把计算得出的杂凑值设置到可信属性中。

s4、使用副署签名可信属性数据作为原文使用副署签名证书私钥签名。

s5、把副署签名添加到原生签名块的id-值对中。

最后,签名结束。

进一步的,s2后进一步包括如下步骤:如副署签名需要加入可信时间,则从可信时间源中获取可信时间,在副署签名数据格式中加入可信时间属性。

本发明还公开一种基于安卓系统的第三方副署签名验证流程:

s11、读取安卓应用软件原生签名块,从id0x7109871a中获取v2版本签名数据或从id0xf05368c0中获取签名数据。

s12、分别读出每一个副署签名的数据结构。

s13、从副署签名数据结构中获取副署签名的数字证书,并验证数字证书的有效性。

s14、获取杂凑属性,对,从id0x7109871a中获取v2版本签名数据或从id0xf05368c0中获取得数据进行杂凑,将计算的杂凑值与可信属性中杂凑属性的杂凑值对比,如果不同则验证失败。

s15、把副署签名中可信属性数据作为原文,使用副署签名证书对副署签名值进行验证,验证失败则验证失败。

s16、如果还有副署签名则跳转s13。

进一步的,对副署签名的数字证书有效性验证的方法为:如果需要在线验证数字证书状态,则通过可信证书服务进行验证;如果不需要在线验证,则在本地验证证书有效性,验证证书链、验证黑白名单。

进一步的,s14前进一步包括:判断副署签名是否有杂凑属性,如果没有则验证失败。

通过本发明的方法可以在安卓签名机制v2或v3版本上添加多个副署签名,而不影响安卓签名v2版本原有的验证机制,可以正常的安装及升级,并能达到副署效果。

附图说明

图1为本发明实施例的安卓应用程序原生签名v2或v3机制下第三方副署签名数据格式。

图2为本发明实施例的基于安卓系统的第三方副署签名方法流程图。

图3为本发明实施例的基于安卓系统的第三方副署签名验证方法流程图。

图4为本发明实施例的基于安卓系统的第三方副署签名方法应用流程图。

具体实施方式

为了便于本领域技术人员的理解,下面结合实施例与附图对本发明作进一步的说明。

本实施例的副署签名由签名发起方(应用开发者、检测机构、应用商店等)使用第三方合法ca机构签发的代码签名证书,在不改变原有安卓应用程序打包签名流程的条件下,对已经打包并签名过的应用程序附加签名。副署签名可以是一个或多个签名。

与安卓应用程序原生签名v1整体数据结构不同的是,v2/v3在原有移动应用数据块基础上增加了apk签名块(apksignatureblock),形成包括zip条路的内容块(contentsofzipentries),apk签名块(apksignatureblock),zip中央目录块(centraldirectory),中央目录结尾块(endofcentraldirectory)的四部分数据块,在签名块中有id-value配对的数据结构,其中id为0x7109871a的代表v2签名,id为0xf05368c0代表v3签名。

本实施例主要在不改变原生安卓签名机制的基础上,解决在安卓原生签名v2,v3方案下的副署签名机制。从而给基于安卓应用v2,v3签名机制的安卓应用提供副署签名机制。

应用程序副署签名使用的是由第三方合法ca机构颁发的代码签名数字证书,副署签名着的身份由第三方ca机构严格审查并核实。在使用代码签名数字证书对应用程序副署签名后,在《中华人民共和国电子签名法》的保护下,有如下优势:

副署签名者身份实名认证,可追究法律责任。

应用程序副署签名后,每一个副署环节都可以被追溯。

副署签名由第三方ca机构颁发的代码签名数字证书完成,可信度更高,便于推广。

副署签名,可证明开发者对应用程序的拥有权,在遇到应用程序被盗版,侵权等行为时,将为应用程序开发者提供强有力的证据。

具体操作是在安卓应用程序签名数据块中,在v2签名数据块中插入id为非0x7109871a的任意id(或在v3签名数据块中插入id为非0x7109871a和0xf05368c0和0x3ba06f8c的任意id),id的值为副署签名数据,副署签名是以v2(或v3)签名数据块的值作为原文,使用第三方副署证书的私钥对原文进行副署签名,但在此并不具体约束副署签名数据格式,副署签名数据格式可以是pkcs#7,或者是如图1左侧3列展示的数据块,以及其他副署签名格式。如果放置在此位置都是在本发明保护的范围内,由于安卓原生签名是对安卓数据块zip条路的内容块(contentsofzipentries),zip中央目录块(centraldirectory),中央目录结尾块(endofcentraldirectory)的杂凑进行签名,所以在此位置加入副署签名并不影响原生安卓应用的安装以及升级。

本实施例的基于安卓系统的第三方副署签名流程如图2所示:

1、读取安卓应用软件原生签名块(apksignatureblock),从id0x7109871a中获取v2版本签名数据或从id0xf05368c0中获取签名数据。

2、生成副署签名数据结构(此结构不仅限于pkcs#7,以及如图xxx的副署签名数据格式,也可以为任意副署签名格式),包括版本号,杂凑算法,签发者主题项,签发者证书,签名算法等。

3、如副署签名需要加入可信时间,则从可信时间源中获取可信时间,在副署签名数据格式中加入可信时间属性。

4、使用从id0x7109871a中获取v2版本签名数据或从id0xf05368c0中获取签名数据作为附属签名的原文,对其做杂凑运算,把计算得出的杂凑值设置到可信属性中。

5、使用副署签名可信属性数据作为原文使用副署签名证书私钥签名。

6、把副署签名添加apk签名快中id-value对中(id可以是任意非0x7109871a和0xf05368c0和0x3ba06f8c的任一id)。

7、签名结束。

本实施例的基于安卓系统的第三方副署签名方法验证流程如图3所示:

1、读取安卓应用软件原生签名块(apksignatureblock),从id0x7109871a中获取v2版本签名数据或从id0xf05368c0中获取签名数据。

2、分别读出每一个副署签名的数据结构。

3、从副署签名数据结构中获取副署签名的数字证书。

4、如果需要在线验证证书状态,则通过可信证书服务进行验证。

5、如果不需要,则在本地验证证书有效性,验证证书链、验证黑白名单。

6、副署签名是否有杂凑属性,如果没有则验证失败。

7、获取杂凑属性,对,从id0x7109871a中获取v2版本签名数据或从id0xf05368c0中获取得数据进行杂凑,将计算的杂凑值与杂凑属性中的杂凑值对比,如果不同则验证失败。

8、把副署签名中可信属性数据作为原文,使用副署签名证书对副署签名值进行验证,验证失败则验证失败。

9、如果还有副署签名则跳转步骤3。

10、验证成功。

本实施例的基于安卓系统的第三方副署签名方法的应用如图4所示:

1、开发者开发完成应用程序后,生成安装原生的开发签名;

2、开发者向ca机构申请开发者副署签名证书。申请的过程需要开发者提交真实的开发者身份信息。

3、ca机构审核开发者身份信息,审核通过后向开发者代码签名证书。

4、开发者使用开发者签名证书对应的私钥对应用程序进行开发者副署签名;

5、如开发者需要检测机构对应用程序进行检测,则开发者将经过开发者副署签名的应用程序提交到检测机构进行检测。如不需要检测机构检测,则直接提交应用到应用商店,见步骤8);

6、如果检测功过,检测机构使用检测机构的证书对应的私钥生成检测机构副署签名。

7、检测机构将应用程序返回给开发者;

8、开发者准备向应用商店申请应用上架。

9、应用商店应用程序的各副署签名(开发者副署签名、检测机构副署签名等);

10、如各签名验证通过,应用商店使用商店的证书对应的私钥生成应用商店副署签名;

11、应用上架销售,商店在显著位置显示该应用程序的副署签名信息;

12、用户下载应用后,终端验证该应用程序的各副署签名;

13、验证通过后,成功安装应用。

以上的实施例仅为说明本发明的技术思想,不能以此限定本发明的保护范围,凡是按照本发明提出的技术思想,在技术方案基础上所做的任何改动,均落入本发明保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1