一种基于数字证书的软件多层签名方法及系统转让专利

申请号 : CN202210159085.2

文献号 : CN114239080B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 蒋杏松王玉成康昱孟圆姬一文杨诏钧魏立峰孔金珠谌志华

申请人 : 麒麟软件有限公司

摘要 :

本发明公开了一种基于数字证书的软件多层签名方法及系统,包括在软件包内设置证书分区和签名分区,所述证书分区用于存储数字证书,所述签名分区用于存储数字签名,所述数字证书和所述数字签名一一配套;对待签名数字证书进行签名后,在所述证书分区已有的数字证书末尾添加新的数字证书,在所述签名分区已有的数字签名末尾添加新的数字签名。实现过程简单,签名稳定速度快,实施成本低;能支持不同组织的证书多层签名,解决了因本次签名导致的上层签名失效的问题;能有效的保证软件包来源的可靠性;能有效的保证软件包在安装之前的完整性和一致性。

权利要求 :

1.一种基于数字证书的软件多层签名方法,其特征在于,包括如下步骤:

在软件包内设置证书分区和签名分区,所述证书分区用于存储数字证书,所述签名分区用于存储数字签名,所述数字证书和所述数字签名一一配套;

对待签名数字证书进行签名后,在所述证书分区已有的数字证书末尾添加新的数字证书,在所述签名分区已有的数字签名末尾添加新的数字签名还包括多证书验证,所述多证书验证包括:

判断软件包是否存在多个所述数字证书和所述数字签名,若存在,则定位所述数字证书字段,并对多个所述数字证书进行切割,逐个验证所述数字证书的合法性,读取所述数字证书配套的所述数字签名,并验证所述数字签名的合法性,返回验证结果。

2.根据权利要求1所述的基于数字证书的软件多层签名方法,其特征在于,在添加新的数字证书和数字签名之前,先在所述证书分区已有的数字证书末尾和所述签名分区已有的数字签名末尾添加分隔符。

3.根据权利要求1所述的基于数字证书的软件多层签名方法,其特征在于,对待签名数字证书进行签名时还包括:判断待签名数字证书的组织是否已签名,若已签名则阻止签名,若未签名则进行签名。

4.根据权利要求3所述的基于数字证书的软件多层签名方法,其特征在于,判断待签名数字证书的组织是否已签名,若已签名则阻止签名,若未签名则进行签名包括:判断软件包中是否存在所述数字证书和所述数字签名,若不存在,则正常签名,若存在,则读取待签名数字证书的组织,然后分割所述证书分区中存储的所述数字证书,读取存储的所述数字证书的组织和证书序号,将待签名数字证书的组织和存储的所述数字证书的组织逐个匹配,若匹配成功,则返回证书序号并阻止签名,若匹配不成功,则正常签名。

5.根据权利要求1所述的基于数字证书的软件多层签名方法,其特征在于,还包括指定证书验证,所述指定证书验证包括:获取软件包的路径和指定组织名,判断软件包中是否存在指定组织的数字证书,如果存在,则返回指定组织的数字证书及其证书序号,验证指定组织的数字证书的合法性,根据返回的证书序号截取配套的指定组织的数字签名,验证截取的所述数字签名的合法性,返回验证结果;如果不存在,则验证终止。

6.一种基于数字证书的软件多层签名系统,其特征在于,包括:

设置在软件包内的证书分区和签名分区,所述证书分区用于存储数字证书,所述签名分区用于存储数字签名,所述数字证书和所述数字签名一一配套;

多层证书签名模块,用于对待签名数字证书进行签名后,在所述证书分区已有的数字证书末尾添加新的数字证书,在所述签名分区已有的数字签名末尾添加新的数字签名;

多证书验证模块支持不同组织的数字证书验证;

