CN113886894A - 数字签名方法和数字签名设备 - Google Patents
数字签名方法和数字签名设备 Download PDFInfo
- Publication number
- CN113886894A CN113886894A CN202111132826.XA CN202111132826A CN113886894A CN 113886894 A CN113886894 A CN 113886894A CN 202111132826 A CN202111132826 A CN 202111132826A CN 113886894 A CN113886894 A CN 113886894A
- Authority
- CN
- China
- Prior art keywords
- developer
- signature
- apk
- party
- native
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/64—Protecting data integrity, e.g. using checksums, certificates or signatures
- G06F21/645—Protecting data integrity, e.g. using checksums, certificates or signatures using a third party
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/31—User authentication
- G06F21/33—User authentication using certificates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/45—Structures or tools for the administration of authentication
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
本公开关于一种数字签名方法和数字签名设备,利用原生签名方法对应用程序包APK进行签名,获得原生APK;生成开发者签名信息;利用开发者的私钥对开发者签名信息和原生APK的数据进行签名,获得开发者签名值;将开发者签名值和开发者签名信息插入原生APK的APK签名块内,获得开发者实名APK。由于开发者签名信息至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书,可以保证开发者证书的合法性。如果开发者实名APK签名验证通过,说明开发者的身份是真实的,即待安装的APK是由真正的开发者所开发出来的,并且没有被篡改过,不会引入恶意代码或者病毒,可以避免安装该APK之后出现数据被恶意窃取或者泄露的情况,提高了数据安全性和移动网络的安全性。
Description
技术领域
本公开涉及数字签名技术领域,更具体地说,涉及一种数字签名方法和数字签名设备。
背景技术
电子设备在安装应用程序包(Application Package,APK)时,会要求APK具备开发者的签名信息。电子设备在安装APK之前会对开发者的签名信息进行验证,在验证通过时,才会允许安装APK。
相关技术中,开发者只是使用自己签发的证书对APK进行签名,由于无法确定开发者自己签发的证书的合法性,即使开发者的签名信息验证通过,也不能确定开发者的身份就是真实的,即此时无法保证待安装的APK是由真正的开发者所开发出来的,待安装的APK有可能被篡改过,例如,可能被植入过恶意代码或者病毒。此时,由于用户无法辨别开发者的真伪,很可能会安装被篡改过的APK,进而可能导致数据被恶意窃取或者泄露,数据安全性较差。
发明内容
本公开提供一种数字签名方法和数字签名设备,以至少解决上述相关技术中由于用户无法辨别开发者的真伪,很可能会安装被篡改过的APK,进而可能导致数据被恶意窃取或者泄露,数据安全性较差的问题。
根据本公开实施例的第一方面,提供一种数字签名方法,应用于开发者终端,所述方法包括:利用原生签名方法对应用程序包APK进行签名,获得原生APK;生成开发者签名信息,其中,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书;利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值;将所述开发者签名值和所述开发者签名信息插入所述原生APK的APK签名块内,获得开发者实名APK。
可选的,所述利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值,包括:根据SM2算法,利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得所述开发者签名值。
可选的,所述原生APK的数据包含APK ZIP文件条目内容、APK中央目录和所述APK签名块。
根据本公开实施例的第二方面,提供一种数字签名方法,应用于第三方终端,所述方法包括:获取由开发者终端生成的开发者实名应用程序包APK,其中,所述开发者实名APK的APK签名块包含开发者签名信息和开发者签名值,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书,所述开发者签名值是利用所述开发者的私钥对所述开发者签名信息和原生APK的数据进行签名而获得的,其中,所述原生APK是利用原生签名方法对APK进行签名而获得的;对所述开发者实名APK中的所述开发者签名值进行签名验证;在对所述开发者实名APK中的所述开发者签名值签名验证通过的情况下,生成第三方签名信息,其中,所述第三方签名信息至少包含由所述CA所签发的包括所述第三方的公钥的第三方证书;利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得第三方签名值;将所述第三方签名值和所述第三方签名信息插入所述开发者实名APK的所述APK签名块内,获得第三方签名APK。
可选的,所述对所述开发者实名APK中的所述开发者签名值进行签名验证,包括:利用所述CA的公钥对所述开发者签名信息所包含的所述开发者证书进行签名验证;在所述开发者证书签名验证通过的情况下,利用所述开发者证书内所包含的所述开发者的公钥对所述开发者签名值进行签名验证。
可选的,所述利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得第三方签名值,包括:根据SM2算法,利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得所述第三方签名值。
可选的,所述原生APK的数据包括所述原生APK所包含的APK ZIP文件条目内容和APK中央目录。
根据本公开实施例的第三方面,提供一种数字签名方法,应用于开发者终端和至少一个第三方终端,所述数字签名方法包括:在所述开发者终端处,执行第一数字签名操作以生成开发者实名APK;在所述至少一个第三方终端中的每个第三方终端处,获取由所述开发者终端生成的所述开发者实名APK或由另一第三方终端生成的第三方签名APK,并对所述开发者实名APK或所述第三方签名APK执行第二数字签名操作以生成该第三方终端的第三方签名APK;其中,所述第一数字签名操作包括:利用原生签名方法对应用程序包APK进行签名,获得原生APK;生成开发者签名信息,其中,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书;利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值;将所述开发者签名值和所述开发者签名信息插入所述原生APK的APK签名块内,获得开发者实名APK;其中,所述第二数字签名操作包括:对所述开发者实名APK中的所述开发者签名值或者所述另一第三方终端生成的第三方签名APK中的所述开发者签名值进行签名验证;在对所述开发者实名APK中的所述开发者签名值或者所述另一第三方终端生成的第三方签名APK中的所述开发者签名值签名验证通过的情况下,生成第三方签名信息,其中,所述第三方签名信息至少包含由所述CA所签发的包括所述第三方的公钥的第三方证书;利用所述第三方的私钥对所述第三方签名信息、所述原生APK的数据进行签名,获得第三方签名值;将所述第三方签名值和所述第三方签名信息插入所述开发者实名APK或者所述另一第三方终端生成的第三方签名APK的所述APK签名块内,获得该第三方终端的第三方签名APK。
根据本公开实施例的第四方面,提供一种数字签名设备,应用于开发者终端,包括:第一签名模块,被配置为利用原生签名方法对应用程序包APK进行签名,获得原生APK;生成模块,被配置为生成开发者签名信息,其中,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书;第二签名模块,被配置为利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值;插入模块,被配置为将所述开发者签名值和所述开发者签名信息插入所述原生APK的APK签名块内,获得开发者实名APK。
可选的,所述第二签名模块被配置为根据SM2算法,利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得所述开发者签名值。
可选的,所述原生APK的数据包含APK ZIP文件条目内容、APK中央目录和所述APK签名块。
根据本公开实施例的第五方面,提供一种数字签名设备,应用于第三方终端,包括:获取模块,被配置为获取由开发者终端生成的开发者实名应用程序包APK,其中,所述开发者实名APK的APK签名块包含开发者签名信息和开发者签名值,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书,所述开发者签名值是利用所述开发者的私钥对所述开发者签名信息和原生APK的数据进行签名而获得的,其中,所述原生APK是利用原生签名方法对APK进行签名而获得的;签名验证模块,被配置为对所述开发者实名APK中的所述开发者签名值进行签名验证;生成模块,被配置为在对所述开发者实名APK中的所述开发者签名值签名验证通过的情况下,生成第三方签名信息,其中,所述第三方签名信息至少包含由所述CA所签发的包括所述第三方的公钥的第三方证书;签名模块,被配置为利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得第三方签名值;插入模块,被配置为将所述第三方签名值和所述第三方签名信息插入所述开发者实名APK的所述APK签名块内,获得第三方签名APK。
可选的,所述签名验证模块被配置为:利用所述CA的公钥对所述开发者签名信息所包含的所述开发者证书进行签名验证;在所述开发者证书签名验证通过的情况下,利用所述开发者证书内所包含的所述开发者的公钥对所述开发者签名值进行签名验证。
可选的,所述签名模块被配置为根据SM2算法,利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得所述第三方签名值。
可选的,所述原生APK的数据包括所述原生APK所包含的APK ZIP文件条目内容和APK中央目录。
根据本公开实施例的第六方面,提供一种数字签名系统,包括开发者终端和至少一个第三方终端;在所述开发者终端处,执行第一数字签名操作以生成开发者实名APK;在所述至少一个第三方终端中的每个第三方终端处,获取由所述开发者终端生成的所述开发者实名APK或由另一第三方终端生成的第三方签名APK,并对所述开发者实名APK或所述第三方签名APK执行第二数字签名操作以生成该第三方终端的第三方签名APK;其中,所述第一数字签名操作包括:利用原生签名方法对应用程序包APK进行签名,获得原生APK;生成开发者签名信息,其中,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书;利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值;将所述开发者签名值和所述开发者签名信息插入所述原生APK的APK签名块内,获得开发者实名APK;其中,所述第二数字签名操作包括:对所述开发者实名APK中的所述开发者签名值或者所述另一第三方终端生成的第三方签名APK中的所述开发者签名值进行签名验证;在对所述开发者实名APK中的所述开发者签名值或者所述另一第三方终端生成的第三方签名APK中的所述开发者签名值签名验证通过的情况下,生成第三方签名信息,其中,所述第三方签名信息至少包含由所述CA所签发的包括所述第三方的公钥的第三方证书;利用所述第三方的私钥对所述第三方签名信息、所述原生APK的数据进行签名,获得第三方签名值;将所述第三方签名值和所述第三方签名信息插入所述开发者实名APK或者所述另一第三方终端生成的第三方签名APK的所述APK签名块内,获得该第三方终端的第三方签名APK。
根据本公开实施例的第七方面,提供一种电子设备,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现根据本公开的数字签名方法。
根据本公开实施例的第八方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行根据本公开的数字签名方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
由于开发者签名信息至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书,可以保证开发者证书的合法性。如果开发者实名APK签名验证通过,说明开发者的身份是真实的,即待安装的APK是由真正的开发者所开发出来的,并且没有被篡改过,不会引入恶意代码或者病毒,可以避免安装该APK之后出现数据被恶意窃取或者泄露的情况,提高了数据安全性和移动网络的安全性。并且,由于第三方签名信息至少包含由CA所签发的包括第三方的公钥的第三方证书,可以保证第三方证书的合法性。如果第三方签名APK签名验证通过,说明待安装的APK是经过合法的第三方核准验证过的,由于待安装的APK通过了合法的第三方的监管审查,因此,待安装的APK的安全性、合法性都得到了保证。进一步的,由于第三方终端对开发者实名APK签名之前已经对开发者实名APK进行了签名验证,因此,第三方签名APK签名验证通过隐含说明开发者实名APK签名验证通过。此时一并实现了对开发者的身份的验证以及对待安装的APK的安全性、合法性的验证,可以确保安装APK的电子设备免受恶意攻击,保障数据安全性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是示出根据本公开的示例性实施例的一种数字签名方法的示意图;
图2是示出根据本公开的示例性实施例的一种数字签名方法的流程图;
图3是示出根据本公开的示例性实施例的一种原生APK的示意图;
图4是示出根据本公开的示例性实施例的另一种数字签名方法的流程图;
图5是示出根据本公开的示例性实施例的又一种数字签名方法的流程图;
图6是示出根据本公开的示例性实施例的一种经过开发者签名以及多个第三方签名的APK文件结构示意图;
图7是示出根据本公开的示例性实施例示出的一种数字签名设备的框图;
图8是示出根据本公开的示例性实施例示出的另一种数字签名设备的框图;
图9是示出根据本公开的示例性实施例示出的一种数字签名系统的框图;
图10是示出根据本公开的示例性实施例示出的一种电子设备的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在此需要说明的是,在本公开中出现的“若干项之中的至少一项”均表示包含“该若干项中的任意一项”、“该若干项中的任意多项的组合”、“该若干项的全体”这三类并列的情况。例如“包括A和B之中的至少一个”即包括如下三种并列的情况:(1)包括A;(2)包括B;(3)包括A和B。又例如“执行步骤一和步骤二之中的至少一个”,即表示如下三种并列的情况:(1)执行步骤一;(2)执行步骤二;(3)执行步骤一和步骤二。
目前,电子设备在安装APK时,会要求APK具备开发者的签名信息。电子设备在安装APK之前会对开发者的签名信息进行验证,在验证通过时,才会允许安装APK。Android是一种计算机操作系统,主要用于移动设备,例如,智能手机、平板电脑等等。下面以Android系统的APK为例来说明相关技术中存在的问题。
虽然Android系统要求APK必须有开发者签名信息,并且签名方法由v1升级到v2、v3版,但仍没有要求应用程序(Application,APP)开发者必须到证书授权中心CA注册、领取签名证书,开发者只是使用自己签发的证书对APK进行签名,由于没有第三方公认,无法确定开发者自己签发的证书的合法性,即使开发者的签名信息验证通过,也不能确定开发者的身份就是真实的,即开发者身份的真实性无法得到保证。一方面,由于不能判定APK的真实开发者,软件责任难以追溯;另一方面,无法保证待安装的APK是由真正的开发者所开发出来的,待安装的APK有可能被篡改过,例如,可能被植入过恶意代码或者病毒。此时,由于用户无法辨别开发者的真伪,很可能会安装被篡改过的APK,进而可能导致数据被恶意窃取或者泄露,数据安全性较差。进一步的,随着软件在网络空间的作用越来越重要,对软件的质量、安全性、合规性等进行检测和认证,将成为保证软件安全的重要措施。APP成熟度认证、代码安全检测、软件功能行业审核等需要相关机构对APP进行签名认证。目前,AndroidAPK只有开发者单一签名和验证机制,不能满足第三方机构对APP实施多重签名的需要。
为了解决相关技术中,由于用户无法辨别开发者的真伪,很可能会安装被篡改过的APK,进而可能导致数据被恶意窃取或者泄露,数据安全性较差的技术问题,本公开提出的数字签名方法,由于开发者签名信息至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书,可以保证开发者证书的合法性。如果开发者实名APK签名验证通过,说明开发者的身份是真实的,即待安装的APK是由真正的开发者所开发出来的,并且没有被篡改过,不会引入恶意代码或者病毒,可以避免安装该APK之后出现数据被恶意窃取或者泄露的情况,提高了数据安全性和移动网络的安全性。
为了解决相关技术中,Android APK只有开发者单一签名和验证机制,不能满足第三方机构对APP实施多重签名的需要的技术问题,本公开提出的数字签名方法,由于第三方签名信息至少包含由CA所签发的包括第三方的公钥的第三方证书,可以保证第三方证书的合法性。如果第三方签名APK签名验证通过,说明待安装的APK是经过合法的第三方核准验证过的,由于待安装的APK通过了合法的第三方的监管审查,因此,待安装的APK的安全性、合法性都得到了保证。进一步的,由于第三方终端对开发者实名APK签名之前已经对开发者实名APK进行了签名验证,因此,第三方签名APK签名验证通过隐含说明开发者实名APK签名验证通过。此时一并实现了对开发者的身份的验证以及对待安装的APK的安全性、合法性的验证,可以确保安装APK的电子设备免受恶意攻击,保障数据安全性和移动网络的安全性。
图1是示出根据本公开的示例性实施例的一种数字签名方法的示意图。开发者终端1需要先去证书授权中心CA2注册、申请开发者证书3。例如,开发者终端1可以先生成开发者的公钥41以及开发者的私钥42,然后,开发者终端1可以将开发者的公钥41发给CA2。接下来,CA2对开发者的身份进行核实之后,可以对开发者的公钥41进行签名,生成开发者证书3,并发送给开发者终端1。接下来,开发者终端1可以基于CA2所签发的开发者证书3生成开发者实名APK。需要说明的是,上述开发者可以为APP的编制者或者对APP负责的机构。
第三方终端5也需要先去证书授权中心CA2注册、申请第三方证书6。例如,第三方终端5可以先生成第三方的公钥71以及第三方的私钥72,然后,第三方终端5可以将第三方的公钥71发给CA2。接下来,CA2对第三方的身份进行核实之后,可以对第三方的公钥71进行签名,生成第三方证书6,并发送给第三方终端5。接下来,第三方终端5可以基于CA2所签发的第三方证书6生成第三方签名APK。
图2是示出根据本公开的示例性实施例的一种数字签名方法的流程图,应用于开发者终端。
参照图2,在步骤201,可以利用原生签名方法对应用程序包APK进行签名,获得原生APK。例如,可以使用Android原生v2、v3签名方法对APK进行签名,获得原生APK。
根据本公开的示例性实施例,原生APK的数据可以包含APK ZIP文件条目内容、APK中央目录和APK签名块。图3是示出根据本公开的示例性实施例的一种原生APK的示意图。在图3中,还示出了APK中央目录结尾。这样,本公开基于Android原生v2、v3签名方法的APK多重签名机制,同时兼容Android v2、v3签名机制,既可以保证APK的完整性,又可以保证APK开发者身份的真实性,实现软件责任可溯源。
在步骤202,可以生成开发者签名信息。其中,开发者签名信息可以至少包含由证书授权中心CA2所签发的包括开发者的公钥41的开发者证书3。
根据本公开的示例性实施例,开发者签名信息还可以包含,但不限于,开发者名称、开发者签名地址、开发者签名日期和软件物料清单(Software bill of materials,SBOM)中的至少一个。
在步骤203,可以利用开发者的私钥42对开发者签名信息和原生APK的数据进行签名,获得开发者签名值。即可以利用开发者的私钥42对开发者签名信息、APK ZIP文件条目内容、APK中央目录和APK签名块进行签名,获得开发者签名值。例如,可以先计算开发者签名信息的摘要值、APK ZIP文件条目内容的摘要值、APK中央目录的摘要值和APK签名块的摘要值。接下来,可以利用开发者的私钥42对开发者签名信息的摘要值、APK ZIP文件条目内容的摘要值、APK中央目录的摘要值和APK签名块的摘要值进行签名计算,获得开发者签名值。
根据本公开的示例性实施例,可以根据SM2算法,利用开发者的私钥42对开发者签名信息和原生APK的数据进行签名,获得开发者签名值。此外,除了可使用SM2算法之外,还可使用RSA、DSA等算法。
在步骤204,可以将开发者签名值和开发者签名信息插入原生APK的APK签名块内,获得开发者实名APK。例如,可以将开发者签名值和开发者签名信息插入APK ZIP文件条目内容和APK中央目录之间的APK签名块内,获得开发者实名APK。这样,由于开发者签名信息至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书,可以保证开发者证书的合法性。如果开发者实名APK签名验证通过,说明开发者的身份是真实的,即待安装的APK是由真正的开发者所开发出来的,并且没有被篡改过,不会引入恶意代码或者病毒,可以避免安装该APK之后出现数据被恶意窃取或者泄露的情况,提高了数据安全性和移动网络的安全性。
图4是示出根据本公开的示例性实施例的另一种数字签名方法的流程图,应用于第三方终端。
参照图4,在步骤401,可以获取由开发者终端1生成的开发者实名应用程序包APK。其中,开发者实名APK的APK签名块可以包含开发者签名信息和开发者签名值。开发者签名信息可以至少包含由证书授权中心CA2所签发的包括开发者的公钥41的开发者证书3,开发者签名值是利用开发者的私钥42对开发者签名信息和原生APK的数据进行签名而获得的。其中,原生APK是利用原生签名方法对APK进行签名而获得的。
在步骤402,可以对开发者实名APK中的开发者签名值进行签名验证。
根据本公开的示例性实施例,可以利用CA2的公钥81对开发者签名信息所包含的开发者证书3进行签名验证。例如,第三方终端5可以利用CA2的公钥81对开发者证书3的签名值进行签名验证计算,获得开发者证书3的摘要值。然后,第三方终端5可以自己计算开发者证书3的摘要值,并将计算出的开发者证书3的摘要值与经过签名验证计算获得的开发者证书3的摘要值进行对比。如果两者相匹配,可以确定开发者证书3签名验证通过,即说明开发者证书3确实是由CA2签发的,并且开发者证书3没有被篡改过,也即开发者证书3内所包含的公钥41确实是开发者的公钥。
接下来,在开发者证书3签名验证通过的情况下,可以利用开发者证书3内所包含的开发者的公钥41对开发者签名值进行签名验证。例如,可以利用开发者证书3内所包含的开发者的公钥41对开发者签名值进行签名验证计算,获得开发者签名信息的摘要值、APKZIP文件条目内容的摘要值、APK中央目录的摘要值和APK签名块的摘要值。然后,第三方终端5可以自己先计算开发者实名APK所包含的开发者签名信息、APK ZIP文件条目内容、APK中央目录和APK签名块中每者的摘要值,并将计算得到的开发者签名信息的摘要值与经过签名验证计算得到的开发者签名信息的摘要值进行比对、将计算得到的APK ZIP文件条目内容的摘要值与经过签名验证计算得到的APK ZIP文件条目内容的摘要值进行比对、将计算得到的APK中央目录的摘要值与经过签名验证计算得到的APK中央目录的摘要值进行比对、将计算得到的APK签名块的摘要值与经过签名验证计算得到的APK签名块的摘要值进行比对。在四种比对结果均为相匹配的情况下,可以确定开发者签名值签名验证通过,此时可以说明APK确实经开发者签名过,即可以确定开发者的身份是真实的,也即可以确定APK确实为真正的开发者所开发,并且APK并未被篡改过。
在开发者签名值签名验证通过的情况下,可以确定开发者实名APK签名验证通过。
在步骤403,在对开发者实名APK中的开发者签名值签名验证通过的情况下,可以生成第三方签名信息。其中,第三方签名信息可以至少包含由CA2所签发的包括第三方的公钥71的第三方证书6。需要说明的是,第三方签名信息还可以包含,但不限于,第三方签名项目名称、第三方名称、签名日期、签名地址和软件物料清单(Software bill of materials,SBOM)等等。
在步骤404,可以利用第三方的私钥72对第三方签名信息和原生APK的数据进行签名,获得第三方签名值。需要说明的是,获取第三方签名值的过程与获取开发者签名值的过程类似,在此不再赘述。
根据本公开的示例性实施例,可以根据SM2算法,利用第三方的私钥对第三方签名信息和原生APK的数据进行签名,获得第三方签名值。此外,除了可使用SM2算法之外,还可使用RSA、DSA等算法。
根据本公开的示例性实施例,利用第三方的私钥72对第三方签名信息和原生APK的数据进行签名,获得第三方签名值时,该原生APK的数据可以包括原生APK所包含的APKZIP文件条目内容和APK中央目录。
在步骤405,可以将第三方签名值和第三方签名信息插入开发者实名APK的APK签名块内,获得第三方签名APK。例如,可以将第三方签名值和第三方签名信息插入APK ZIP文件条目内容和APK中央目录之间的APK签名块内,获得第三方签名APK。
图5是示出根据本公开的示例性实施例的又一种数字签名方法的流程图。
参照图5,在步骤501,可以在开发者终端1处执行第一数字签名操作以生成开发者实名APK。
其中,第一数字签名操作包括:
开发者终端1可以利用原生签名方法对应用程序包APK进行签名,获得原生APK。例如,开发者终端1可以使用Android原生v2、v3签名方法对APK进行签名,获得原生APK。然后,开发者终端1可以生成开发者签名信息。其中,开发者签名信息可以至少包含由证书授权中心CA2所签发的包括开发者的公钥41的开发者证书。接下来,开发者终端1可以利用开发者的私钥42对开发者签名信息和原生APK的数据进行签名,获得开发者签名值。然后,开发者终端1可以将开发者签名值和开发者签名信息插入原生APK的APK签名块内,获得开发者实名APK。例如,开发者终端1可以将开发者签名值和开发者签名信息插入APK ZIP文件条目内容和APK中央目录之间的APK签名块内,获得开发者实名APK。这样,由于开发者签名信息至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书,可以保证开发者证书的合法性。如果开发者实名APK签名验证通过,说明开发者的身份是真实的,即待安装的APK是由真正的开发者所开发出来的,并且没有被篡改过,不会引入恶意代码或者病毒,可以避免安装该APK之后出现数据被恶意窃取或者泄露的情况,提高了数据安全性和移动网络的安全性。
在步骤502,可以在至少一个第三方终端中的每个第三方终端处,获取由开发者终端生成的开发者实名APK或由另一第三方终端生成的第三方签名APK,并对开发者实名APK或第三方签名APK执行第二数字签名操作以生成该第三方终端的第三方签名APK。
其中,第二数字签名操作包括:
可以对开发者实名APK中的开发者签名值或者另一第三方终端生成的第三方签名APK中的开发者签名值进行签名验证。接下来,在对开发者实名APK中的开发者签名值或者另一第三方终端生成的第三方签名APK中的开发者签名值签名验证通过的情况下,可以生成第三方签名信息。其中,第三方签名信息可以至少包含由CA2所签发的包括第三方的公钥71的第三方证书6。需要说明的是,第三方签名信息还可以包含第三方签名项目名称、第三方名称、签名日期、签名地址和软件物料清单(SBOM)等等。然后,可以利用第三方的私钥72对第三方签名信息、原生APK的数据进行签名,获得第三方签名值。接下来,可以将第三方签名值和第三方签名信息插入开发者实名APK或者另一第三方终端生成的第三方签名APK的APK签名块内,获得该第三方终端的第三方签名APK。例如,可以将第三方签名值和第三方签名信息插入APK ZIP文件条目内容和APK中央目录之间的APK签名块内,获得该第三方终端的第三方签名APK。这样,由于第三方签名信息至少包含由CA所签发的包括第三方的公钥的第三方证书,可以保证第三方证书的合法性。如果第三方签名APK签名验证通过,说明待安装的APK是经过合法的第三方核准验证过的,由于待安装的APK通过了合法的第三方的监管审查,因此,待安装的APK的安全性、合法性都得到了保证。进一步的,由于第三方终端对开发者实名APK签名之前已经对开发者实名APK进行了签名验证,因此,第三方签名APK签名验证通过隐含说明开发者实名APK签名验证通过。此时一并实现了对开发者的身份的验证以及对待安装的APK的安全性、合法性的验证,可以确保安装APK的电子设备免受恶意攻击,保障数据安全性和移动网络的安全性。
根据本公开的示例性实施例,针对根据本公开的数字签名方法得到的APK,可对开发者、各第三方机构进行独立验证。第三方机构可以为软件安全检测认证机构、软件行业合规认证机构等等。
例如,对开发者进行验证时,如前所述,可以使用CA2的公钥81验证开发者签名信息中的开发者证书3,如果开发者证书3验证正确,说明开发者证书3确实是由CA2签发的,并且开发者证书3没有被篡改过,开发者证书3所包含的开发者的公钥41确实是真正的开发者的公钥。接下来,可以利用开发者证书3所包含的开发者的公钥41验证开发者签名值。如果开发者签名值验证正确,说明APK确实经过真正的开发者签名过,即APK确实是由真正的开发者开发的,并且该APK没有被篡改过。
对第三方进行验证时,可以使用CA2的公钥81验证第三方签名信息中的第三方证书6,如果第三方证书6验证正确,说明第三方证书6确实是由CA2签发的,即第三方是经过权威认证的合法机构,并且第三方证书6没有被篡改过,第三方证书6所包含的第三方的公钥71确实是真正的第三方的公钥。接下来,可以利用第三方证书6内所包含的第三方的公钥71验证第三方签名值。如果第三方签名值验证通过,说明第三方确实对APK进行过签名,即APK经过了第三方的检测,并且APK没有被篡改过。由于第三方可以为软件安全检测认证机构或者软件行业合规认证机构,因此经过第三方检测的APK的安全性、合法性以及有效性是可以得到保证的。进一步的,由于第三方终端对开发者实名APK签名之前已经对开发者实名APK进行了签名验证,因此,第三方签名APK签名验证通过隐含说明开发者实名APK签名验证通过。此时一并实现了对开发者的身份的验证、第三方的合法性的验证以及待安装的APK的安全性、有效性的验证,可以确保安装APK的电子设备免受恶意攻击,保障数据安全性和移动网络的安全性。
图6是示出根据本公开的示例性实施例的一种经过开发者签名以及多个第三方签名的APK文件结构示意图。如图6所示,由开发者执行数字签名获得的开发者签名值和开发者签名信息可放入APK ZIP文件条目内容和APK中央目录之间的APK签名块内;分别由第1至第n个第三方执行数字签名获得的第三方签名值1~n和第三方签名信息1~n可放入APKZIP文件条目内容和APK中央目录之间的APK签名块内。如前所述,第三方可以为软件安全检测认证机构、软件行业合规认证机构等等,利用多个第三方对开发者实名APK或由另一第三方终端生成的第三方签名APK执行第二数字签名操作,可以实现多方对APK监管审查的目的,还可以实现软件责任可溯源。例如,软件安全检测认证机构对开发者实名APK执行第二数字签名操作,可以保证APK的安全性;软件行业合规认证机构对开发者实名APK执行第二数字签名操作,可以保证APK符合行业标准等等。
图7是根据本公开的示例性实施例示出的一种数字签名设备的框图,该数字签名设备应用于开发者终端。
参照图7,该数字签名设备700可包括第一签名模块701,生成模块702、第二签名模块703和插入模块704。
第一签名模块701可利用原生签名方法对应用程序包APK进行签名,获得原生APK。例如,第一签名模块701可以使用Android原生v2、v3签名方法对APK进行签名,获得原生APK。
根据本公开的示例性实施例,原生APK的数据可以包含APK ZIP文件条目内容、APK中央目录和APK签名块。
生成模块702可生成开发者签名信息。其中,开发者签名信息可以至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书。
根据本公开的示例性实施例,开发者签名信息还可以包含,但不限于,开发者名称、开发者签名地址、开发者签名日期和软件物料清单(SBOM)中的至少一个。
第二签名模块703可利用开发者的私钥42对开发者签名信息和原生APK的数据进行签名,获得开发者签名值。即第二签名模块703可利用开发者的私钥42对开发者签名信息、APK ZIP文件条目内容、APK中央目录和APK签名块进行签名,获得开发者签名值。例如,第二签名模块703可以先计算开发者签名信息的摘要值、APK ZIP文件条目内容的摘要值、APK中央目录的摘要值和APK签名块的摘要值。接下来,第二签名模块703可以利用开发者的私钥42对开发者签名信息的摘要值、APK ZIP文件条目内容的摘要值、APK中央目录的摘要值和APK签名块的摘要值进行签名计算,获得开发者签名值。
根据本公开的示例性实施例,第二签名模块703可根据SM2算法,利用开发者的私钥42对开发者签名信息和原生APK的数据进行签名,获得开发者签名值。此外,除了可使用SM2算法之外,还可使用RSA、DSA等算法。
插入模块704可以将开发者签名值和开发者签名信息插入原生APK的APK签名块内,获得开发者实名APK。例如,插入模块704可以将开发者签名值和开发者签名信息插入APK ZIP文件条目内容和APK中央目录之间的APK签名块内,获得开发者实名APK。这样,由于开发者签名信息至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书,可以保证开发者证书的合法性。如果开发者实名APK签名验证通过,说明开发者的身份是真实的,即待安装的APK是由真正的开发者所开发出来的,并且没有被篡改过,不会引入恶意代码或者病毒,可以避免安装该APK之后出现数据被恶意窃取或者泄露的情况,提高了数据安全性和移动网络的安全性。
图8是根据本公开的示例性实施例示出的另一种数字签名设备的框图,该数字签名设备应用于第三方终端。
参照图8,该数字签名设备800可包括获取模块801、签名验证模块802、生成模块803、签名模块804和插入模块805。
获取模块801可获取由开发者终端1生成的开发者实名应用程序包APK。其中,开发者实名APK的APK签名块可以包含开发者签名信息和开发者签名值。开发者签名信息可以至少包含由证书授权中心CA2所签发的包括开发者的公钥41的开发者证书3,开发者签名值是利用开发者的私钥42对开发者签名信息和原生APK的数据进行签名而获得的。其中,原生APK是利用原生签名方法对APK进行签名而获得的。
签名验证模块802可对开发者实名APK中的开发者签名值进行签名验证。
根据本公开的示例性实施例,签名验证模块802可利用CA2的公钥81对开发者签名信息所包含的开发者证书3进行签名验证。例如,签名验证模块802可以利用CA2的公钥81对开发者证书3的签名值进行签名验证计算,获得开发者证书3的摘要值。然后,签名验证模块802可以自己计算开发者证书3的摘要值,并将计算出的开发者证书3的摘要值与经过签名验证计算获得的开发者证书3的摘要值进行对比。如果两者相匹配,可以确定开发者证书3签名验证通过,即说明开发者证书3确实是由CA2签发的,并且开发者证书3没有被篡改过,也即开发者证书3内所包含的公钥41确实是开发者的公钥。
接下来,在开发者证书3签名验证通过的情况下,签名验证模块802可以利用开发者证书3内所包含的开发者的公钥41对开发者签名值进行签名验证。例如,签名验证模块802可以利用开发者证书3内所包含的开发者的公钥41对开发者签名值进行签名验证计算,获得开发者签名信息的摘要值、APK ZIP文件条目内容的摘要值、APK中央目录的摘要值和APK签名块的摘要值。然后,签名验证模块802可以自己先计算开发者实名APK所包含的开发者签名信息、APK ZIP文件条目内容、APK中央目录和APK签名块中每者的摘要值,并将计算得到的开发者签名信息的摘要值与经过签名验证计算得到的开发者签名信息的摘要值进行比对、将计算得到的APK ZIP文件条目内容的摘要值与经过签名验证计算得到的APK ZIP文件条目内容的摘要值进行比对、将计算得到的APK中央目录的摘要值与经过签名验证计算得到的APK中央目录的摘要值进行比对、将计算得到的APK签名块的摘要值与经过签名验证计算得到的APK签名块的摘要值进行比对。在四种比对结果均为相匹配的情况下,可以确定开发者签名值签名验证通过,此时可以说明APK确实经开发者签名过,即可以确定开发者的身份是真实的,也即可以确定APK确实为真正的开发者所开发,并且APK并未被篡改过。
在开发者签名值签名验证通过的情况下,签名验证模块802可以确定开发者实名APK签名验证通过。
生成模块803在对开发者实名APK中的开发者签名值签名验证通过的情况下,可以生成第三方签名信息。其中,第三方签名信息可以至少包含由CA2所签发的包括第三方的公钥71的第三方证书6。需要说明的是,第三方签名信息还可以包含,但不限于,第三方签名项目名称、第三方名称、签名日期、签名地址和软件物料清单(SBOM)等等。
签名模块804可以利用第三方的私钥72对第三方签名信息和原生APK的数据进行签名,获得第三方签名值。
根据本公开的示例性实施例,签名模块804可以根据SM2算法,利用第三方的私钥对第三方签名信息和原生APK的数据进行签名,获得第三方签名值。此外,除了可使用SM2算法之外,还可使用RSA、DSA等算法。
根据本公开的示例性实施例,签名模块804利用第三方的私钥72对第三方签名信息和原生APK的数据进行签名,获得第三方签名值时,该原生APK的数据包括原生APK所包含的APK ZIP文件条目内容和APK中央目录。
插入模块805可以将第三方签名值和第三方签名信息插入开发者实名APK的APK签名块内,获得第三方签名APK。例如,插入模块805可以将第三方签名值和第三方签名信息插入APK ZIP文件条目内容和APK中央目录之间的APK签名块内,获得第三方签名APK。
图9是根据本公开的示例性实施例示出的一种数字签名系统的框图。
参照图9,该数字签名系统900可包括开发者终端901和至少一个第三方终端902。
可以在开发者终端901处执行第一数字签名操作以生成开发者实名APK。
其中,第一数字签名操作包括:
开发者终端901可以利用原生签名方法对应用程序包APK进行签名,获得原生APK。例如,开发者终端901可以使用Android原生v2、v3签名方法对APK进行签名,获得原生APK。然后,开发者终端901可以生成开发者签名信息。其中,开发者签名信息可以至少包含由证书授权中心CA2所签发的包括开发者的公钥41的开发者证书3。接下来,开发者终端901可以利用开发者的私钥42对开发者签名信息和原生APK的数据进行签名,获得开发者签名值。然后,开发者终端901可以将开发者签名值和开发者签名信息插入原生APK的APK签名块内,获得开发者实名APK。例如,开发者终端901可以将开发者签名值和开发者签名信息插入APKZIP文件条目内容和APK中央目录之间的APK签名块内,获得开发者实名APK。这样,由于开发者签名信息至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书,可以保证开发者证书的合法性。如果开发者实名APK签名验证通过,说明开发者的身份是真实的,即待安装的APK是由真正的开发者所开发出来的,并且没有被篡改过,不会引入恶意代码或者病毒,可以避免安装该APK之后出现数据被恶意窃取或者泄露的情况,提高了数据安全性和移动网络的安全性。
可以在至少一个第三方终端902中的每个第三方终端902处,获取由开发者终端901生成的开发者实名APK或由另一第三方终端生成的第三方签名APK,并对开发者实名APK或第三方签名APK执行第二数字签名操作以生成该第三方终端的第三方签名APK。
其中,第二数字签名操作包括:
对开发者实名APK中的开发者签名值或者另一第三方终端生成的第三方签名APK中的开发者签名值进行签名验证。接下来,在对开发者实名APK中的开发者签名值或者另一第三方终端生成的第三方签名APK中的开发者签名值签名验证通过的情况下,可以生成第三方签名信息。其中,第三方签名信息可以至少包含由CA2所签发的包括第三方的公钥71的第三方证书6。需要说明的是,第三方签名信息还可以包含第三方签名项目名称、第三方名称、签名日期、签名地址和软件物料清单(SBOM)等等。然后,可以利用第三方的私钥72对第三方签名信息、原生APK的数据进行签名,获得第三方签名值。接下来,可以将第三方签名值和第三方签名信息插入开发者实名APK或者另一第三方终端生成的第三方签名APK的APK签名块内,获得该第三方终端的第三方签名APK。例如,可以将第三方签名值和第三方签名信息插入APK ZIP文件条目内容和APK中央目录之间的APK签名块内,获得该第三方终端的第三方签名APK。这样,由于第三方签名信息至少包含由CA所签发的包括第三方的公钥的第三方证书,可以保证第三方证书的合法性。如果第三方签名APK签名验证通过,说明待安装的APK是经过合法的第三方核准验证过的,由于待安装的APK通过了合法的第三方的监管审查,因此,待安装的APK的安全性、合法性都得到了保证。进一步的,由于第三方终端对开发者实名APK签名之前已经对开发者实名APK进行了签名验证,因此,第三方签名APK签名验证通过隐含说明开发者实名APK签名验证通过。此时一并实现了对开发者的身份的验证以及对待安装的APK的安全性、合法性的验证,可以确保安装APK的电子设备免受恶意攻击,保障数据安全性和移动网络的安全性。
如果存在多个第三方,每个第三方均可以通过执行上述第二数字签名操作以获得该第三方的第三方签名APK。如前所述,第三方可以为软件安全检测认证机构、软件行业合规认证机构等等,利用多个第三方对开发者实名APK或由另一第三方终端生成的第三方签名APK执行第二数字签名操作,可以实现多方对APK监管审查的目的,还可以实现软件责任可溯源。例如,软件安全检测认证机构对开发者实名APK执行第二数字签名操作,可以保证APK的安全性;软件行业合规认证机构对开发者实名APK执行第二数字签名操作,可以保证APK符合行业标准等等。
图10是根据本公开的示例性实施例示出的一种电子设备的框图。
参照图10,电子设备1000包括至少一个存储器1001和至少一个处理器1002,所述至少一个存储器1001中存储有指令,当指令被至少一个处理器1002执行时,执行根据本公开的示例性实施例的数字签名方法。
作为示例,电子设备1000可以是PC计算机、平板装置、个人数字助理、智能手机、或其他能够执行上述指令的装置。这里,电子设备1000并非必须是单个的电子设备,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。电子设备1000还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子设备。
在电子设备1000中,处理器1002可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。
处理器1002可运行存储在存储器1001中的指令或代码,其中,存储器1001还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,网络接口装置可采用任何已知的传输协议。
存储器1001可与处理器1002集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储器1001可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储器1001和处理器1002可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器1002能够读取存储在存储器中的文件。
此外,电子设备1000还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。电子设备1000的所有组件可经由总线和/或网络而彼此连接。
根据本公开的示例性实施例,还可提供一种计算机可读存储介质,当计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述数字签名方法。这里的计算机可读存储介质的示例包括:只读存储器(ROM)、随机存取可编程只读存储器(PROM)、电可擦除可编程只读存储器(EEPROM)、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存、非易失性存储器、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、蓝光或光盘存储器、硬盘驱动器(HDD)、固态硬盘(SSD)、卡式存储器(诸如,多媒体卡、安全数字(SD)卡或极速数字(XD)卡)、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘以及任何其他装置,所述任何其他装置被配置为以非暂时性方式存储计算机程序以及任何相关联的数据、数据文件和数据结构并将所述计算机程序以及任何相关联的数据、数据文件和数据结构提供给处理器或计算机使得处理器或计算机能执行所述计算机程序。上述计算机可读存储介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,此外,在一个示例中,计算机程序以及任何相关联的数据、数据文件和数据结构分布在联网的计算机系统上,使得计算机程序以及任何相关联的数据、数据文件和数据结构通过一个或多个处理器或计算机以分布式方式存储、访问和执行。
根据本公开的数字签名方法和数字签名设备,由于开发者签名信息至少包含由证书授权中心CA所签发的包括开发者的公钥的开发者证书,可以保证开发者证书的合法性。如果开发者实名APK签名验证通过,说明开发者的身份是真实的,即待安装的APK是由真正的开发者所开发出来的,并且没有被篡改过,不会引入恶意代码或者病毒,可以避免安装该APK之后出现数据被恶意窃取或者泄露的情况,提高了数据安全性和移动网络的安全性。并且,由于第三方签名信息至少包含由CA所签发的包括第三方的公钥的第三方证书,可以保证第三方证书的合法性。如果第三方签名APK签名验证通过,说明待安装的APK是经过合法的第三方核准验证过的,由于待安装的APK通过了合法的第三方的监管审查,因此,待安装的APK的安全性、合法性都得到了保证。进一步的,由于第三方终端对开发者实名APK签名之前已经对开发者实名APK进行了签名验证,因此,第三方签名APK签名验证通过隐含说明开发者实名APK签名验证通过。此时一并实现了对开发者的身份的验证以及对待安装的APK的安全性、合法性的验证,可以确保安装APK的电子设备免受恶意攻击,保障数据安全性和移动网络的安全性。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (18)
1.一种数字签名方法,应用于开发者终端,其特征在于,所述方法包括:
利用原生签名方法对应用程序包APK进行签名,获得原生APK;
生成开发者签名信息,其中,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书;
利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值;
将所述开发者签名值和所述开发者签名信息插入所述原生APK的APK签名块内,获得开发者实名APK。
2.如权利要求1所述的方法,其特征在于,所述利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值,包括:
根据SM2算法,利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得所述开发者签名值。
3.如权利要求1或2所述的方法,其特征在于,所述原生APK的数据包含APK ZIP文件条目内容、APK中央目录和所述APK签名块。
4.一种数字签名方法,应用于第三方终端,其特征在于,所述方法包括:
获取由开发者终端生成的开发者实名应用程序包APK,其中,所述开发者实名APK的APK签名块包含开发者签名信息和开发者签名值,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书,所述开发者签名值是利用所述开发者的私钥对所述开发者签名信息和原生APK的数据进行签名而获得的,其中,所述原生APK是利用原生签名方法对APK进行签名而获得的;
对所述开发者实名APK中的所述开发者签名值进行签名验证;
在对所述开发者实名APK中的所述开发者签名值签名验证通过的情况下,生成第三方签名信息,其中,所述第三方签名信息至少包含由所述CA所签发的包括所述第三方的公钥的第三方证书;
利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得第三方签名值;
将所述第三方签名值和所述第三方签名信息插入所述开发者实名APK的所述APK签名块内,获得第三方签名APK。
5.如权利要求4所述的方法,其特征在于,所述对所述开发者实名APK中的所述开发者签名值进行签名验证,包括:
利用所述CA的公钥对所述开发者签名信息所包含的所述开发者证书进行签名验证;
在所述开发者证书签名验证通过的情况下,利用所述开发者证书内所包含的所述开发者的公钥对所述开发者签名值进行签名验证。
6.如权利要求4所述的方法,其特征在于,所述利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得第三方签名值,包括:
根据SM2算法,利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得所述第三方签名值。
7.如权利要求6所述的方法,其特征在于,所述原生APK的数据包括所述原生APK所包含的APK ZIP文件条目内容和APK中央目录。
8.一种数字签名方法,其特征在于,应用于开发者终端和至少一个第三方终端,所述数字签名方法包括:
在所述开发者终端处,执行第一数字签名操作以生成开发者实名APK;
在所述至少一个第三方终端中的每个第三方终端处,获取由所述开发者终端生成的所述开发者实名APK或由另一第三方终端生成的第三方签名APK,并对所述开发者实名APK或所述第三方签名APK执行第二数字签名操作以生成该第三方终端的第三方签名APK;
其中,所述第一数字签名操作包括:
利用原生签名方法对应用程序包APK进行签名,获得原生APK;
生成开发者签名信息,其中,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书;
利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值;
将所述开发者签名值和所述开发者签名信息插入所述原生APK的APK签名块内,获得开发者实名APK;
其中,所述第二数字签名操作包括:
对所述开发者实名APK中的所述开发者签名值或者所述另一第三方终端生成的第三方签名APK中的所述开发者签名值进行签名验证;
在对所述开发者实名APK中的所述开发者签名值或者所述另一第三方终端生成的第三方签名APK中的所述开发者签名值签名验证通过的情况下,生成第三方签名信息,其中,所述第三方签名信息至少包含由所述CA所签发的包括所述第三方的公钥的第三方证书;
利用所述第三方的私钥对所述第三方签名信息、所述原生APK的数据进行签名,获得第三方签名值;
将所述第三方签名值和所述第三方签名信息插入所述开发者实名APK或者所述另一第三方终端生成的第三方签名APK的所述APK签名块内,获得该第三方终端的第三方签名APK。
9.一种数字签名设备,应用于开发者终端,其特征在于,包括:
第一签名模块,被配置为利用原生签名方法对应用程序包APK进行签名,获得原生APK;
生成模块,被配置为生成开发者签名信息,其中,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书;
第二签名模块,被配置为利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值;
插入模块,被配置为将所述开发者签名值和所述开发者签名信息插入所述原生APK的APK签名块内,获得开发者实名APK。
10.如权利要求9所述的数字签名设备,其特征在于,所述第二签名模块被配置为根据SM2算法,利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得所述开发者签名值。
11.如权利要求9或10所述的数字签名设备,其特征在于,所述原生APK的数据包含APKZIP文件条目内容、APK中央目录和所述APK签名块。
12.一种数字签名设备,应用于第三方终端,其特征在于,包括:
获取模块,被配置为获取由开发者终端生成的开发者实名应用程序包APK,其中,所述开发者实名APK的APK签名块包含开发者签名信息和开发者签名值,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书,所述开发者签名值是利用所述开发者的私钥对所述开发者签名信息和原生APK的数据进行签名而获得的,其中,所述原生APK是利用原生签名方法对APK进行签名而获得的;
签名验证模块,被配置为对所述开发者实名APK中的所述开发者签名值进行签名验证;
生成模块,被配置为在对所述开发者实名APK中的所述开发者签名值签名验证通过的情况下,生成第三方签名信息,其中,所述第三方签名信息至少包含由所述CA所签发的包括所述第三方的公钥的第三方证书;
签名模块,被配置为利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得第三方签名值;
插入模块,被配置为将所述第三方签名值和所述第三方签名信息插入所述开发者实名APK的所述APK签名块内,获得第三方签名APK。
13.如权利要求12所述的数字签名设备,其特征在于,所述签名验证模块被配置为:
利用所述CA的公钥对所述开发者签名信息所包含的所述开发者证书进行签名验证;
在所述开发者证书签名验证通过的情况下,利用所述开发者证书内所包含的所述开发者的公钥对所述开发者签名值进行签名验证。
14.如权利要求12所述的数字签名设备,其特征在于,所述签名模块被配置为根据SM2算法,利用所述第三方的私钥对所述第三方签名信息和所述原生APK的数据进行签名,获得所述第三方签名值。
15.如权利要求14所述的数字签名设备,其特征在于,所述原生APK的数据包括所述原生APK所包含的APK ZIP文件条目内容和APK中央目录。
16.一种数字签名系统,其特征在于,包括开发者终端和至少一个第三方终端;
在所述开发者终端处,执行第一数字签名操作以生成开发者实名APK;
在所述至少一个第三方终端中的每个第三方终端处,获取由所述开发者终端生成的所述开发者实名APK或由另一第三方终端生成的第三方签名APK,并对所述开发者实名APK或所述第三方签名APK执行第二数字签名操作以生成该第三方终端的第三方签名APK;
其中,所述第一数字签名操作包括:
利用原生签名方法对应用程序包APK进行签名,获得原生APK;
生成开发者签名信息,其中,所述开发者签名信息至少包含由证书授权中心CA所签发的包括所述开发者的公钥的开发者证书;
利用所述开发者的私钥对所述开发者签名信息和所述原生APK的数据进行签名,获得开发者签名值;
将所述开发者签名值和所述开发者签名信息插入所述原生APK的APK签名块内,获得开发者实名APK;
其中,所述第二数字签名操作包括:
对所述开发者实名APK中的所述开发者签名值或者所述另一第三方终端生成的第三方签名APK中的所述开发者签名值进行签名验证;
在对所述开发者实名APK中的所述开发者签名值或者所述另一第三方终端生成的第三方签名APK中的所述开发者签名值签名验证通过的情况下,生成第三方签名信息,其中,所述第三方签名信息至少包含由所述CA所签发的包括所述第三方的公钥的第三方证书;
利用所述第三方的私钥对所述第三方签名信息、所述原生APK的数据进行签名,获得第三方签名值;
将所述第三方签名值和所述第三方签名信息插入所述开发者实名APK或者所述另一第三方终端生成的第三方签名APK的所述APK签名块内,获得该第三方终端的第三方签名APK。
17.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至8中任一项所述的数字签名方法。
18.一种计算机可读存储介质,其特征在于,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至8中任一项所述的数字签名方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111132826.XA CN113886894A (zh) | 2021-09-27 | 2021-09-27 | 数字签名方法和数字签名设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111132826.XA CN113886894A (zh) | 2021-09-27 | 2021-09-27 | 数字签名方法和数字签名设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113886894A true CN113886894A (zh) | 2022-01-04 |
Family
ID=79006916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111132826.XA Pending CN113886894A (zh) | 2021-09-27 | 2021-09-27 | 数字签名方法和数字签名设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113886894A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11632251B1 (en) * | 2022-02-28 | 2023-04-18 | Snowflake Inc. | Commit signing service |
-
2021
- 2021-09-27 CN CN202111132826.XA patent/CN113886894A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11632251B1 (en) * | 2022-02-28 | 2023-04-18 | Snowflake Inc. | Commit signing service |
US12022005B2 (en) | 2022-02-28 | 2024-06-25 | Snowflake Inc. | Commit signing service |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7788730B2 (en) | Secure bytecode instrumentation facility | |
US10372914B2 (en) | Validating firmware on a computing device | |
CN102208000B (zh) | 为虚拟机镜像提供安全机制的方法和系统 | |
EP3317875B1 (en) | Keyless signature infrastructure based virtual machine integrity | |
CN101432752B (zh) | 可信平台现场升级系统和方法 | |
JP6880055B2 (ja) | メッセージ偽造防止実施方法及びデバイス | |
CN103329093A (zh) | 更新软件 | |
CN112037058B (zh) | 数据验证方法、装置及存储介质 | |
CN102883324A (zh) | 移动终端中的插件调用安全验证方法及装置、移动终端 | |
CN110021291B (zh) | 一种语音合成文件的调用方法及装置 | |
CN107729746B (zh) | 一种基于数字签名的已安装应用程序防篡改方法及系统 | |
CN114021106B (zh) | 一种可信度量的远程认证方法、装置及系统 | |
US12111893B2 (en) | System and method for protecting software licensing information via a trusted platform module | |
CN109710695A (zh) | 事务请求有效性识别和发起方法、装置、设备和介质 | |
CN109445705A (zh) | 固件认证方法及固态硬盘 | |
KR20170089352A (ko) | 가상화 시스템에서 수행하는 무결성 검증 방법 | |
CN111259364B (zh) | 一种使用国密加密卡的方法、装置、设备及存储介质 | |
CN106709281B (zh) | 补丁发放和获取方法、装置 | |
CN113886894A (zh) | 数字签名方法和数字签名设备 | |
KR101482700B1 (ko) | 해시를 이용한 프로그램의 무결성 검증 방법 | |
JP2005293109A (ja) | ソフトウェア実行管理装置、ソフトウェア実行管理方法、及び制御プログラム | |
CN113448681A (zh) | 一种虚拟机监控器公钥的注册方法、设备和存储介质 | |
CN112825093B (zh) | 安全基线检查方法、主机、服务器、电子设备及存储介质 | |
CN115001805B (zh) | 单点登录方法、装置、设备及存储介质 | |
CN111177752A (zh) | 一种基于静态度量的可信文件存储方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |