具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:将签名文件存放在META-INF目录下,在厂商验证签名APK文件时还原得到原始APK文件,以通过厂商验证;同时,也不会影响终端操作系统对原始APK文件的原生验签机制,实现统一APK签名,且提高终端操作系统的兼容性。
请参照图1至图7,本发明提供一种APK签名认证方法,如图1所示,包括:
对原始APK文件和收单机构签名描述信息进行签名,得到签名信息;
插入签名信息至原始APK文件内部的META-INF目录下,生成签名后APK文件;
终端获取所述签名后APK文件;
获取所述签名后APK文件中的签名信息;获取原始APK文件;
终端验证所述签名信息和所述原始APK文件的合法性,验证通过后,终端安装所述原始APK文件。
从上述描述可知,本发明的有益效果在于:本发明在实现了统一APK签名认证方式,方便终端管理者管理不同终端设备和减少管理成本,提高用户体验的同时;通过将签名信息放置在原始APK内部的META-INF目录下,利用META-INF目录只在厂商对终端设备对签名后APK文件的验签过程中才会对其进行验证,而在终端的操作系统安装原始APK文件的原生验签过程中则不会对其进行验证的特点,在厂商对终端所下载的签名后APK文件进行验签之前,还原出原始的APK文件,以便顺利通过厂商的验签;同时,又能顺利通过终端的操作系统的原生验签,确保终端在保证所下载的原始APK文件的安全性前提下,正常的安装原始APK文件,提高统一APK签名认证方式的兼容性。
进一步的,所述“获取原始APK文件”具体为:
删除所述签名后APK文件中的签名信息,还原所述原始APK文件;或者
从所述签名后APK文件的二进制数据中提取所述原始APK文件。
由上述描述可知,还原原始APK文件的方式可以是删除插入所述原始APK文件中的签名信息,也可以直接从所述签名后APK文件的二进制数据中提取出原始的APK文件。还原原始APK文件的目的是为了在之后厂商对所述签名信息和所述原始APK文件的合法性验签过程中,对其核心数据进行计算,比对计算结果时不会由于原始APK文件的META-INF目录下插入了签名文件而导致比对有误,不能顺利安装,确保顺利通过厂商对其的合法性验证。
进一步的,所述“插入签名信息至原始APK文件内部的META-INF目录下”具体为:
在原始APK文件的压缩的文件内容源数据尾部添加经过压缩后的所述签名信息;
在压缩的目录源数据尾部添加所述签名信息的目录数据;
相应修改所述原始APK文件的目录结束标识结构。
由上述描述可知,收单机构的签名工具可以利用终端操作系统自带的AAPT工具,将压缩后的签名信息放置在原始APK指定的目录下,同时相应修改目录数据和目录结束标识结构。如图7所示,插入所述签名信息后生成的签名后APK文件,还是符合APK文件格式,只是在APK文件内部META-INF目录下存放签名信息SGN。对终端的操作系统的原生验签过程并不影响,所以在更高级版本的操作系统上,如Android5.0以上的终端设备,也可以正常安装。
进一步的,所述“获取所述签名后APK文件中的签名信息;获取原始APK文件”具体为:
从所述META-INF目录下拷贝出所述签名信息;
删除所述签名后APK文件中所述压缩的文件内容源数据尾部的所述压缩后的所述签名信息;
删除所述压缩的目录源数据尾部的所述签名信息的目录数据;
相应修改所述原始APK文件的目录结束标识结构,还原所述原始APK文件。
由上述描述可知,在终端的厂商验证所获取的签名后APK文件之前,需要先将插入原始APK文件的签名信息拷贝出来,还原原始APK文件,具体为删除所插入的所有数据,确保在厂商验证过程中,对核心数据的计算不会出错,所述核心数据中的原始APK文件与收单机构签名时的原始APK文件完全一致,顺利通过厂商验证。
如图2所示,进一步的,所述“对原始APK文件和收单机构签名描述信息进行签名,得到签名信息”具体为:
收单机构生成收单机构工作公钥证书,将与收单机构工作公钥证书对应的公钥分发至不同厂商;
收单机构对包含原始APK文件和收单机构签名描述信息的被签名数据计算哈希,得到第一哈希值;
填充所述第一哈希值,得到填充后的数据;
收单机构获取与收单机构工作公钥证书对应的私钥,并利用私钥对所述填充后的数据进行签名,生成收单机构签名数据;
生成包含所述收单机构签名描述信息、收单机构签名数据、收单机构工作公钥证书的签名信息。
进一步的,所述“终端验证所述签名信息和所述原始APK文件的合法性”具体为:
不同厂商根据各自的证书生成机制使用所述公钥生成收单机构根公钥证书,并预装在厂商的终端中;
终端使用收单机构根证书验证所述签名信息中的收单机构工作公钥证书的合法性;
若验证通过,则使用收单机构工作公钥证书验证所述收单机构签名数据的合法性;
若验证通过,获取第一哈希值;
对所述收单机构签名描述信息和原始APK文件计算哈希,得到第二哈希值;
判断所述第二哈希值与第一哈希值是否一致,若一致,则验证通过。
由上述描述可知,在本发明中,收单机构签名的对象为原始APK文件和收单机构签名描述信息;同时,通过收单机构统一生成收单机构工作公钥证书,分发生成收单机构工作公钥证书的公钥至不同的厂商,不同厂商的CA服务器根据各自的证书生成算法使用公钥生成收单机构根公钥证书后,将所述收单机构根公钥证书预装在厂商的终端设备中,每个厂商生成的收单机构根公钥证书都是不一样的,用于日后验签各自收到的签名后APK文件。终端利用收单机构统一分发的公钥进行各自验签,保证已签名APK文件在数据传输过程的完整性和APK合法性,收单机构针对不同厂商的终端设备也只需维护一个已签名的文件和一套签名实现机制,大大缩减了收单机构针对APK签名的维护成本。
请参阅图8至图12,本发明提供的另一个技术方案为:
如图8所示,一种APK签名认证系统,包括收单机构1和终端2,所述收单机构1包括安全存储模块11、签名执行模块12和签名组织模块13;所述终端2包括第一获取模块21、第二获取模块22、第三获取模块23、签名验证模块24以及安装执行模块25;
所述安全存储模块11,用于存储收单机构1的工作公钥证书和所述工作公钥证书对应的私钥;
所述签名执行模块12,用于对原始APK文件和收单机构1签名描述信息进行签名,得到签名信息;
所述签名组织模块13,用于插入签名信息至原始APK文件内部的META-INF目录下,生成签名后APK文件;
所述第一获取模块21,用于终端2获取所述签名后APK文件;
所述第二获取模块22,用于获取所述签名后APK文件中的签名信息;
所述第三获取模块23,用于终端2获取原始APK文件;
所述签名验证模块24,用于终端2验证所述签名信息和所述原始APK文件的合法性;
所述安装执行模块25,用于所述签名验证模块24验证通过后,终端2安装所述原始APK文件。
进一步的,所述第三获取模块23包括删除还原单元和/或提取单元;
所述删除还原单元,用于删除所述签名后APK文件中的签名信息,还原所述原始APK文件;
所述提取单元,用于从所述签名后APK文件的二进制数据中提取所述原始APK文件。
如图9和10所示,进一步的,所述签名组织模块13包括第一添加单元131、第二添加和第一修改单元133;所述删除还原单元包括拷贝单元231、第一删除单元232、第二删除单元233和第二修改单元234;
所述第一添加单元131,用于在原始APK文件的压缩的文件内容源数据尾部添加经过压缩后的所述签名信息;
所述第二添加单元132,用于在压缩的目录源数据尾部添加所述签名信息的目录数据;
所述第一修改单元133,用于相应修改所述原始APK文件的目录结束标识结构;
所述拷贝单元231,用于从所述META-INF目录下拷贝出所述签名信息;
所述第一删除单元232,用于删除所述签名后APK文件中所述压缩的文件内容源数据尾部的所述压缩后的所述签名信息;
所述第二删除单元233,用于删除所述压缩的目录源数据尾部的所述签名信息的目录数据;
所述第二修改单元234,用于相应修改所述原始APK文件的目录结束标识结构,还原所述原始APK文件。
如图11所示,进一步的,所述签名执行模块12包括第一生成单元121、第一计算单元122、第一签名单元123、第二签名单元124和第二生成单元125;所述签名验证模块24包括第三生成单元241、第一验证单元242、第二验证单元243、获取单元244、第二计算单元245和判断单元246;
第一生成单元121,用于收单机构1生成收单机构1工作公钥证书,将与收单机构1工作公钥证书对应的公钥分发至不同厂商;
第一计算单元122,用于收单机构1对包含原始APK文件和收单机构1签名描述信息的被签名数据计算哈希,得到第一哈希值;
第一签名单元123,用于填充所述第一哈希值,得到填充后的数据;
第二签名单元124,用于收单机构1获取与收单机构1工作公钥证书对应的私钥,并利用私钥对所述填充后的数据进行签名,生成收单机构1签名数据;
第二生成单元125,用于生成包含所述收单机构1签名描述信息、收单机构1签名数据、收单机构1工作公钥证书的签名信息;
第三生成单元241,用于不同厂商根据各自的证书生成机制使用所述公钥生成收单机构1根公钥证书,并预装在厂商的终端2中;
第一验证单元242,用于终端2使用收单机构1根证书验证所述签名信息中的收单机构1工作公钥证书的合法性;
第二验证单元243,用于若第一验证单元242验证通过,则使用收单机构1工作公钥证书验证所述收单机构1签名数据的合法性;
获取单元244,用于若第二验证单元243验证通过,获取第一哈希值;
第二计算单元245,用于对所述收单机构1签名描述信息和原始APK文件计算哈希,得到第二哈希值;
判断单元246,用于判断所述第二哈希值与第一哈希值是否一致,若一致,则验证通过。
请参照图2,本发明的实施例一为:
提供一种APK签名认证方法,该方法具体可以包括:
S1:收单机构1签名服务器调用加密设备生成第一公私钥对和第二公私钥对,收单机构1签名服务器使用第一私钥对第二公钥进行签名操作生成收单机构1工作公钥证书AcquirerWCRT,将第一公钥分发至不同厂商的CA服务器;
S2:收单机构1的签名服务器将原始APK文件和收单机构1签名描述信息一起作为被签名数据SourceData;对被签名数据SourceData计算哈希,获得第一哈希值HASH1;将第一哈希值HASH1按照PKCS#1_V1.5的签名填充方式进行填充,获得填充后的数据PAD_data;
S3:收单机构1的签名服务器通从安全存储介质中获取与收单机构1工作公钥证书对应的第二私钥,并利用第二私钥对所述填充后的数据进行加密签名,生成收单机构1签名数据Signature;
S4:将收单机构1签名描述信息、收单机构1签名数据Signature、收单机构1工作公钥证书AcquirerWCRT和签名文件头一起拼接生成收单机构1的签名信息SGN,并进行压缩;
S5:收单机构1的签名工具利用终端2的操作系统自带的aapt工具,将签名信息SGN插入到原始APK文件内部的META-INF目录下,生成签名后APK文件,插入所述签名信息SNG后的原始APK文件的格式对比如图5所示;具体插入过程可以包括:
S51:在原始APK文件的压缩的文件内容源数据尾部添加一条压缩后的所述签名信息SNG;
S52:在压缩的目录源数据尾部添加一条所述签名信息SNG的目录数据;
S53:相应修改所述原始APK文件的目录结束标识结构,其中的目录总数加1、目录大小加上签名信息SGN的目录数据大小、目录偏移位置加上签名信息SGN压缩的文件数据大小。
S6:不同厂商的CA服务器根据各自的证书生成机制使用收单机构1下发的第一公钥生成收单机构1根公钥证书,并将所述收单机构1根公钥证书预装在厂商各自的终端2设备中;
如图6所示,
S7:不同厂商的终端2设备通过自动下载或者周期自检的方式获取生成的签名后APK文件;
S8:将所述签名后APK文件内部的META-INF目录下的签名信息SGN拷贝出来,同时将签名信息SGN从所述签名后APK文件中删除,还原得到原始APK文件;具体步骤可以包括:
S81:删除所述签名后APK文件中所述压缩的文件内容源数据尾部的所述压缩后的所述签名信息SNG;
S82:删除所述压缩的目录源数据尾部的所述签名信息SNG的目录数据;
S83:相应修改所述原始APK文件的目录结束标识结构,还原所述原始APK文件;包括其中的目录总数减1、目录大小减去签名信息SGN的目录数据大小、目录偏移位置减去签名信息SGN压缩的文件数据大小;
S9:解压已压缩的签名信息SGN,获取其中的收单机构1签名描述信息、收单机构1签名数据Signature、收单机构1工作公钥证书AcquirerWCRT和签名文件头;
S10:开始厂商对终端2所获取的签名后APK文件的合法性验证过程;具体包括:
S101:终端2使用预存在终端2中的收单机构1根证书验证所述签名信息中的收单机构1工作公钥证书AcquirerWCRT的合法性;若验证通过,则终端2设备使用收单机构1工作公钥证书AcquirerWCRT提取第二公钥,使用第二公钥解密所述收单机构1签名数据,解密成功,获得第一哈希值HASH1;
S102:终端2对步骤S9中解压获取到的所述收单机构1签名描述信息和步骤S83还原的原始APK文件一起计算哈希,得到第二哈希值HASH2;
需要说明的是,由于在S83中已经还原了原始APK文件,由此确保第二哈希值计算的对象APK文件与步骤S2中第一哈希值的计算对象原始APK文件是一致的,所计算的内容将不会包含签名信息SGN,保证哈希计算的准确性。
S103:判断所述第二哈希值与第一哈希值是否一致,若一致,则证明终端2所获取到的签名后APK文件合法,未被篡改,厂商设备对签名后APK文件的验证通过,允许终端2安装所述原始APK文件;
S11:在终端2安装APK文件的过程中,终端2的操作系统也需要对所述签名后APK文件的合法性进行验证,即终端2的原生验证过程;
具体验证过程包括:操作系统计算所述签名后APK文件的整体长度,判断所述签名后APK文件+尾部数据长度是否等于源文件长度,若相等,则继续安装,若不相等,则安装失败。
需要说明的是,原始APK文件内部的META-INF目录下的数据不包含的计算范围内,因此所插入的签名信息不会被计算在内,不对操作系统的原生验证产生影响,终端2更高版本的操作系统也能正常的安装。
本发明的实施例二为:
在实施例一的基础上,步骤S5所述的还原原始APK文件的方式还可以是直接从所获取到的签名后APK文件的二进制数据中提取出所述原始APK文件。
步骤S3中的安全存储介质为存储有第二私钥的签名卡,由收单机构1的授权工作人员持有。
步骤S51中所述的“压缩的文件内容源数据”记录着压缩的所有文件的内容信息;其数据组织结构对应每个文件都由fileheader、filedata、datadescriptor三部分组成;Fileheader:用于标识该文件的开始;filedata:相应压缩文件的源数据;datadescriptor:用于标识该文件压缩结束,该结构只有在相应的header中通用标记字段的第3位设为1时才会出现,紧接在压缩文件源数据后。这个数据描述符只用在不能对输出的ZIP文件进行检索时使用;
所述的“压缩的目录源数据”指的是对于压缩的目录而言,每一个子目录对应一个压缩目录源数据,记录该目录的描述信息。压缩包中所有目录源数据连续存储在整个归档包的最后,这样便于向包中追加新的文件;
所述的“目录结束标识结构”存在于整个归档包的结尾,用于标记压缩的目录数据的结束;
如图4所示,所述“收单机构1签名描述信息”用于存储包括收单机构1工作公钥证书的ID号、签名使用的算法和签名时间;
步骤S4中的所述“签名文件头”标识签名文件类型和表示所有签名的数据偏移和长度,定位签名数据,之后用于验证签名;所述收单机构1签名数据的签名使用的算法优选为SHA-256和RSA;所述收单机构1签名数据的偏移位置和签名文件的偏移长度均是从文件最开始处计算得出的偏移长度。
请参阅图8,本发明提供的实施例三为:
一种APK签名认证系统,包括收单机构1服务器和终端2设备服务器,所述收单机构1服务器包括安全存储模块11、签名执行模块12和签名组织模块13;所述终端2设备服务器包括第一获取模块21、第二获取模块22、第三获取模块23、签名验证模块24以及安装执行模块25,所述第三获取模块23包括删除还原单元和/或提取单元;
所述安全存储模块11,用于存储收单机构1的工作公钥证书和所述工作公钥证书对应的私钥;
所述签名执行模块12,用于对原始APK文件和收单机构1签名描述信息进行签名,得到签名信息;如图11所示,具体包括第一生成单元121、第一计算单元122、第一签名单元123、第二签名单元124和第二生成单元125;第一生成单元121,用于收单机构1生成收单机构1工作公钥证书,将与收单机构1工作公钥证书对应的公钥分发至不同厂商;第一计算单元122,用于收单机构1对包含原始APK文件和收单机构1签名描述信息的被签名数据计算哈希,得到第一哈希值;第一签名单元123,用于填充所述第一哈希值,得到填充后的数据;第二签名单元124,用于收单机构1获取与收单机构1工作公钥证书对应的私钥,并利用私钥对所述填充后的数据进行签名,生成收单机构1签名数据;第二生成单元125,用于生成包含所述收单机构1签名描述信息、收单机构1签名数据、收单机构1工作公钥证书的签名信息;
所述签名组织模块13,用于插入签名信息至原始APK文件内部的META-INF目录下,生成签名后APK文件;
如图9所示,所述签名组织模块13具体包括第一添加单元131、第二添加和第一修改单元133;所述第一添加单元131,用于在原始APK文件的压缩的文件内容源数据尾部添加经过压缩后的所述签名信息;所述第二添加单元132,用于在压缩的目录源数据尾部添加所述签名信息的目录数据;所述第一修改单元133,用于相应修改所述原始APK文件的目录结束标识结构;
所述第一获取模块21,用于终端2获取所述签名后APK文件;
所述第二获取模块22,用于获取所述签名后APK文件中的签名信息;
所述第三获取模块23,用于终端2获取原始APK文件;如图10所示,具体的,若第三获取模块23包括删除还原单元,则通过所述删除还原单元删除所述签名后APK文件中的签名信息,还原所述原始APK文件;所述删除还原单元包括拷贝单元231、第一删除单元232、第二删除单元233和第二修改单元234;所述拷贝单元231,用于从所述META-INF目录下拷贝出所述签名信息;所述第一删除单元232,用于删除所述签名后APK文件中所述压缩的文件内容源数据尾部的所述压缩后的所述签名信息;所述第二删除单元233,用于删除所述压缩的目录源数据尾部的所述签名信息的目录数据;所述第二修改单元234,用于相应修改所述原始APK文件的目录结束标识结构,还原所述原始APK文件。
若第三获取模块23包括提取单元,则通过所述提取单元从所述签名后APK文件的二进制数据中提取所述原始APK文件;所述第三获取模块23可以同时包含所述删除还原单元和提取单元,或者择一配置,其目的都在于还原所述原始APK文件。
如图12所示,所述签名验证模块24,用于终端2验证所述签名信息和所述原始APK文件的合法性;具体包括第三生成单元241、第一验证单元242、第二验证单元243、获取单元244、第二计算单元245和判断单元246;第三生成单元241,用于不同厂商根据各自的证书生成机制使用所述公钥生成收单机构1根公钥证书,并预装在厂商的终端2中;第一验证单元242,用于终端2使用收单机构1根证书验证所述签名信息中的收单机构1工作公钥证书的合法性;第二验证单元243,用于若第一验证单元242验证通过,则使用收单机构1工作公钥证书验证所述收单机构1签名数据的合法性;获取单元244,用于若第二验证单元243验证通过,获取第一哈希值;第二计算单元245,用于对所述收单机构1签名描述信息和原始APK文件计算哈希,得到第二哈希值;判断单元246,用于判断所述第二哈希值与第一哈希值是否一致,若一致,则验证通过。
所述安装执行模块25,用于所述签名验证模块24验证通过后,终端2安装所述原始APK文件。