为了实现对多数字证书验证的支持,首选要判断软件包是否存在数字证书,然后定位到数字证书字段,用数字证书末尾的分隔符对多个数字证书进行分割处理;其次逐个读入数字证书分区的数字证书信息,调用系统库验证证书的合法性;最后从数字签名分区读入配套的数字签名信息,用来验证数字签名的合法性;数字证书分区保存的是签名时使用的数字证书,数字签名分区保存的是使用数字证书和对应的私钥对软件包数据进行签名的签名值;麒麟系统集成了证书链,用来验证证书的合法性,从证书中提取的公钥,才能解密对应的签名信息,从而保障了签名的合法性。

说明书 :

一种基于数字证书的软件多层签名方法及系统

技术领域

[0001] 本申请涉及计算机安全技术领域,尤其涉及一种基于数字证书的软件多层签名方法及系统。

背景技术

[0002] 软件包在传输过程中,容易受到攻击而使软件包内容被替换、篡改或者损坏,因此有必要确保软件包从发布到安装过程中的信息完整性,及软件包开发者与软件包之间不可抵赖的对应关系,常用且较成熟的软件包安全防护措施是利用数字证书签名技术对软件包进行签名验签。在实际的操作过程中,经常需要软件开发者对软件签一次名,软件厂商签一次名,发布到软件商店前软件商店开发厂商再签一次名,这种多层次的签名需求非常常见。
[0003] 为了满足这种多层的软件签名需求,CN100505621提出了一种数字签名锁定域的方法,该方法将数字证书签名对象的一部分内容与用户指定的数字签名控件进行绑定。用户的签名只针对锁定域的部分,第二个用户可以在同一个数字证书签名对象中非锁定域内操作,且不影响第一个人的签名的有效性,依此该数字证书签名对象可以支持多层签名;CN111523889A提出一种基于交易秘钥对和多签模板的方式,首先生成参与交易秘钥对,创建多签模板,返回多签模板地址,根据多签模板创建交易,并返回待签名数据,对待签名数据进行签名,返回签名后的签名数据和布尔值。如果布尔值不满足权重条件,则将签名后的签名数据作为新的签名对象,并使用参与多签模板立定的公钥对应的私钥继续签名判断,直到布尔值满足权重条件,以实现多层签名;CN107632932A提出了一种针对软件仓库的可靠性检测方法,该方法基于多层签名和加密的多级校验技术,支持对软件仓库涉及的源代码软件包、二进制软件包目录、软件仓库摘要文件、软件仓库摘要文件进行可靠性检测。
[0004] 但是现有技术仍然存在一些缺点。CN100505621提出的锁定域的实现方式非常的复杂,只有处理好了锁定域的内容、锁定域之间的关系和算法、锁定域与整个数字证书签名对象之间的关系和算法问题,才能解决多层签名的功能。这么苛刻的实现条件,导致开发成本较高,不利于该方法的普及化,且该方法只能保证锁定域内数据的完整性,不能保证整个签名对象的完整性;CN111523889A提出的方法需要人为的定义布尔值满足的条件,主观性较强,且出现了迭代性的签名过程,签名效果不稳定;CN107632932A提出的多层证书签名是对源代码软件包、二进制软件包目录、软件仓库摘要文件、软件仓库摘要文件进行逐级签名,并不支持不同组织对同一对象的多层证书签名。

发明内容

