应用软件的签名方法、验签方法和装置与流程

文档序号:16630030发布日期:2019-01-16 06:29阅读:337来源:国知局
应用软件的签名方法、验签方法和装置与流程
本发明涉及软件安全领域,尤其是涉及一种应用软件的签名方法、验签方法和装置。
背景技术
:现有android应用程序采用自签名的方式对应用软件进行签名,需要对应用软件的所有文件进行消息摘要的计算,耗时较长、效率较低;不需要监管机构的签名认证,攻击者可对应用软件进行反编译,篡改应用软件的源代码生成恶意应用,并使用自生成的数字证书进行签名,从而变为更新版本,发布到互联网中传播,对原始应用开发者的版权造成侵害,对用户财产造成损失、隐私造成安全威胁。技术实现要素:有鉴于此,本发明的目的在于提供一种应用软件的签名方法、验签方法和装置,以提高签名效率,同时提高应用软件的安全性。第一方面,本发明实施例提供了一种应用软件的签名方法,该方法应用于应用软件的开发端,方法包括:解析目标应用软件的apk文件夹,得到多个待签名文件;分别对多个待签名文件进行签名处理,得到每个待签名文件对应的第一摘要值;多个待签名文件对应的第一摘要值形成摘要值组合;对摘要值组合进行再次签名处理,得到第二摘要值;对第二摘要值进行加密和压缩处理,得到目标应用软件的apk签名文件。进一步地,上述待签名文件包括:manifest.mf、cert.sf和cert.rsa。进一步地,上述分别对多个待签名文件进行签名处理,得到每个待签名文件对应的第一摘要值的步骤,包括:通过md5算法或sha1算法,对manifest.mf、cert.sf和cert.rsa分别进行哈希计算,得到对应的第一摘要值;上述方法还包括:对manifest.mf、cert.sf和cert.rsa的第一摘要值进行组装,得到摘要值组合。进一步地,上述对第二摘要值进行加密和压缩处理,得到目标应用软件的apk签名文件的步骤,包括:通过预设的私钥,对第二摘要值进行加密处理,得到加密文件;将加密文件和证书文件进行压缩处理的,得到目标应用软件的apk签名文件;证书文件包括私钥对应的公钥和签名机构信息。第二方面,本发明实施例提供了一种应用软件的验签方法,该方法应用于应用软件的供应端,方法包括:解析目标应用软件的apk签名文件,得到多个加密文件及证书文件;分别对多个加密文件进行解密处理,得到每个加密文件对应的第一摘要值;多个加密文件对应的第一摘要值形成摘要值组合;对摘要值组合进行再次解密处理,得到第二摘要值;通过预设的公钥对证书文件进行解密处理,得到第三摘要值;判断第二摘要值与第三摘要值是否相同,如果是,则验签成功。进一步地,上述应用软件的验签方法还包括:如果验签失败,确定目标应用软件为恶意应用。进一步地,上述加密文件包括:manifest.mf、cert.sf和cert.rsa。进一步地,上述分别对多个加密文件进行解密处理,得到每个解密文件对应的第一摘要值的步骤,包括:通过md5算法或sha1算法,对manifest.mf、cert.sf和cert.rsa分别进行哈希计算,得到对应的第一摘要值;上述方法还包括:对manifest.mf、cert.sf和cert.rsa的第一摘要值进行组装,得到摘要值组合。第三方面,本发明实施例提供一种应用软件的签名装置,该装置设置于应用软件的开发端,装置包括:第一解析模块,用于解析目标应用软件的apk文件夹,得到多个待签名文件;第一次签名模块,用于分别对多个待签名文件进行签名处理,得到每个待签名文件对应的第一摘要值;多个待签名文件对应的第一摘要值形成摘要值组合;第二次签名模块,用于对摘要值组合进行再次签名处理,得到第二摘要值;加密和压缩模块,用于对第二摘要值进行加密和压缩处理,得到目标应用软件的apk签名文件。第四方面,本发明实施例提供了一种应用软件的验签装置,该装置设置于应用软件的供应端,装置包括:第二解析模块,用于解析目标应用软件的apk签名文件,得到多个加密文件及证书文件;第一次解密模块,用于分别对多个加密文件进行解密处理,得到每个加密文件对应的第一摘要值;多个加密文件对应的第一摘要值形成摘要值组合;第二次解密模块,用于对摘要值组合进行第二次解密处理,得到第二摘要值;公钥解密模块,用于通过预设的公钥对证书文件进行解密处理,得到第三摘要值;判别模块,用于判断第二摘要值与第三摘要值是否相同,如果是,则验签成功。本发明实施例带来了以下有益效果:本发明提供了一种应用软件的签名方法、验签方法和装置,通过解析目标应用软件的apk文件夹,可以得到多个待签名文件;分别对多个待签名文件进行签名处理,得到每个待签名文件对应的第一摘要值;再对多个待签名文件对应的第一摘要值形成的摘要值组合进行再次签名处理,得到第二摘要值;对该第二摘要值进行加密和压缩处理,最终得到目标应用软件的apk签名文件。该方式对应用软件进行二次签名,签名耗时短,效率较高,同时也提高了应用软件的安全性。本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。附图说明为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种应用软件的签名方法的流程图;图2为本发明实施例提供的另一种应用软件的签名方法的流程图;图3为本发明实施例提供的一种应用软件签名方法的数据流向示意图;图4为本发明实施例提供的一种应用软件的验签方法的流程图;图5为本发明实施例提供的一种应用软件验签方法的数据流向示意图;图6为本发明实施例提供的一种上述应用软件的签名方法和验签方法的应用场景示意图;图7为本发明实施例提供的一种应用软件的签名装置的结构示意图;图8为本发明实施例提供的一种应用软件的验签装置的结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。android应用程序通常需要经过数字签名才能够安装到android系统中。目前对移动应用的自签名的方式都是在原始apk文件的基础上,通过使用数字签名相关算法进行消息摘要的计算和加密来实现的。这种自签名方式需要对meta-inf目录之外的文件进行消息摘要的计算,并将计算结果存储在manifest.mf文件中,然后再对包括manifest.mf文件在内的所有文件进行消息摘要计算及加密,并将加密之后的结果存储于cert.sf文件中,最后,用cert.rsa算法存储公钥信息和发布机构信息。近年来,应用商店所维护的移动应用逐年递增,应用总数已达百万级,2016年第一季度累计下载数量已达数十亿次。然而在海量应用的背景下,自签名方法的低效率、耗时长问题便凸显了出来,这种签名方式难以符合要求。目前随着android移动应用爆发式地增长,出现了越来越多的恶意应用,获取用户的个人信息、偷用用户的网络流量,给用户的财产和隐私安全造成了极大的影响。经研究发现,大部分安全问题并不是应用本身存在的,而是应用软件在发布后被恶意开发者破解后加入恶意代码进行的篡改,因此,现有的apk自签名方式不能防止应用程序代码被篡改。考虑到现有的应用软件签名算法中的自签名耗时长,效率低,且应用程序易被篡改的问题,本发明实施例提供了一种应用软件的签名方法、验签方法和装置,该技术可以应用于android系统的应用程序,该技术可以采用相关的软件或硬件实现,下面通过实施例进行描述。参见图1所示的一种应用软件的签名方法的流程图;该方法应用于应用软件的开发端,方法包括如下步骤:步骤s102,解析目标应用软件的apk(androidpackage,android安装包)文件夹,得到多个待签名文件;apk文件的结构如下述表1所示。表1文件含义assets目录存放需要打包到apk中的静态文件lib目录程序依赖的native库res目录存放应用程序的资源meta-inf目录存放应用程序签名和证书androidmanifest.xml应用程序的配置文件classes.dexdex可执行文件resources.arsc资源配置文件apk文件经过解析后得到多个文件目录及文件,分别为assets目录、lib目录、res目录、meta-inf目录、androidmanifest.xml、classes.dex、resources.arsc。由于meta-inf目录用于存放应用程序签名和证书,所以选取meta-inf目录下的文件作为签名文件。步骤s104,分别对多个待签名文件进行签名处理,得到每个待签名文件对应的第一摘要值;多个待签名文件对应的第一摘要值形成摘要值组合;上述第一摘要值为消息摘要又称为数字摘要,是唯一对应一个消息或文本的固定长度的值,由一个单向哈希加密函数对消息进行计算产生。具有如下特点:(1)无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。(2)一般来说(不考虑碰撞的情况下),只要输入的原始数据不同,对其进行消息摘要计算以后产生的消息摘要也必不相同,即使原始数据稍有改变,输出的消息摘要便完全不同。但是,相同的输入必会产生相同的输出。(3)具有不可逆性,即只能进行正向的消息摘要,而无法从消息摘要中恢复出任何的原始消息。由于apk文件的签名仅需要一个签名文件,因此需要将多个待签名文件的第一摘要值进行组合,合成摘要组合,用于二次签名处理。步骤s106,对摘要值组合进行再次签名处理,得到第二摘要值;上述第二消息摘要值为消息摘要,通过对摘要组合进行哈希计算得到的二次签名文件。步骤s108,对第二摘要值进行加密和压缩处理,得到目标应用软件的apk签名文件。上述对第二摘要值的加密是通过公钥加密算法实现的,从密钥的角度公钥加密算法分为公钥和私钥,二次签名文件获得后需要开发端的开发者利用公钥对二次签名文件进行加密,以提升应用软件的安全性。上述压缩处理是将二次签名文件和包含签名机构信息以及公钥的认证文件压缩到新生成的apk文件中,从而生成最终的apk签名文件。本发明提供了一种应用软件的签名方法,通过解析目标应用软件的apk文件夹,可以得到多个待签名文件;分别对多个待签名文件进行签名处理,得到每个待签名文件对应的第一摘要值;再对多个待签名文件对应的第一摘要值形成的摘要值组合进行再次签名处理,得到第二摘要值;对该第二摘要值进行加密和压缩处理,最终得到目标应用软件的apk签名文件。该方式对应用软件进行二次签名,签名耗时短,效率较高,同时也提高了应用软件的安全性。参见图2所示的另一种应用软件的签名方法的流程图;该方法在图1所示方法的基础上实现的,该方法包括如下步骤:步骤s202,解析目标应用软件的apk文件夹,得到多个待签名文件;上述待签名文件包括:manifest.mf、cert.sf和cert.rsa。其中,manifest.mf为摘要文件;cert.sf为对摘要的签名文件;cert.rsa文件中保存了公钥、所采用的加密算法等信息。步骤s204,通过md5算法(message-digestalgorithm5,信息-摘要算法5)或sha1算法(securehashalgorithm,安全哈希算法),对manifest.mf、cert.sf和cert.rsa分别进行哈希计算,得到对应的第一摘要值;上述待签名文件选择apk文件夹中占用空间较小的meta-inf目录下的相关文件如:manifest.mf、cert.sf和cert.rsa,从签名对象的角度,可以缩短对单一apk文件夹的签名耗时。由于签名对象占用空间较小,算法的执行效率相差不大,因此鲁棒性是消息摘要算法选取的重要指标。相较于md5算法,sha1算法具有更好的鲁棒性。通过对manifest.mf、cert.sf、cert.rsa三个文件进行sha1算法的哈希计算,得到三个消息摘要。步骤s206,对manifest.mf、cert.sf和cert.rsa的第一摘要值进行组装,得到摘要值组合。由于应用软件仅需要一个签名文件,所以需要将上一步产生的三个消息摘要进行组装。并将组装后的结果再进行一次哈希计算,从而得到满足需求的唯一的一个消息摘要即第二摘要值;上述消息摘要的组装是通过将三个消息摘要(字符串)直接追加合并成一个消息摘要(字符串)来实现的。步骤s208,对摘要值组合进行再次签名处理,得到第二摘要值;步骤s210,通过预设的私钥,对第二摘要值进行加密处理,得到加密文件;为了防止最终生成的第二摘要被恶意篡改和冒充,需要对消息摘要公钥密码算法进行加密。公钥密码算法从密钥的角度分为公钥和私钥。进行数字签名时,消息发送方使用私钥对消息摘要值进行加密生成签名信息;消息接收方使用公钥对签名信息进行解密,获取消息摘要值,用于验证消息完整性和消息发送方的身份。公钥密码算法中有多种可选算法如:rsa算法(rsaalgorithm,非对称加密算法)、elgamal算法(可用于数据加密也可用于数字签名)、merkle-hellman背包算法(用背包问题实现信息的加密)、rabin(rabin的加密法可以说是rsa方法的特例)、diffie-hellman密钥协议算法(迪菲-赫尔曼秘钥交换算法)、ecc算法(ellipticcurvecryptography,椭圆曲线加密算法)。由于rsa算法是一种非对称密码算法,就是指该算法需要一对密钥,其中一个用于应用软件的开发端加密,另一个用于应用软件的供应端解密。该方法选用rsa算法,使用私钥对消息摘要来进行加密,生成签名文件sign.sig。步骤s212,将加密文件和证书文件进行压缩处理的,得到目标应用软件的apk签名文件;该证书文件包括私钥对应的公钥和签名机构信息。上述方法通过对待签名文件进行签名处理,最终得到第二摘要值,对应用软件进行了二次签名,签名耗时短,效率较高,同时也提高了应用软件的安全性。参见图3所示的一种应用软件签名方法的数据流向示意图;解析应用软件的apk文件夹,得到待签名文件manifest.mf、cert.sf和cert.rsa;分别对待签名文件manifest.mf、cert.sf和cert.rsa进行签名处理,得到每个待签名文件对应的第一摘要值;多个待签名文件对应的第一摘要值形成摘要值组合;对摘要值组合进行再次签名处理,得到第二摘要值;通过预设的私钥,对第二摘要值进行加密处理,得到加密文件;将加密文件和证书文件进行压缩处理的,得到目标应用软件的apk签名文件。本发明实施例通过对应用软件进行二次签名,签名耗时短,效率较高,同时也提高了应用软件的安全性。参见图4所示的一种应用软件的验签方法的流程图;该方法应用于应用软件的供应端,方法包括如下步骤:步骤s402,解析目标应用软件的apk签名文件,得到多个加密文件及证书文件;该加密文件包括:manifest.mf、cert.sf和cert.rsa。步骤s404,分别对多个加密文件进行解密处理,得到每个加密文件对应的第一摘要值;多个加密文件对应的第一摘要值形成摘要值组合;通过md5算法或sha1算法,对manifest.mf、cert.sf和cert.rsa分别进行哈希计算,得到对应的第一摘要值;所述方法还包括:对manifest.mf、cert.sf和cert.rsa的第一摘要值进行组装,得到摘要值组合。上述加密文件选择apk签名文件中进行签名的文件:manifest.mf、cert.sf和cert.rsa,相较于md5算法,sha1算法具有更好的鲁棒性。通过对manifest.mf、cert.sf、cert.rsa三个文件进行sha1算法的哈希计算,得到三个消息摘要。将产生的三个消息摘要进行组装。上述消息摘要的组装是通过将三个消息摘要(字符串)直接追加合并成一个消息摘要(字符串)来实现的。步骤s406,对摘要值组合进行再次解密处理,得到第二摘要值;将上述消息摘要的组装结果再进行一次哈希计算,从而得到满足需求的唯一的一个消息摘要即第二摘要值;步骤s408,通过预设的公钥对证书文件进行解密处理,得到第三摘要值;上述预设的公钥是通过上述的ras算法得到的,应用于应用软件的供应端,与应用软件开发端的私钥构成一对密钥。步骤s410,判断第二摘要值与第三摘要值是否相同;如果是,执行步骤s412;如果不是,执行步骤s414;步骤s412,验签成功;步骤s414,验签失败,确定目标应用软件为恶意应用。本发明实施例提供的应用软件的验签方法,通过解析目标应用软件的apk签名文件,得到多个加密文件及证书文件;分别对多个加密文件进行解密处理,得到每个加密文件对应的第一摘要值;再对多个加密文件对应的第一摘要值形成摘要值组合进行再次解密处理,得到第二摘要值;通过预设的公钥对证书文件进行解密处理,得到第三摘要值;最后判断第二摘要值与第三摘要值是否相同,如果是,则验签成功。该方式对应用软件进行签名验签,提高了签名效率及应用软件的安全度。参见图5为本发明实施例提供的一种应用软件验签方法的数据流向示意图;解析应用软件的签名apk文件,得到加密文件manifest.mf、cert.sf和cert.rsa及证书文件;分别对加密文件manifest.mf、cert.sf和cert.rsa进行解密处理,得到manifest.mf、cert.sf和cert.rsa文件对应的第一摘要值;manifest.mf、cert.sf和cert.rsa文件对应的第一摘要值形成摘要值组合;对摘要值组合进行再次解密处理,得到第二摘要值hash1;通过预设的公钥对证书文件进行解密处理,得到第三摘要值hash2;判断第二摘要值hash1与第三摘要值hash2是否相同,如果是,则验签成功。本发明实施例通过对应用软件进行签名验签,提高了签名效率及应用软件的安全度。图6为本发明实施例提供的一种上述应用软件的签名方法和验签方法的应用场景示意图。移动应用开发者即应用软件的开发端通过应用软件的签名方法对应用软件进行签名,移动应用商店即应用软件的供应端通过应用软件验签方法对应用软件进行签名验证,用户可在应用商店安全下载应用软件。初始的apk文件进行解析,在进行签名之后,会生成meta-inf文件夹,该文件夹中包括manifest.mf、cert.sf、cert.rsa三个文件,通过跟踪android系统验签源码发现,验签以上三个文件即可验签apk文件,但未对meta-inf做自校验处理。因此,在meta-inf中添加签名的信息,在不影响到apk文件的自我验签的基础上实现二次签名的过程。本发明实施例通过对应用软件的签名和验签,提高了签名效率及应用软件的安全度。参见图7所示的一种应用软件的签名装置的结构示意图;该装置设置于应用软件的开发端,该装置包括:第一解析模块70,用于解析目标应用软件的apk文件夹,得到多个待签名文件;第一签名模块71,用于分别对多个待签名文件进行签名处理,得到每个待签名文件对应的第一摘要值;多个待签名文件对应的第一摘要值形成摘要值组合;第二签名模块72,用于对摘要值组合进行再次签名处理,得到第二摘要值;加密和压缩模块73,用于对第二摘要值进行加密和压缩处理,得到目标应用软件的apk签名文件。本发明实施例提供了一种应用软件的签名装置,通过解析目标应用软件的apk文件夹,可以得到多个待签名文件;分别对多个待签名文件进行签名处理,得到每个待签名文件对应的第一摘要值;再对多个待签名文件对应的第一摘要值形成的摘要值组合进行再次签名处理,得到第二摘要值;对该第二摘要值进行加密和压缩处理,最终得到目标应用软件的apk签名文件。该方式对应用软件进行二次签名,签名耗时短,效率较高,同时也提高了应用软件的安全性。参见图8所示的一种应用软件的验签装置的结构示意图;该装置设置于应用软件的供应端,该装置包括:第二解析模块80,用于解析目标应用软件的apk签名文件,得到多个加密文件及证书文件;第一解密模块81,用于分别对多个加密文件进行解密处理,得到每个加密文件对应的第一摘要值;多个加密文件对应的第一摘要值形成摘要值组合;第二解密模块82,用于对摘要值组合进行再次解密处理,得到第二摘要值;公钥解密模块83,用于通过预设的公钥对证书文件进行解密处理,得到第三摘要值;判别模块84,用于判断第二摘要值与第三摘要值是否相同,如果是,则验签成功。本发明实施例提供了一种应用软件的验签装置,通过解析目标应用软件的apk签名文件,得到多个加密文件及证书文件;分别对多个加密文件进行解密处理,得到每个加密文件对应的第一摘要值;再对多个加密文件对应的第一摘要值形成摘要值组合进行再次解密处理,得到第二摘要值;通过预设的公钥对证书文件进行解密处理,得到第三摘要值;最后判断第二摘要值与第三摘要值是否相同,如果是,则验签成功。该方式对应用软件进行签名验签,提高了签名效率及应用软件的安全度。本发明实施例所提供的一种应用软件的签名方法、验签方法和装置的计算机程序产品,包括存储了处理器可执行的非易失的程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1