掌桥专利:专业的专利平台
掌桥专利
首页

一种数字签名方法及计算设备

文献发布时间:2023-06-19 11:29:13


一种数字签名方法及计算设备

技术领域

本发明涉及数据签名技术领域,特别涉及一种数字签名方法及计算设备。

背景技术

现有技术中的数字签名包括独立签名(Parallel Signature)和会签(CounterSignature)两种方式,独立签名是对数据独立进行数字签名,对于有多个证书签名存在的情况,签名数据之间不存在依赖关系。会签是对已存在的签名和数据进行数字签名,或者只针对签名进行数字签名,它依赖于已经签名的数据,在验证时需要多方签名数据都验证通过才能验证成功。

独立签名的优点是在验证时不需要依赖其他签名数据,而会签则依赖已经签名的数据。而在一些应用场景中,既需要具备独立签名的优势,又需要在某些特定情况下能够具备会签的一些特性。例如,在一些特殊场景下,在对应用数据包(例如DEB包)文件进行本地签名后,独立签名的DEB包还需要经过应用商店后台处理后才能安装执行;而在另一些场景下,则需要该独立签名的DEB包不经过应用商店后台处理就能够安装执行。但根据现有技术中的方案,会签只能满足前一种场景需求,而独立签名只能满足后一种场景需求。

为此,需要一种兼具独立签名和会签特性的数字签名方法,以解决上述技术方案中存在的问题。

发明内容

为此,本发明提供一种数字签名方法及计算设备,以力图解决或者至少缓解上面存在的问题。

根据本发明的一个方面,提供了一种数字签名方法,在计算设备中执行,包括步骤:基于第一证书对应用数据包进行数字签名,生成第一签名数据;判断所述第一签名数据的未签名属性集合中是否包括伪会签属性;如果包括伪会签属性,则确定进行会签,基于第二证书对所述第一签名数据进行数字签名,生成第二签名数据;将所述第二签名数据挂载到所述未签名属性集合中的伪会签属性下,生成目标签名数据。

可选地,在根据本发明的数字签名方法中,还包括步骤:如果不包括伪会签属性,则判断是否进行会签;如果确定进行会签,则构造伪会签属性,并将伪会签属性挂载到所述第一签名数据的未签名属性集合;如果确定不进行会签,则签名完成。

可选地,在根据本发明的数字签名方法中,所述第一签名数据包括签名者类型,所述签名者类型中包括签名属性集合和未签名属性集合。

可选地,在根据本发明的数字签名方法中,所述伪会签属性包括相应的标识符,判断所述第一签名数据的未签名属性集合中是否包括伪会签属性的步骤包括:遍历所述第一签名数据中的签名者类型的未签名属性集合中的属性数据,以便查找所述未签名属性集合中是否包括伪会签属性对应的标识符;如果包括所述标识符,则确定所述未签名属性集合中包括伪会签属性;如果不包括所述标识符,则确定所述未签名属性集合中不包括伪会签属性。

可选地,在根据本发明的数字签名方法中,将伪会签属性挂载到第一签名数据的未签名属性集合包括:将伪会签属性基于相应的标识符挂载到所述第一签名数据的未签名属性集合。

可选地,在根据本发明的数字签名方法中,将第二签名数据挂载在所述未签名属性集合中的伪会签属性下的步骤包括:将所述第二签名数据转换为DER编码格式,并将DER编码格式的第二签名数据挂载在所述伪会签属性下。

可选地,在根据本发明的数字签名方法中,基于第二证书对所述第一签名数据进行数字签名包括:基于第二证书对所述第一签名数据中签名者类型的签名属性集合中的数据进行数字签名。

可选地,在根据本发明的数字签名方法中,所述第一证书为开发者证书,第一签名数据为开发者签名数据;所述第二证书为商店平台证书,第二签名数据为商店签名数据。

根据本发明的一个方面,提供了一种计算设备,包括:至少一个处理器;以及存储器,存储有程序指令,其中,所述程序指令被配置为适于由所述至少一个处理器执行,所述程序指令包括用于执行如上所述的方法的指令。

根据本发明的一个方面,提供了一种存储有程序指令的可读存储介质,当所述程序指令被计算设备读取并执行时,使得所述计算设备执行如上所述方法。