[0005] 为解决上述现有技术所存在的问题,本发明提出了一种基于数字证书的软件多层签名方法及系统,支持两层及两层以上不同组织的证书签名,该技术实现简单、安全、成本低。
[0006] 为实现上述目的,本发明提供了一种基于数字证书的软件多层签名方法,包括如下步骤:
[0007] 在软件包内设置证书分区和签名分区,所述证书分区用于存储数字证书,所述签名分区用于存储数字签名,所述数字证书和所述数字签名一一配套;
[0008] 对待签名数字证书进行签名后,在所述证书分区已有的数字证书末尾添加新的数字证书,在所述签名分区已有的数字签名末尾添加新的数字签名。
[0009] 可选地,在添加新的数字证书和数字签名之前,先在所述证书分区已有的数字证书末尾和所述签名分区已有的数字签名末尾添加分隔符。
[0010] 可选地,对待签名数字证书进行签名时还包括:判断待签名数字证书的组织是否已签名,若已签名则阻止签名,若未签名则进行签名。
[0011] 可选地,判断待签名数字证书的组织是否已签名,若已签名则阻止签名,若未签名则进行签名包括:
[0012] 判断软件包中是否存在所述数字证书和所述数字签名,若不存在,则正常签名,若存在,则读取待签名数字证书的组织,然后分割所述证书分区中存储的所述数字证书,读取储存的所述数字证书的组织和证书序号,将待签名数字证书的组织和储存的所述数字证书的组织逐个匹配,若匹配成功,则返回证书序号并阻止签名,若匹配不成功,则正常签名。
[0013] 可选地,还包括多证书验证,所述多证书验证包括:
[0014] 判断软件包是否存在多个所述数字证书和所述数字签名,若存在,则定位所述数字证书字段,并对多个所述数字证书进行切割,逐个验证所述数字证书的合法性,读取所述数字证书配套的所述数字签名,并验证所述数字签名的合法性,返回验证结果。
[0015] 可选地,还包括指定证书验证,所述指定证书验证包括:
[0016] 获取软件包的路径和指定组织名,判断软件包中是否存在指定组织的数字证书,如果存在,则返回指定组织的数字证书及其证书序号,验证指定组织的数字证书的合法性,根据返回的证书序号截取配套的指定组织的数字签名,验证截取的所述数字签名的合法性,返回验证结果;如果不存在,则验证终止。
[0017] 本发明还提供了一种基于数字证书的软件多层签名系统,包括:
[0018] 设置在软件包内的证书分区和签名分区,所述证书分区用于存储数字证书,所述签名分区用于存储数字签名,所述数字证书和所述数字签名一一配套;
[0019] 多层证书签名模块,用于对待签名数字证书进行签名后,在所述证书分区已有的数字证书末尾添加新的数字证书,在所述签名分区已有的数字签名末尾添加新的数字签名。
[0020] 从以上技术方案可以看出,本发明的技术方案具有以下优点:
[0021] 1、实现过程简单,签名稳定速度快,实施成本低;
[0022] 2、能支持不同组织的证书多层签名,解决了因本次签名导致的上层签名失效的问题;
[0023] 3、能有效的保证软件包来源的可靠性;
[0024] 4、能有效的保证软件包在安装之前的完整性和一致性。

附图说明

[0025] 为了更清楚地表达说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0026] 图1为本发明实施例中软件多层签名方法的总体框架示意图;
[0027] 图2为本发明实施例中避免证书重复签名流程图;
[0028] 图3为本发明实施例中多层证书签名流程图;
[0029] 图4为本发明实施例中多证书验证流程图;
[0030] 图5为本发明实施例中指定证书验证流程图。

具体实施方式

[0031] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0032] 本发明利用数据分区技术,实现了一种基于数字证书的软件多层签名方法。该方法支持不同组织证书的多层签名和多证书验证,通过上述方法能避免数字证书的重复签名,并能对指定证书的验证。参见图1,本发明分为避免证书重复签名、多层证书签名、多证书验证、指定证书验证四个子模块,各子模块涉及的技术方案如下。
[0033] 1、避免证书重复签名
[0034] 避免证书重复签名模块通过组织名匹配实现了避免证书重复签名功能和待签名数字证书存在性验证功能。
[0035] 2、多层证书签名
[0036] 多层签名模块通过数据分区实现了对不同组织的数字证书多层签名支持。对一个新组织的数字证书签名,只需关注原始文件内容,并在指定的数据分区后面添加新的证书信息和签名信息,证书信息包括数字证书,签名信息包括数字签名,从而保证了既不破坏上一层的证书和签名信息,也不会改变原始文件内容,实现了避免上一层签名失效的问题。
[0037] 3、多证书验证
[0038] 多证书验证模块利用软件包中的证书信息和签名信息是一一配套的关系,对数字证书和数字签名逐个验证其合法性。
[0039] 4、指定证书验证
[0040] 指定证书验证模块是多证书验证模块的特例,需要先根据组织名获取对应数字证书的序号,验证证书的合法性后,再验证该数字证书对应的数字签名。
[0041] 本部分根据上述总体技术方案四个子模块的划分,分别对各模块的实施步骤描述如下:
[0042] ①避免证书重复签名
[0043] a.判断软件包中是否存在数字证书和数字签名;
[0044] b.如果存在,读取待签名数字证书中的组织,然后分割软件包中存在的数字证书,并将待签名数字证书中的组织和软件包中数字证书的组织逐个匹配;
[0045] c.如果匹配成功,则返回数字证书序号,并阻止签名;
[0046] d.如果匹配不成功,则返回匹配失败标识符,签名正常进行;
[0047] e.如果不存在,则返回匹配失败标志符,签名正常进行。
[0048] ②多层证书签名
[0049] a.判断软件包是否存在数字证书;
[0050] b.如果软件包中存在数字证书,进一步判断待签名数字证书是否已存在于软件包中;
[0051] c.如果待签名数字证书不存在于软件包中,则正常进行签名,然后搜索软件包中的数字证书分区,在已有数字证书末尾添加新的数字证书,并更新数字证书字段的大小;
[0052] d.然后搜索软件包中的数字签名分区,在已有数字签名末尾添加新的数字签名,并更新数字签名字段的大小;
[0053] e.多层签名结束;
[0054] f.待签名数字证书存在于软件包中,则待签名终止;
[0055] g.如果软件包中不存在数字证书,则正常进行初次签名。
[0056] ③多证书验证
[0057] a.判断软件包中是否存在多个数字证书和数字签名;
[0058] b.如果存在,则定位数字证书字段,并对多个数字证书进行分割;
[0059] c.逐个验证数字证书的合法性;
[0060] d.读取配套的数字签名,并验证其合法性;
[0061] e.返回多层签名验证结果;
[0062] f.如果不存在,则返回软件包中不存在数字证书与数字签名标志。
[0063] ④指定证书验证
[0064] a.获取软件包的路径和指定组织名;
[0065] b.判断软件包中是否存在指定组织的数字证书;
[0066] c.如果存在,则返回该组织数字证书的序号;
[0067] d.验证该组织数字证书的合法性;
[0068] e.根据c返回的序号截取多个数字签名中该组织的数字签名;
[0069] f.验证该组织数字签名的合法性;
[0070] g.返回指定证书验证结果;
[0071] h.如果不存在,则证书验证终止。
[0072] 具体的,根据图2所示,本部分的作用是避免数字证书重复签名和已存数字证书与数字签名的存在性判断,不管是初次签名还是多层签名,签名之前都需要判断指定证书与签名的存在性。判断软件包中是否存在数字证书和数字签名,若存在,获取待签名数字证书的组织名,将该组织名与软件包中数字证书的组织名逐个匹配,匹配成功则返回指定组织所在数字证书的序号,签名过程终止;不存在,则返回匹配失败标志,签名过程正常进行。
[0073] 具体的,根据图3所示,多层签名前提是软件包已经存在一个或一个以上的数字证书,签名的目的为了要修改数字证书和数字签名字段的大小同时还要将多个数字证书和数字签名区分开来。本部分要解决的问题有两个,一个是实现多层证书签名,一个是防止因软件包内容修改导致的上一层签名失效。
[0074] 针对第一个问题,本发明采用数据分区的方式,在软件包上新增两个分区,一个用来保存数字证书(kylin.cert ),一个用来保存数字签名(kylin.sig),这样既满足了签名验签功能,又保持了应用包的最大的兼容性;首先搜索软件包中的数字证书分区,然后在已有数字证书的末尾添加新的数字证书,同时更新数字证书字段的大小;然后搜索软件包中的数字签名分区,在已有数字签名的末尾添加新的数字签名,同时更新数字签名字段的大小。针对第二个问题,为了避免本次签名导致上一层签名失效,本次签名在数字证书字段和数字签名字段的末尾添加指定的分隔符后,再添加新的数字证书信息和数字签名信息,各组织的数字证书信息和数字签名信息都存在于各自的分区内,互不影响。每一次证书签名只针对软件包原有的内容,而不会修改已有的数字证书和数字签名信息,上一层的数字证书信息和数字签名信息没有被修改,就不会失效。麒麟软件使用的签名证书,采用的是标准的X509格式的证书,证书采用实名认证的方式来注册申请,注册申请者需要提供真实的、代表其身份的组织信息,信息核验通过后,会保存到颁发的证书中;签名验签时,会从证书中解析相应的信息。
[0075] 具体的,根据图4所示,多证书验证模块支持不同组织的数字证书验证。为了实现对多数字证书验证的支持,首选要判断软件包是否存在数字证书,然后定位到数字证书字段,用数字证书末尾的分隔符对多个数字证书进行分割处理;其次逐个读入数字证书分区的数字证书信息,调用系统库验证证书的合法性;最后从数字签名分区读入配套的数字签名信息,用来验证数字签名的合法性。数字证书分区保存的是签名时使用的数字证书,数字签名分区保存的是使用数字证书和对应的私钥对软件包数据进行签名的签名值;麒麟系统集成了证书链,用来验证证书的合法性,从证书中提取的公钥,才能解密对应的签名信息,从而保障了签名的合法性。
[0076] 数字签名分区中的数字签名信息和数字证书分区中的数字证书信息的排列位置是一致的,以固定的标志字符串进行分隔。签名中存在的结束标志字符,在读取签名时以指定字符进行替换,到达验证函数时再替换回结束标志字符。
[0077] 具体的,根据图5所示,对指定证书的验证过程,首先获取软件包的路径和指定组织名,根据此信息来获取软件包中包含给定组织的证书的序号,返回指定组织的证书序号。这一步包含两部分,一个是获取指定组织的数字证书,一个是获取数字证书对应的序号。
[0078] 根据上述证书序号截取多个签名中指定组织的签名,并验证其合法性。这一步也包含两部分,首选验证数字证书的合法性,然后再验证数字签名的合法性。
[0079] 本发明实施例还提出一种基于数字证书的软件多层签名系统,包括:
[0080] 设置在软件包内的证书分区和签名分区,所述证书分区用于存储数字证书,所述签名分区用于存储数字签名,所述数字证书和所述数字签名一一配套;
[0081] 多层证书签名模块,用于对待签名数字证书进行签名后,在所述证书分区已有的数字证书末尾添加新的数字证书,在所述签名分区已有的数字签名末尾添加新的数字签名。
[0082] 本发明的技术方案具有以下优点:
[0083] 1、实现过程简单,签名稳定速度快,实施成本低;
[0084] 2、能支持不同组织的证书多层签名,解决了因本次签名导致的上层签名失效的问题;
[0085] 3、能有效的保证软件包来源的可靠性;
[0086] 4、能有效的保证软件包在安装之前的完整性和一致性。
[0087] 缩略语和关键术语定义
[0088] 本文使用《Posix1003.1e》和《Posix1003.2c》中的术语,以及如下一些定义。
[0089] CA:全称Certificate Authority,即证书颁发机构。
[0090] 私钥:用于加密(签名),自行保管,其安全性是通信安危的关键所在。
[0091] 公钥:用于解密(验签),对外公开,任何人均可持有和使用。
[0092] 数字证书:用于证明公钥合法性的文件,是权威的CA将公钥、持有者的身份等信息用私钥生成的数字签名证书颁发给申请者的。
[0093] 数字签名:数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。
[0094] 应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。