一种面向安卓系统软件的扩展签名的实现方法

文档序号:6548890阅读:154来源:国知局
一种面向安卓系统软件的扩展签名的实现方法
【专利摘要】本发明是关于一种面向安卓系统软件的扩展签名的实现方法,该方法包括:S1,获取开发者生成的安卓程序文件;S2,对上述程序文件进行数字签名,生成扩展签名证书文件;S3,将扩展签名证书文件存放在安卓程序文件中的META-INF目录下;S4,将带有扩展签名证书文件的安卓程序解压文件重新打包生成安卓程序文件,完成扩展签名。本发明在不破坏安卓系统自签名机制的基础上进行了一次扩展签名,该扩展签名可用于开发者身份认证、安全检测认证等第三方数字认证,提高了安卓系统的安全性。
【专利说明】一种面向安卓系统软件的扩展签名的实现方法

【技术领域】
[0001] 本发明涉及一种软件签名方法,特别是涉及一种面向安卓系统软件的扩展签名的 实现方法。

【背景技术】
[0002] 近几年,由于我国移动通信网络的不断优化、移动设备智能终端的不断普及,移动 终端设备在不同的行业领域里提升了工作效率。我国目前移动互联网应用软件产业每天在 发生巨大的变化,互联网应用软件开发企业及开发者快速增长。分布在移动终端设备中的 手机游戏、手机支付、移动商务的应用软件,不仅加强了移动互联网与公众生活的联系,也 在不断地改变我们的生产和生活方式。
[0003] 然而,我们国家移动互联网产业在快速发展过程中,相应的问题也在不断凸现,绝 大多数人们在安装APP后发现会被窃取终端手机号和通讯录,有些"关闭不掉的广告"、 "无法卸载的应用"、"恶意扣费"的现象严重影响了人们对APP信任程度,并且很多企业的 应用开发者在不知情的情况下APP被盗版、内置恶意吸费代码,然后被上传到第三方应用 市场,一旦用户下载安装了这类应用,就会被恶意扣费。
[0004] 为确保经过检查的软件的安全合法使用,保障检测完成的软件的真实有效以及在 使用过程中与当初检查保持一致性,需要采用数字证书来实现其检查认证及真实完整,降 低现场测试的测试成本,提高检测效率。通过有效利用数字签名技术,实现对源码、资源文 件、主配文件的保障,从而获知APK产品代码是否安全、是否容易被反编译、源代码是否裸 奔、资源文件和Android主配文件是否被动用。
[0005] 现有的签名方法主要采用谷歌提供的自签名机制由开发者自发签名,谷歌未提供 扩展签名的方法,不利于第三方认证机构的认证和监管,因此安卓系统存在严重的安全隐 患。


【发明内容】

[0006] 本发明的目的在于解决现有的安卓软件自签名机制存在的不足,而提供一种面向 安卓系统软件的扩展签名的实现方法。
[0007] 本发明的目的是采用以下技术方案来实现的。本发明是一种面向安卓系统软件的 扩展签名的实现方法,包括以下步骤:步骤S1,获取开发者生成的安卓程序文件;步骤S2, 对上述程序文件进行数字签名,生成扩展签名证书文件;步骤S3,将扩展签名证书文件存 放在安卓程序文件中的ΜΕΤΑ-INF目录下;步骤S4,将带有扩展签名证书文件的安卓程序解 压文件重新打包生成安卓程序文件,完成扩展签名。
[0008] 本发明的目的还可采用以下技术措施进一步实现。
[0009] 较佳的,前述的面向安卓系统软件的扩展签名的实现方法,其中所述的步骤S1之 前还包括以下开发者自签名的步骤:步骤S11,开发者对原始程序文件中除ΜΕΤΑ-INF目录 以外的文件计算并生成摘要文件;步骤S12,利用开发者自有的私钥对摘要文件计算并生 成签名,将该签名与开发者自有的公钥一起保存在证书文件中,生成签名证书文件;步骤 S13,打包签名证书文件,得到开发者生成的安卓程序文件。
[0010] 较佳的,前述的面向安卓系统软件的扩展签名的实现方法,其中所述的步骤S2包 括:对程序文件提取数字摘要信息,利用哈希算法生成摘要文件。
[0011] 较佳的,前述的面向安卓系统软件的扩展签名的实现方法,其中所述的利用哈希 算法所计算的文件不包括ΜΕΤΑ-INF目录里面的文件。
[0012] 较佳的,前述的面向安卓系统软件的扩展签名的实现方法,其中所述的扩展签名 证书文件中包含证书签发机构的公钥。
[0013] 较佳的,前述的面向安卓系统软件的扩展签名的实现方法,其中所述的步骤S4之 后还包括以下开发者自签名的步骤:步骤S41,开发者对插入签名证书文件后的程序文件 中除ΜΕΤΑ-INF目录以外的文件计算并生成摘要文件;步骤S42,利用开发者自有的私钥对 摘要文件计算并生成签名,将该签名与开发者自有的公钥一起保存在证书文件中,生成签 名证书文件。
[0014] 较佳的,前述的面向安卓系统软件的扩展签名的实现方法,其中在步骤S4完成扩 展签名之后还包括以下验证扩展签名的步骤:步骤S51,认证机构获取安装包文件;步骤 S52,从安装包文件中提取扩展签名证书文件;步骤S53,利用扩展签名证书文件中的信息 验证扩展签名;步骤S54,利用扩展签名证书文件中的信息验证摘要文件;步骤S55,利用摘 要文件验证安装文件是否被篡改。
[0015] 较佳的,前述的面向安卓系统软件的扩展签名的实现方法,其中所述的步骤S53 包括:利用证书签发机构的公钥验证扩展签名。
[0016] 较佳的,前述的面向安卓系统软件的扩展签名的实现方法,其中所述的步骤S54、 S55包括:验证摘要文件的内容列表和安装包文件中除ΜΕΤΑ-INF目录以外的文件的摘要信 息的对应关系。
[0017] 借由上述技术方案,本发明一种面向安卓系统软件的扩展签名的实现方法至少具 有下列优点及有益效果:本发明在谷歌自签名基础上增加了一次扩展签名环节,提高了安 卓系统的安全性,该方法不影响原有谷歌的签名机制,采用可扩展签名技术,产生扩展签名 的过程独立可控,扩展签名可在原有谷歌签名之前或之后,互相独立,验证环节简单可靠, 该扩展签名可用于开发者身份的识别和该安卓系统应用的不可篡改性的验证。
[0018] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其他目的、特征和优点能够 更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。

【专利附图】

【附图说明】
[0019] 图1是本发明方法的流程图。
[0020] 图2是本发明方法的验证签名流程图。