根据本发明的技术方案,提供了一种数字签名方法,灵活设置了签名数据中的伪会签属性,通过检测是否存在伪会签属性来决定执行独立签名还是会签方式。其中,在需要进行会签的情况下,在生成第一签名数据的未签名属性集合中会包括伪会签属性,基于检测到的伪会签属性,会进一步对第一签名数据进行数字签名生成第二签名数据,通过将第二签名数据挂载到伪会签属性下,便实现了对应用数据包的会签。如果生成的第一签名数据的未签名属性集合中不包括伪会签属性,本发明依然可以选择是否进行会签。即使当前的未签名属性集合中不包括伪会签属性,在确定有会签需求的情况下,可以构造伪会签属性,并将伪会签属性挂载到所述第一签名数据的未签名属性集合,以便基于构造的伪会签属性来执行会签。如果没有会签需求,则会执行独立签名,不再进行会签。这样,本发明的数字签名方法,兼具独立签名和会签两种签名方式的特性和优势,以便根据实际应用场景来选择更合适的签名方式,能够满足多种应用场景的需求。

附图说明

为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。

图1示出了根据本发明一个实施例的计算设备100的示意图;

图2示出了根据本发明一个实施例的数字签名方法200的流程图;

图3示出了根据本发明一个实施例的开发者签名数据的结构示意图;

图4示出了根据本发明一个实施例的挂载商店签名数据后的数据结构示意图;以及

图5示出了根据本发明一个实施例的签名验证方法500的流程图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1是示例计算设备100的示意框图。

如图1所示,在基本的配置102中,计算设备100典型地包括系统存储器106和一个或者多个处理器104。存储器总线108可以用于在处理器104和系统存储器106之间的通信。

取决于期望的配置,处理器104可以是任何类型的处理,包括但不限于:微处理器(UP)、微控制器(UC)、数字信息处理器(DSP)或者它们的任何组合。处理器104可以包括诸如一级高速缓存110和二级高速缓存112之类的一个或者多个级别的高速缓存、处理器核心114和寄存器116。示例的处理器核心114可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器118可以与处理器104一起使用,或者在一些实现中,存储器控制器118可以是处理器104的一个内部部分。

取决于期望的配置,系统存储器106可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器106可以包括操作系统120、一个或者多个应用122以及程序数据124。在一些实施方式中,应用122可以布置为在操作系统上由一个或多个处理器104利用程序数据124执行指令。

计算设备100还可以包括储存接口总线134。储存接口总线134实现了从储存设备132(例如,可移除储存器136和不可移除储存器138)经由总线/接口控制器130到基本配置102的通信。操作系统120、应用122以及数据124的至少一部分可以存储在可移除储存器136和/或不可移除储存器138上,并且在计算设备100上电或者要执行应用122时,经由储存接口总线134而加载到系统存储器106中,并由一个或者多个处理器104来执行。

计算设备100还可以包括有助于从各种接口设备(例如,输出设备142、外设接口144和通信设备146)到基本配置102经由总线/接口控制器130的通信的接口总线140。示例的输出设备142包括图形处理单元148和音频处理单元150。它们可以被配置为有助于经由一个或者多个A/V端口152与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口144可以包括串行接口控制器154和并行接口控制器156,它们可以被配置为有助于经由一个或者多个I/O端口158和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备146可以包括网络控制器160,其可以被布置为便于经由一个或者多个通信端口164与一个或者多个其他计算设备162通过网络通信链路的通信。

网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以是这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中以编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。

计算设备100可以实现为包括桌面计算机和笔记本计算机配置的个人计算机。当然,计算设备100也可以实现为小尺寸便携(或者移动)电子设备的一部分,这些电子设备可以是诸如蜂窝电话、数码照相机、个人数字助理(PDA)、个人媒体播放器设备、无线网络浏览设备、个人头戴设备、应用专用设备、或者可以包括上面任何功能的混合设备。甚至可以被实现为服务器,如文件服务器、数据库服务器、应用程序服务器和WEB服务器等。本发明的实施例对此均不做限制。

在根据本发明的实施例中,计算设备100被配置为执行根据本发明的数字签名方法200。其中,计算设备100的应用中包含执行根据本发明的数字签名方法200的多条程序指令,使得本发明的数字签名方法200可以在计算设备中执行。计算设备通过执行本发明的方法200,可以兼具独立签名和会签两种签名方式的特性。

图2示出了根据本发明一个实施例的数字签名方法200的流程图。应当指出,在本发明的具体实施例中,仅以应用数据包为例来对本发明的数字签名方法进行详细说明,但本发明的签名策略并不限于对应用数据包的签名。

如图2所示,方法200始于步骤S210。

在步骤S210中,基于第一证书对应用数据包进行数字签名,生成第一签名数据。应当指出,该第一签名数据(开发者签名数据)是对应用数据包独立进行数字签名的独立签名数据类型。

根据本发明的一个实施例,第一证书例如是开发者证书,基于开发人员的开发者证书对应用数据包进行数字签名后,生成的第一签名数据即是开发者签名数据SignedData_developer。应用数据包例如可以实现为适配Linux操作系统的DEB包,但本发明不限于此。

在本发明的实施方式中,可以采用PKCS#7或CMS标准来对应用数据包进行数字签名。

图3示出了根据本发明一个实施例的开发者签名数据的结构示意图。

如图3所示,根据一个实施例,本发明中的开发者签名数据(第一签名数据)包括语法的版本号version、一个或多个签名者的信息摘要算法标识的集合digestAlgorithms、封装的被签名内容encapContentInfo、扩展证书的集合certificates、签名证书(证书撤销列表)的集合crls、签名者类型SignerInfo的集合SignerInfos。

其中,签名者类型SignerInfo中包括语法的版本号version、sid、签名者的信息摘要算法及相应的参数digestAlgorithm、签名属性集合signedAttrs、未签名属性集合unsignedAttrs,还包括签名算法signatureAlgorithm和相应的签名signature。

签名属性集合signedAttributes中的属性可以作为被签名的数据,或者说是可以被进一步签名(会签)的数据。如果用于进一步签名,签名属性集合一般包括被签名内容属性和信息摘要算法属性。

未签名属性集合unsignedAttributes中的属性不会被用于签名,并且可以挂载不同类型的属性数据。未签名属性集合中的属性项可以选择,例如可以在未签名属性集合中添加会签属性,也可以自定义未签名属性集合中的属性。

随后,在步骤S220中,判断第一签名数据中的签名者类型的未签名属性集合unsignedAttributes中是否包括伪会签属性。如果包括伪会签属性,则确定进行会签,并执行下述步骤S230。

需要说明的是,伪会签属性pseudo_counterSign即是未填充签名数据的属性。伪会签属性可用于挂载签名数据,例如挂载会签数据类型。具体地,参见图3,伪会签属性中的SignedData_null可以被替换为会签数据类型。

在步骤S230中,基于第二证书对第一签名数据进行数字签名,生成第二签名数据。在一种实施方式中,基于第二证书对第一签名数据进行数字签名,实际上是对第一签名数据中签名者类型的签名属性集合中的属性数据(已经签名的数据)进行会签,所生成的第二签名数据也即是会签数据类型。

根据本发明的一个实施例,第二证书例如是商店平台证书,基于商店平台证书对第一签名数据进行数字签名后,生成的第二签名数据即是商店签名数据SignedData_appstore。

最后,在步骤S240中,将第二签名数据挂载到第一签名数据中签名者类型的未签名属性集合中的伪会签属性下,从而生成最终的目标签名数据。在一个实施例中,是将商店签名数据SignedData_appstore挂载在开发者签名数据SignedData_developer中签名者类型SignerInfo的未签名属性集合unsignedAttributes中的伪会签属性下,以替换伪会签属性中的SignedData_null。

其中,图4示出了根据本发明一个实施例的挂载商店签名数据后的数据结构示意图。

根据一种实施方式,如图3和图4所示,伪会签属性中的数据实际是以DER编码格式的数据存放。因此,在挂载第二签名数据时,是将第二签名数据的数据结构(例如SignedData_appstore)转换为DER编码格式,并将DER编码格式的第二签名数据挂载在伪会签属性下,以替换SignedData_null。

还应当指出,在本发明的一个实施例中,伪会签属性适于基于OID(ObjectIdentifier,对象标识符)形式挂载到未签名属性集合unsignedAttributes下。换言之,伪会签属性包括与其唯一相对应的OID标识符,该标识符可用于标识伪会签属性。在一种实施方式中,如图3和图4所示,伪会签属性对应的OID标识符例如为oid_pseudo_counterSign,但不限于此。

基于此,对于步骤S220,在判断第一签名数据的未签名属性集合中是否包括伪会签属性时,实际上,是判断未签名属性集合中是否包括伪会签属性对应的标识符。

具体而言,步骤S220中在判断第一签名数据的未签名属性集合中是否包括伪会签属性时,具体可以按照以下方法执行:

遍历第一签名数据中的签名者类型的未签名属性集合中的属性数据,以便查找未签名属性集合中是否包括伪会签属性对应的标识符。如果包括伪会签属性对应的标识符,则确定未签名属性集合中包括伪会签属性。如果不包括伪会签属性对应的标识符,则确定未签名属性集合中不包括伪会签属性。

另外,在步骤S220中,如果第一签名数据的未签名属性集合中不包括伪会签属性,则进一步判断是否进行会签。

如果确定进行会签,则构造未填充数据的伪会签属性,并将伪会签属性挂载到第一签名数据的未签名属性集合。这里,即是将伪会签属性基于相应的OID标识符挂载到第一签名数据的未签名属性集合。

如果确定不进行会签,则确定该签名流程采用独立签名方式,并确定对应用数据包的签名完成,不再对第一签名数据进行会签,第一签名数据即是目标签名数据。

综上,根据本发明的数字签名方法,灵活设置了签名数据中的伪会签属性,通过检测是否存在伪会签属性来决定执行独立签名还是会签方式。其中,在需要进行会签的情况下,在生成第一签名数据的未签名属性集合中会包括伪会签属性,基于检测到的伪会签属性,会进一步对第一签名数据进行数字签名生成第二签名数据,通过将第二签名数据挂载到伪会签属性下,便实现了对应用数据包的会签。如果生成的第一签名数据的未签名属性集合中不包括伪会签属性,本发明依然可以选择是否进行会签。即使当前的未签名属性集合中不包括伪会签属性,在确定有会签需求的情况下,可以构造伪会签属性,并将伪会签属性挂载到所述第一签名数据的未签名属性集合,以便基于构造的伪会签属性来执行会签。如果没有会签需求,则会执行独立签名,不再进行会签。这样,本发明可以兼具独立签名和会签两种签名方式的特性和优势,以便根据实际应用场景来选择更合适的签名方式,能够满足多种应用场景的需求。

图5示出了根据本发明一个实施例的签名验证方法500的流程图。

应当指出,签名验证方法500是针对采用上文中的数字签名方法200进行数字签名的数据进行验证的方法。如图5所示,方法始于步骤S510。

在步骤S510中,获取目标签名数据,对目标签名数据中的第一签名数据进行验证。例如,可以基于PKCS#7验签流程来验证签名数据。这里,所验证的第一签名数据实际上是指:目标签名数据中与未签名属性集合相对应的签名者类型所在的签名数据进行验证,不包括伪会签属性下挂载的第二签名数据。这里的未签名属性集合与下文步骤S520中的未签名属性集合相一致。

如果验证通过,则执行步骤S520。在步骤S520中,判断目标签名数据中的未签名属性集合中是否包括伪会签属性,也即是判断未签名属性集合中是否包括伪会签属性对应的OID标识符。在一种实施方式中,通过遍历第一签名数据中的签名者类型的未签名属性集合中的属性数据,来查找未签名属性集合中是否包括伪会签属性对应的标识符。

如果未签名属性集合中包括伪会签属性对应的OID标识符,则执行步骤S530。在步骤S530中,获取伪会签属性下挂载的第二签名数据,并对第二签名数据进行验证。这里,由于伪会签属性下挂载的第二签名数据是DER编码格式的数据,因此,在获取伪会签属性下挂载的第二签名数据后,对第二签名数据进行验证时,首先将DER编码格式的第二签名数据转换为签名数据类型的数据结构,即SignedData结构。进而,对SignedData结构的第二签名数据进行验证。

如果未签名属性集合中不包括伪会签属性对应的OID标识符,则执行步骤S540。在步骤S540中,确定所验证的签名数据是独立签名数据,并确定最终验证通过。

应当指出,与上文中的方法200中的实施例相对应,方法500中的第一签名数据可以是开发者签名数据,第二签名数据可以是商店签名数据。

这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如可移动硬盘、U盘、软盘、CD-ROM或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。

在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的多语言垃圾文本的识别方法。

以示例而非限制的方式,可读介质包括可读存储介质和通信介质。可读存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在可读介质的范围之内。

在此处所提供的说明书中,算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与本发明的示例一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组件可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。

如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。

尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

相关技术
  • 一种数字签名方法及计算设备
  • 一种重构可验证的文档结构、数字签名方法和数字签名验证方法
技术分类

06120112941114