【具体实施方式】
[0021] 为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结 合附图及较佳实施例,对依据本发明提出的一种面向安卓系统软件的扩展签名的实现方法 的【具体实施方式】、结构、特征及其功效,详细说明如后。
[0022] 请参阅图1,是本发明方法的流程图。包括以下步骤:
[0023] 步骤S1,获取开发者生成的安卓程序文件;
[0024] 步骤S1所述的开发者生成的安卓程序文件可以是开发者自签名后的程序文件, 也可以是开发者还未签名的程序文件。
[0025] 步骤S2,对上述程序文件进行数字签名(即扩展签名),生成扩展签名证书文件;
[0026] 步骤S2所述的签名方法符合X. 509协议等数字认证协议和技术标准,所认证的 文件不包括ΜΕΤΑ-INF目录里面的文件,即对程序文件提取数字摘要信息(如利用哈希算法 生成摘要文件)时,所计算的文件不包括ΜΕΤΑ-INF目录里面的文件。所述的扩展签名证书 文件中包含证书签发机构(即认证机构)的公钥,保证签名验证的时候利用证书签发机构 的公钥来验证签名。
[0027] 步骤S3,将扩展签名证书文件存放在安卓程序文件中的ΜΕΤΑ-INF目录下;
[0028] 扩展签名证书文件插入程序文件的ΜΕΤΑ-INF目录下,不影响开发者原有的自签 名机制。
[0029] 步骤S4,将带有扩展签名证书文件的安卓程序解压文件重新打包生成安卓程序文 件,完成扩展签名。
[0030] 本发明的以上认证机构扩展签名步骤S1?S4可以在开发者自签名之前或之后, 认证机构扩展签名与开发者自签名互相独立,互不影响。
[0031] 若是认证机构扩展签名在开发者自签名之后,则上述步骤S1所述的程序文件是 开发者已签名的程序文件,则在步骤S1之前(认证机构扩展签名之前)还包括开发者的自 签名步骤:
[0032] 步骤S11,开发者对原始程序文件中除ΜΕΤΑ-INF目录以外的文件计算并生成摘要 文件;
[0033] 步骤S12,利用开发者自有的私钥对摘要文件计算并生成签名,将该签名与开发者 自有的公钥一起保存在证书文件中,生成签名证书文件;
[0034] 步骤S12所述的将该签名与开发者自有的公钥一起保存在证书文件中,是为了签 名验证的时候利用开发者自有的公钥来验证签名。
[0035] 步骤S13,打包签名证书文件,得到开发者生成的安卓程序文件。
[0036] 步骤S13所述的开发者生成的安卓程序文件即开发者自签名的程序文件。
[0037] 若是认证机构扩展签名在开发者自签名之前,则上述步骤S1所述的程序文件是 开发者未签名的程序文件,则在步骤S4之后(认证机构扩展签名之后)还包括开发者的自 签名步骤:
[0038] 步骤S41,开发者对插入扩展签名证书文件后的程序文件中除ΜΕΤΑ-INF目录以外 的文件计算并生成摘要文件;
[0039] 步骤S42,利用开发者自有的私钥对摘要文件计算并生成签名,将该签名与开发者 自有的公钥一起保存在证书文件中,构成签名证书文件。
[0040] 在完成签名之后,认证机构进行扩展签名验证的步骤如下:
[0041] 步骤S51,认证机构获取安装包文件;
[0042] 步骤S52,从安装包文件中提取扩展签名证书文件;
[0043] 步骤S53,利用扩展签名证书文件中的信息验证扩展签名;
[0044] 上述步骤S53包括:利用证书签发机构的公钥验证扩展签名。
[0045] 步骤S54,利用扩展签名证书文件中的信息验证摘要文件;
[0046] 步骤S55,利用摘要文件验证安装文件是否被篡改;
[0047] 上述步骤S54和S55包括:验证摘要文件的内容列表和安装包文件中除META-INF 目录以外的文件的摘要信息的对应关系,如验证通过则说明安装包文件是已备案的开发者 发布的可信应用,未经篡改;如验证不通过则说明安装包文件被篡改。
[0048] 为了实现上述认证机构扩展签名的生成和验证,需要采用现有DSVS签名服务器 的证书应用接口封装成符合认证机构要求的专用签名验签工具,该工具主要包括生成和验 证两个子模块,其中生成子模块工具具备以下功能:配置根证书;展示程序内的关键文件 列表供检查机构进行选择;提供哈希功能,对选中的关键文件生成哈希;将哈希和检查机 构证书标识送入DSVS签名服务器生成含数字证书的数字签名;实现数字签名、上文件名、 文件相对路径、测评机构证书写入XML文件,并打包成数字签名XML文件。验证子模块工具 具备以下功能:根证书管理选择数字签名XML文件;验证数字签名文件的有效性,返回验证 结果。
[0049] 以下,针对本发明的签名方法,特举具体实施例进行详细说明。
[0050] 实施例一,开发者签名在前,认证机构扩展签名在后:
[0051] 第一步,获取原始程序文件B ;对程序文件B中除ΜΕΤΑ-INF目录以外的文件进行 哈希运算生成摘要文件digestB ;
[0052] 上述程序文件B是通过对待签名的压缩包UnsignedApp. apk解压缩而得到的具体 的程序文件,包括:配置文件(AndroidManifest. xml),程序的执行代码(classes, dex),资 源文件(/res目录下的文件)等。
[0053] 第二步,利用开发者自有的私钥对摘要文件digestB计算生成签名SigB,将签名 SigB与开发者自有的公钥一起保存在证书文件中,生成签名证书文件SignedFileB ;
[0054] 第三步,打包签名证书文件SignedFileB,得到开发者自签名的安卓程序文件 SignedApp-1st. apk ;
[0055] 第四步,解压缩程序文件SignedApp_lst. apk,并对除META-INF目录之外的文件 进行哈希运算生成摘要文件digestA ;
[0056] 第五步,经第三方认证机构对摘要文件digestA计算生成数字签名SigA, 将签名SigA与认证机构生成的公钥一起保存在证书文件中,生成扩展签名证书文件 SignedFileA ;
[0057] 第六步,将扩展签名证书文件SignedFileA插入程序文件SignedApp_lst. apk的 META-INF目录下;
[0058] 第七步,打包上述插入扩展签名证书文件SignedFileA后的程序文件,得到安装 包文件SignedApp_2nd. apk,完成扩展签名。
[0059] 以上安装包文件SignedApp_2nd. apk的签名的验证过程,包括认证机构利用专用 验签工具进行扩展签名的验证和安卓系统的自签名的验证。认证机构的扩展签名采用以下 步骤逐一进行验证:
[0060] 第一步,认证机构获取安装包文件SignedApp_2nd. apk ;
[0061] 第二步,从安装包文件SignedApp_2nd. apk的META-INF目录中提取扩展签名证书 文件 SignedFileA ;
[0062] 第三步,利用扩展签名证书文件SignedFileA中认证机构生成的公钥验证签名 SigA ;
[0063] 第四步,利用扩展签名证书文件SignedFileA中的信息验证摘要文件digestA ;
[0064] 扩展签名证书文件SignedFileA中除了包含签名SigA,还包括程序文件 SignedApp_lst. apk中除ΜΕΤΑ-INF目录以外的文件的摘要文件digestA,此处的验证摘要 文件digestA是指验证摘要文件digestA的内容列表和程序文件SignedApp_lst. apk解压 缩后的除META-INF目录以外的所有文件的摘要信息是否一一对应,如对应则说明安装包 文件SignedApp_2nd. apk是已备案的开发者发布的可信应用,未经篡改;如不对应则说明 安装包文件SignedApp_2nd. apk被篡改。
[0065] Android系统使用Packagelnstaller程序进行应用程序的安装,并在安装过程中 进行自签名的验证,验证步骤如下:
[0066] 第一步,安卓系统利用开发者自有的公钥验证签名SigB ;
[0067] 第二步,安卓系统验证摘要文件digestB ;
[0068] 签名证书文件SignedFileB中除了包含签名SigB,还包括原始程序文件B的除 ΜΕΤΑ-INF目录以外的文件的摘要文件digestB,此处的验证摘要文件digestB是指验证摘 要文件digestB的内容列表和原始程序文件B解压缩后的除ΜΕΤΑ-INF目录以外的所有 文件的摘要信息是否--对应,对应说明包体SignedApp_lst. apk可信,不对应说明包体 SignedApp_lst. apk在签名后被窜改。
[0069] 实施例二,认证机构扩展签名在前,开发者签名在后:
[0070] 第一步,认证机构获取开发者生成的未签名的程序文件C ;
[0071] 第二步,对程序文件C中除ΜΕΤΑ-INF目录以外的文件进行哈希运算生成摘要文件 digestC ;
[0072] 第三步,利用认证机构生成的私钥对摘要文件digestC计算并生成签名sigC, 并将签名sigC与认证机构生成的公钥一起保存在证书文件中,得到扩展签名证书文件 SignedFileC,并将扩展签名证书文件SignedFileC插入程序文件C的ΜΕΤΑ-INF目录下;
[0073] 第四步,对插入扩展签名证书文件SignedFileC后的程序文件除ΜΕΤΑ-INF目录以 外的文件进行哈希运算生成摘要文件digestD ;
[0074] 第五步,利用开发者自有的私钥对摘要文件digestD计算生成签名sigD,并将签 名sigD与开发者自有的公钥一起保存在证书文件中,构成签名证书文件SignedFileD ;
[0075] 第六步,对上述提到的程序文件和证书文件进行打包,得到安装包文件 SignedApp. apk,完成扩展签名。
[0076] 以上安装包文件SignedApp. apk的签名的验证过程,包括认证机构利用专用验签 工具进行扩展签名的验证和安卓系统的自签名的验证。认证机构的扩展签名采用以下步骤 逐一进行验证:
[0077] 第一步,认证机构获取安装包文件SignedApp. apk ;
[0078] 第二步,从安装包文件SignedApp. apk的META-INF目录中提取扩展签名证书文件 SignedFileC;
[0079] 第三步,利用扩展签名证书文件SignedFileC中认证机构生成的公钥验证签名 SigC ;
[0080] 第四步,利用扩展签名证书文件SignedFileC中的信息验证摘要文件digestc ;
[0081] 扩展签名证书文件SignedFileC中除了包含签名SigC,还包括程序文件C除 ΜΕΤΑ-INF目录以外的文件的摘要文件digestC,此处的验证摘要文件digestC是指验证摘 要文件digestC的内容列表和程序文件C除ΜΕΤΑ-INF目录以外的所有文件的摘要信息是 否--对应,对应说明安装包文件SignedApp. apk是已备案的开发者发布的可信应用,未 经篡改;如不对应则说明安装包文件SignedApp. apk被篡改。
[0082] Android系统使用Packagelnstaller程序进行应用程序的安装,并在安装过程中 进行自签名的验证,验证步骤如下:
[0083] 第一步,安卓系统利用开发者自有的公钥验证签名SigD ;
[0084] 第二步,安卓系统验证摘要文件digestD ;
[0085] 签名证书文件SignedFileD中除了包含签名SigD,还包括除META-INF目录以外的 文件的摘要文件digestD,此处的验证摘要文件digestD是指验证摘要文件digestD的内 容列表和除ΜΕΤΑ-INF目录以外的所有文件的摘要信息是否一一对应,对应说明安装包文 件SignedApp. apk是已备案的开发者发布的可信应用,未经篡改;如不对应则说明安装包 文件SignedApp. apk被篡改。
[0086] 以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽 然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人 员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰 为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质 对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
【权利要求】
1. 一种面向安卓系统软件的扩展签名的实现方法,其特征在于包括以下步骤: 步骤S1,获取开发者生成的安卓程序文件; 步骤S2,对上述程序文件进行数字签名,生成扩展签名证书文件; 步骤S3,将扩展签名证书文件存放在安卓程序文件中的ΜΕΤΑ-INF目录下; 步骤S4,将带有扩展签名证书文件的安卓程序解压文件重新打包生成安卓程序文件, 完成扩展签名。
2. 如权利要求1所述的面向安卓系统软件的扩展签名的实现方法,其特征在于步骤S1 之前还包括以下开发者自签名的步骤: 步骤S11,开发者对原始程序文件中除ΜΕΤΑ-INF目录以外的文件计算并生成摘要文 件; 步骤S12,利用开发者自有的私钥对摘要文件计算并生成签名,将该签名与开发者自有 的公钥一起保存在证书文件中,生成签名证书文件; 步骤S13,打包签名证书文件,得到开发者生成的安卓程序文件。
3. 如权利要求1所述的面向安卓系统软件的扩展签名的实现方法,其特征在于步骤S2 包括: 对程序文件提取数字摘要信息,利用哈希算法生成摘要文件。
4. 如权利要求3所述的面向安卓系统软件的扩展签名的实现方法,其特征在于利用哈 希算法所计算的文件不包括ΜΕΤΑ-INF目录里面的文件。
5. 如权利要求1所述的面向安卓系统软件的扩展签名的实现方法,其特征在于所述的 扩展签名证书文件中包含证书签发机构的公钥。
6. 如权利要求1所述的面向安卓系统软件的扩展签名的实现方法,其特征在于步骤S4 之后还包括以下开发者自签名的步骤: 步骤S41,开发者对插入扩展签名证书文件后的程序文件中除ΜΕΤΑ-INF目录以外的文 件计算并生成摘要文件; 步骤S42,利用开发者自有的私钥对摘要文件计算并生成签名,将该签名与开发者自有 的公钥一起保存在证书文件中,生成签名证书文件。
7. 如权利要求1或3所述的面向安卓系统软件的扩展签名的实现方法,其特征在于在 步骤S4完成扩展签名之后还包括以下验证扩展签名的步骤: 步骤S51,认证机构获取安装包文件; 步骤S52,从安装包文件中提取扩展签名证书文件; 步骤S53,利用扩展签名证书文件中的信息验证扩展签名; 步骤S54,利用扩展签名证书文件中的信息验证摘要文件; 步骤S55,利用摘要文件验证安装文件是否被篡改。
8. 如权利要求7所述的面向安卓系统软件的扩展签名的实现方法,其特征在于步骤 S53包括: 利用证书签发机构的公钥验证扩展签名。
9. 如权利要求7所述的面向安卓系统软件的扩展签名的实现方法,其特征在于步骤 S54、S55 包括: 验证摘要文件的内容列表和安装包文件中除ΜΕΤΑ-INF目录以外的文件的摘要信息的 对应关系。
【文档编号】G06F21/12GK104156638SQ201410250845
【公开日】2014年11月19日 申请日期:2014年6月6日 优先权日:2014年6月6日
【发明者】何能强, 云晓春, 王宇, 王明华, 赵慧, 张鸿江, 徐晓燕, 严寒冰, 李佳, 纪玉春, 赵宸, 金红, 杨满智, 王小华, 陈普贵 申请人:国家计算机网络与信息安全管理中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1