本发明涉及计算机操作系统技术领域,尤其涉及一种基于操作系统软件包的签名认证方法和系统。
背景技术:
操作系统多使用rpm管理软件包。rpm(red-hatpackagemanager)是一款开源的软件包管理工具,包括redhat、openlinux、s.u.s.e.以及turbolinux等linux的分发版本都有采用,可以算是公认的行业标准了。
rpm软件包管理框架支持数字证书验证功能,开源的rpm软件包管理方式相对宽松,任何单位或个人都能通过gpg工具生成自己的秘钥对,并对rpm软件包进行签名验签,存在rpm软件包被肆意签名的风险;其次,gpg是国际规范,采用加密算法都是国际算法,在自主可控性和安全性上存在隐患;最后,gpg规范中使用的加密秘钥存储在文件系统中,存在重大安全隐患。对于一款主打安全的操作系统而言,使用上述rpm软件包管理框架管理软件包无疑存在巨大风险,首先,软件包来源不可靠;其次,系统安全体系可能被破坏。
技术实现要素:
本发明针对现有rpm软件包管理框架存在较大安全隐患的问题,提出一种基于操作系统软件包的签名认证方法和系统。
为了实现上述目的,本发明采用以下技术方案:
本发明一方面提出一种基于操作系统软件包的签名认证方法,包括:
步骤1,由开发者通过开发平台生成rpm软件包;
步骤2,待rpm软件包生成后,由开发者生成对应的公私钥对,并基于公钥向ca中心请求签发数字证书;
步骤3,待签发数字证书完成后,采用私钥对rpm软件包进行签名,并将已签名的rpm软件包发布出去;
步骤4,使用者从发布平台获取已签名的rpm软件包,并将与该rpm软件包签名相关的所有数字证书导入本地操作系统中;
步骤5,本地操作系统遍历所有数字证书以实现该rpm软件包的验签工作;
步骤6,待数字证书t1能够成功验签rpm软件包时,借助根证书t0验证该数字证书t1是否有效,如果验证有效,即可基于rpm软件包实施安装作业。
进一步地,所述步骤2还包括:
由开发者生成对应的公私钥对,将私钥导入到签名硬件密码钥匙中,且导入后的私钥不能从签名硬件密码钥匙读取出。
进一步地,所述签名硬件密码钥匙内部集成多种国密的加解密算法,将开发者生成的私钥使用sm1算法加密后存储在签名硬件密码钥匙中。
进一步地,所述步骤3包括:
步骤3-1,使用sm3算法对rpm软件包计算哈希值,并将哈希值写入文件头相应的字段中;
步骤3-2,使用sm2算法对上述步骤3-1计算得到的哈希值进行私钥签名,将签名值写入文件头相应的字段中。
进一步地,所述步骤5包括:
步骤5-1,读取rpm软件包文件头相应字段中的哈希值和签名值;
步骤5-2,遍历本地操作系统中的存储数据库,并取出一个数字证书;
步骤5-3,使用该数字证书对文件头的签名值进行验签,如果本次验签成功,则进入步骤6;如果本次验签失败,则返回步骤5-2继续取出下一个数字证书并执行验签,直到验签成功,则进入步骤6,如果遍历完所有的数字证书仍不能验签成功,则结束后续流程并提示rpm软件包安装失败。
进一步地,所述步骤6包括:
步骤6-1,从本地操作系统的存储数据库中获取根证书t0,并使用根证书t0对需要验证的数字证书t1进行有效性验证;如果验证成功,则证明所述数字证书t1合法有效,即可实施rpm软件包安装作业,如果验证失败,则进入步骤6-2;
步骤6-2,遍历本地操作系统的存储数据库中除根证书t0和需要验证的数字证书t1之外的所有数字证书,并从中取出一个数字证书ti;
步骤6-3,使用该数字证书ti验证数字证书t1的有效性;
如果验证成功,则返回执行步骤6-1,并使用根证书t0对所述数字证书ti的有效性进行验证,如果验证成功,则证明所述数字证书t1合法有效,即可实施rpm软件包安装作业,如果验证失败,则返回执行步骤6-2,并遍历本地操作系统的存储数据库中除根证书t0、数字证书t1以及数字证书ti之外的所有数字证书,对数字证书ti进行有效性验证;
如果验证失败,返回执行步骤6-2,并从中取出下一个数字证书ti 1,并使用该数字证书ti 1验证数字证书t1的有效性。
进一步地,所述步骤6-1还包括:
如果数字证书t1是由根ca中心签发的,则数字证书t1包括根ca中心采用自己私钥签名的信息;在验证数字证书t1有效性时,采用根ca中心的根证书t0公钥对数字证书t1中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书t1是由根ca中心合法签发的,即可实施rpm软件包安装作业。
进一步地,所述步骤6-3还包括:
如果数字证书t1是一级子ca中心签发的,则数字证书t1包括一级子ca中心采用自己私钥签名的信息;如果数字证书ti是由根ca中心签发的,数字证书ti包括根ca中心采用自己私钥签名的信息;
在使用该数字证书ti验证数字证书t1的有效性时,采用一级子ca中心的一级子根证书t01公钥对数字证书t1中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书t1是由一级子ca中心合法签发的,如果验签失败,则说明数字证书t1不是由一级子ca中心合法签发的;
在使用根证书t0对所述数字证书ti的有效性进行验证时,采用根ca中心的根证书t0公钥对数字证书ti中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书ti是由根ca中心合法签发的,即可实施rpm软件包安装作业,如果验签失败,则说明数字证书ti不是由根ca中心合法签发的。
本发明另一方面还提出一种基于操作系统软件包的签名认证系统,用于实现上述一种基于操作系统软件包的签名认证方法,所述系统包括:
开发平台,用于使开发者生成rpm软件包;
发布平台,用于待rpm软件包生成后,由开发者生成对应的公私钥对,并基于公钥向ca中心请求签发数字证书;待签发数字证书完成后,采用私钥对rpm软件包进行签名,并将已签名的rpm软件包发布出去;
本地操作系统,用于由使用者从发布平台获取已签名的rpm软件包,并导入与该rpm软件包签名相关的所有数字证书;并遍历所有数字证书以实现该rpm软件包的验签工作;待数字证书t1能够成功验签rpm软件包时,借助根证书t0验证该数字证书t1是否有效,如果验证有效,即可基于rpm软件包实施安装作业。
进一步地,所述已签名的rpm软件包包括文件头和文件数据,所述文件头包括哈希值和签名值,所述哈希值是使用sm3算法对rpm软件包进行计算获得的;所述签名值是使用sm2算法对上述计算得到的哈希值进行私钥签名获得的。
与现有技术相比,本发明具有的有益效果:
1)本发明引入多级签名验签机制,用户在安全操作系统上安装rpm软件包时不仅需要验证签名的正确性,同时还要验证验签的数字证书是否由根证书“直接”或“间接”签发的,确保rpm软件包来源是可靠的;
2)本发明使用国密算法sm2算法对软件包进行签名验签,大大增加了密码的自主可控性和安全性;
3)本发明将签名私钥使用sm1算法加密存储在签名硬件密码钥匙中,进一步保证私钥的安全性;
4)rpm软件包的开发者对软件包进行签名,签名前将签名私钥导入到签名硬件密码钥匙内部,同时将验签公钥的数字证书发布出去。签名时,需要将签名硬件密码钥匙插入到计算机设备上。安装rpm软件包前,用户需要首先获得验签相关的所有数字证书,导入到本地操作系统中,安装时不仅要验证签名值还要验证签名证书是否是根证书“直接”或“间接”签发的。有鉴于此,只有通过根证书“直接”或“间接”签发的私钥签名的rpm软件包才能正常安装,有效防止恶意rpm软件包的扩散,保证了系统的安全性。
附图说明
图1为本发明一种基于操作系统软件包的签名认证方法的基本流程图;
图2为本发明的公私钥对生成及数字证书签发的具体工作流程图;
图3为本发明在rpm软件包签名和验签时的具体工作流程图;
图4为本发明rpm软件包的签名流程图;
图5为本发明rpm软件包的验签流程图;
图6为本发明的数字证书合法性验证流程图。
具体实施方式
下面结合附图和具体的实施例对本发明做进一步的解释说明:
如图1所示,本发明第一方面提出一种基于操作系统软件包的签名认证方法,所述方法包括以下步骤:
步骤1,由开发者通过开发平台生成rpm软件包;
步骤2,待rpm软件包生成后,由开发者生成对应的公私钥对,并基于公钥向ca中心请求签发数字证书;
步骤3,待签发数字证书完成后,采用私钥对rpm软件包进行签名,并将已签名的rpm软件包发布出去;
步骤4,使用者从发布平台获取已签名的rpm软件包,并将与该rpm软件包签名相关的所有数字证书导入本地操作系统中;
步骤5,本地操作系统遍历所有数字证书以实现该rpm软件包的验签工作;
步骤6,待某数字证书t1能够成功验签rpm软件包时,则进一步借助根证书t0验证该数字证书t1是否有效,如果验证有效,即可基于rpm软件包实施安装作业。
进一步地,如图2所示,上述步骤2,具体还包括:
由开发者生成对应的公私钥对,将私钥导入到签名硬件密码钥匙中,且导入后的私钥不能从签名硬件密码钥匙读取出。
进一步地,所述签名硬件密码钥匙内部集成多种国密的加解密算法,将开发者生成的私钥使用sm1算法加密后存储在签名硬件密码钥匙中。
在本发明中,通过合理的管理秘钥的存放,大大提高了rpm软件包管理的安全性。rpm软件开发者生成一对公私钥对,将私钥导入到签名硬件密码钥匙中。可以理解,签名硬件密码钥匙有多种存在形式,例如usb、pcie卡、tf卡等;签名硬件密码钥匙身份鉴别方式有多种形式,例如指纹、虹膜、口令等;具体的,所述签名硬件密码钥匙可以为usbkey设备,但不限于此。出于安全性的设计,导入后私钥不能从签名硬件密码钥匙取出,这是由硬件决定的,这样的设计大大增加了私钥的存储安全性。公钥由ca认证中心生成合法证书,发布到网络上供用户使用。当用户安装某个rpm软件包时,先要去获取rpm软件包签名对应的数字证书,并将该数字证书导入到本地操作系统中,本地操作系统可以导入多个数字证书。
如图3所示,在具体实施例中,rpm软件包发布之前,开发者使用硬件密码钥匙对rpm软件包签名,具体做如下处理:①使用sm3算法对rpm软件包计算哈希值,并将哈希值写入文件头相应的字段中;②使用sm2算法对步骤①计算得到的哈希值进行签名,将签名值写入文件头相应的字段中。rpm软件包使用者在安装rpm软件包时对rpm软件包进行验签,具体步骤如下:①从系统中取出每一个公钥证书;②使用该公钥证书对文件头的签名值进行验签;如果本次验签失败,程序会继续取出下一个公钥证书,并执行步骤②,直到验签成功或遍历完所有的公钥证书。③如果验签成功,则验证证书是否为合法证书。
在实际应用中,可以将对应的usbkey设备插入开发者本地的计算机设备上,此时计算机设备开始枚举外设的usbkey设备,并使用sm3算法计算哈希(hash)值并存储到文件扩展属性中;然后使用导入到usbkey设备中的私钥对hash值进行签名,并将签名值保存到文件扩展属性中。如图4所示。
进一步地,上述步骤3,具体包括:
步骤3-1,使用sm3算法对rpm软件包计算哈希值,并将哈希值写入文件头相应的字段中;
步骤3-2,使用sm2算法对上述步骤3-1计算得到的哈希值进行私钥签名,将签名值写入文件头相应的字段中。
可以理解,为了防止引入木马程序、破坏系统的安全体系,确保rpm软件包来源可靠,用户在安装rpm软件包时,需要对所安装的rpm软件包进行验签,只有验签正确的rpm软件包才允许被安装,具体验签流程如图5所示。
进一步地,上述步骤5,具体包括:
步骤5-1,读取rpm软件包文件头相应字段中的哈希值和签名值;
步骤5-2,遍历本地操作系统中的存储数据库,并取出一个数字证书;
步骤5-3,使用该数字证书对文件头的签名值进行验签,如果本次验签成功,则进入步骤6;如果本次验签失败,则返回步骤5-2继续取出下一个数字证书并执行验签,直到验签成功,则进入步骤6,如果遍历完所有的数字证书仍不能验签成功,则结束后续流程并提示rpm软件包安装失败。
为了防止他人伪造签名,本发明增加了对数字证书合法性的验证。数字证书合法性验证流程如图6所示:
进一步地,上述步骤6,具体包括:
步骤6-1,从本地操作系统的存储数据库中获取根证书t0,并使用根证书t0对需要验证的数字证书t1进行有效性验证;如果验证成功,则证明所述数字证书t1合法有效,即可实施rpm软件包安装作业,如果验证失败,则进入步骤6-2;
步骤6-2,遍历本地操作系统的存储数据库中除根证书t0和需要验证的数字证书t1之外的所有数字证书,并从中取出一个数字证书ti;
步骤6-3,使用该数字证书ti验证数字证书t1的有效性;
如果验证成功,则返回执行步骤6-1,并使用根证书t0对所述数字证书ti的有效性进行验证,如果验证成功,则证明所述数字证书t1合法有效,即可实施rpm软件包安装作业,如果验证失败,则返回执行步骤6-2,并遍历本地操作系统的存储数据库中除根证书t0、数字证书t1以及数字证书ti之外的所有数字证书,对数字证书ti进行有效性验证;
如果验证失败,返回执行步骤6-2,并从中取出下一个数字证书ti 1,并使用该数字证书ti 1验证数字证书t1的有效性。
进一步地,上述步骤6-1,具体还包括:
如果数字证书t1是由根ca中心签发的,则数字证书t1包括根ca中心采用自己私钥签名的信息;在验证数字证书t1有效性时,采用根ca中心的根证书t0公钥对数字证书t1中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书t1是由根ca中心合法签发的,即可实施rpm软件包安装作业。
进一步地,上述步骤6-3,具体还包括:
如果数字证书t1是一级子ca中心签发的,则数字证书t1包括一级子ca中心采用自己私钥签名的信息;如果数字证书ti是由根ca中心签发的,数字证书ti包括根ca中心采用自己私钥签名的信息;
在使用该数字证书ti验证数字证书t1的有效性时,采用一级子ca中心的一级子根证书t01公钥对数字证书t1中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书t1是由一级子ca中心合法签发的,如果验签失败,则说明数字证书t1不是由一级子ca中心合法签发的;
在使用根证书t0对所述数字证书ti的有效性进行验证时,采用根ca中心的根证书t0公钥对数字证书ti中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书ti是由根ca中心合法签发的,即可实施rpm软件包安装作业,如果验签失败,则说明数字证书ti不是由根ca中心合法签发的。
可以理解,对数字证书t1的有效性验证过程可能是多级验证,市级应用中,ca中心可以根据业务、职能需求分为:根ca中心、一级子ca中心、二级子ca中心、三级子ca中心…。根ca中心对应根证书t0,一级子ca中心对应一级子根证书t01,二级子ca中心对应二级子根证书t02,三级子ca中心对应三级子根证书t03…。上一级ca中心能够签发下一级ca中心的根证书,下一级的数字证书合法性验证过程则需要上一级ca中心的根证书,如果数字证书t1是三级子ca中心签发的“四级”数字证书,则具体验证流程为:(1)通过三级子ca中心的三级子根证书t03验证数字证书t1的有效性;(2)待验证成功后,通过二级子ca中心的二级子根证书t02验证三级子根证书t03的有效性;(3)待验证成功后,通过一级子ca中心的一级子根证书t01验证二级子根证书t02的有效性;(4)待验证成功后,通过根ca中心的根证书t0验证一级子根证书t01的有效性,待验证成功后,即可实施rpm软件包安装作业。综上,根ca中心为验证签名rpm软件包的数字证书的权威机构,无论多级验证的验证次数多少,只要最后能够通过根ca中心的根证书t0验证即可认为用于签名rpm软件包的数字证书是合法有效的。
本发明第二方面还提出一种基于操作系统软件包的签名认证系统,用于实现上述的一种基于操作系统软件包的签名认证方法,所述系统包括:
开发平台,用于使开发者生成rpm软件包;
发布平台,用于待rpm软件包生成后,由开发者生成对应的公私钥对,并基于公钥向ca中心请求签发数字证书;待签发数字证书完成后,采用私钥对rpm软件包进行签名,并将已签名的rpm软件包发布出去;
本地操作系统,用于由使用者从发布平台获取已签名的rpm软件包,并导入与该rpm软件包签名相关的所有数字证书;并遍历所有数字证书以实现该rpm软件包的验签工作;待某数字证书t1能够成功验签rpm软件包时,则进一步借助根证书t0验证该数字证书t1是否有效,如果验证有效,即可基于rpm软件包实施安装作业。
进一步地,所述已签名的rpm软件包包括文件头和文件数据,所述文件头包括哈希值和签名值,所述哈希值是使用sm3算法对rpm软件包进行计算获得的;所述签名值是使用sm2算法对上述计算得到的哈希值进行私钥签名获得的。
综上,本发明引入多级签名验签机制,用户在安全操作系统上安装rpm软件包时不仅需要验证签名的正确性,同时还要验证验签的数字证书是否由根证书“直接”或“间接”签发的,确保rpm软件包来源是可靠的。本发明使用国密算法sm2算法对软件包进行签名验签,大大增加了密码的自主可控性和安全性。本发明将签名私钥使用sm1算法加密存储在签名硬件密码钥匙中,进一步保证私钥的安全性。rpm软件包的开发者对软件包进行签名,签名前将签名私钥导入到签名硬件密码钥匙内部,同时将验签公钥的数字证书发布出去。签名时,需要将签名硬件密码钥匙插入到计算机设备上。安装rpm软件包前,用户需要首先获得验签相关的所有数字证书,导入到本地操作系统中,安装时不仅要验证签名值还要验证签名证书是否是根证书“直接”或“间接”签发的。有鉴于此,只有通过根证书“直接”或“间接”签发的私钥签名的rpm软件包才能正常安装,有效防止恶意rpm软件包的扩散,保证了系统的安全性。
以上所示仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
1.一种基于操作系统软件包的签名认证方法,其特征在于,包括:
步骤1,由开发者通过开发平台生成rpm软件包;
步骤2,待rpm软件包生成后,由开发者生成对应的公私钥对,并基于公钥向ca中心请求签发数字证书;
步骤3,待签发数字证书完成后,采用私钥对rpm软件包进行签名,并将已签名的rpm软件包发布出去;
步骤4,使用者从发布平台获取已签名的rpm软件包,并将与该rpm软件包签名相关的所有数字证书导入本地操作系统中;
步骤5,本地操作系统遍历所有数字证书以实现该rpm软件包的验签工作;
步骤6,待数字证书t1能够成功验签rpm软件包时,借助根证书t0验证该数字证书t1是否有效,如果验证有效,即可基于rpm软件包实施安装作业。
2.根据权利要求1所述的一种基于操作系统软件包的签名认证方法,其特征在于,所述步骤2还包括:
由开发者生成对应的公私钥对,将私钥导入到签名硬件密码钥匙中,且导入后的私钥不能从签名硬件密码钥匙读取出。
3.根据权利要求2所述的一种基于操作系统软件包的签名认证方法,其特征在于,所述签名硬件密码钥匙内部集成多种国密的加解密算法,将开发者生成的私钥使用sm1算法加密后存储在签名硬件密码钥匙中。
4.根据权利要求1所述的一种基于操作系统软件包的签名认证方法,其特征在于,所述步骤3包括:
步骤3-1,使用sm3算法对rpm软件包计算哈希值,并将哈希值写入文件头相应的字段中;
步骤3-2,使用sm2算法对上述步骤3-1计算得到的哈希值进行私钥签名,将签名值写入文件头相应的字段中。
5.根据权利要求4所述的一种基于操作系统软件包的签名认证方法,其特征在于,所述步骤5包括:
步骤5-1,读取rpm软件包文件头相应字段中的哈希值和签名值;
步骤5-2,遍历本地操作系统中的存储数据库,并取出一个数字证书;
步骤5-3,使用该数字证书对文件头的签名值进行验签,如果本次验签成功,则进入步骤6;如果本次验签失败,则返回步骤5-2继续取出下一个数字证书并执行验签,直到验签成功,则进入步骤6,如果遍历完所有的数字证书仍不能验签成功,则结束后续流程并提示rpm软件包安装失败。
6.根据权利要求1所述的一种基于操作系统软件包的签名认证方法,其特征在于,所述步骤6包括:
步骤6-1,从本地操作系统的存储数据库中获取根证书t0,并使用根证书t0对需要验证的数字证书t1进行有效性验证;如果验证成功,则证明所述数字证书t1合法有效,即可实施rpm软件包安装作业,如果验证失败,则进入步骤6-2;
步骤6-2,遍历本地操作系统的存储数据库中除根证书t0和需要验证的数字证书t1之外的所有数字证书,并从中取出一个数字证书ti;
步骤6-3,使用该数字证书ti验证数字证书t1的有效性;
如果验证成功,则返回执行步骤6-1,并使用根证书t0对所述数字证书ti的有效性进行验证,如果验证成功,则证明所述数字证书t1合法有效,即可实施rpm软件包安装作业,如果验证失败,则返回执行步骤6-2,并遍历本地操作系统的存储数据库中除根证书t0、数字证书t1以及数字证书ti之外的所有数字证书,对数字证书ti进行有效性验证;
如果验证失败,返回执行步骤6-2,并从中取出下一个数字证书ti 1,并使用该数字证书ti 1验证数字证书t1的有效性。
7.根据权利要求6所述的一种基于操作系统软件包的签名认证方法,其特征在于,所述步骤6-1还包括:
如果数字证书t1是由根ca中心签发的,则数字证书t1包括根ca中心采用自己私钥签名的信息;在验证数字证书t1有效性时,采用根ca中心的根证书t0公钥对数字证书t1中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书t1是由根ca中心合法签发的,即可实施rpm软件包安装作业。
8.根据权利要求6所述的一种基于操作系统软件包的签名认证方法,其特征在于,所述步骤6-3还包括:
如果数字证书t1是一级子ca中心签发的,则数字证书t1包括一级子ca中心采用自己私钥签名的信息;如果数字证书ti是由根ca中心签发的,数字证书ti包括根ca中心采用自己私钥签名的信息;
在使用该数字证书ti验证数字证书t1的有效性时,采用一级子ca中心的一级子根证书t01公钥对数字证书t1中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书t1是由一级子ca中心合法签发的,如果验签失败,则说明数字证书t1不是由一级子ca中心合法签发的;
在使用根证书t0对所述数字证书ti的有效性进行验证时,采用根ca中心的根证书t0公钥对数字证书ti中的私钥签名信息进行验签,如果验签成功,则说明所述数字证书ti是由根ca中心合法签发的,即可实施rpm软件包安装作业,如果验签失败,则说明数字证书ti不是由根ca中心合法签发的。
9.一种基于操作系统软件包的签名认证系统,用于实现上述权利要求1至8任意一项所述的基于操作系统软件包的签名认证方法,其特征在于,所述系统包括:
开发平台,用于使开发者生成rpm软件包;
发布平台,用于待rpm软件包生成后,由开发者生成对应的公私钥对,并基于公钥向ca中心请求签发数字证书;待签发数字证书完成后,采用私钥对rpm软件包进行签名,并将已签名的rpm软件包发布出去;
本地操作系统,用于由使用者从发布平台获取已签名的rpm软件包,并导入与该rpm软件包签名相关的所有数字证书;并遍历所有数字证书以实现该rpm软件包的验签工作;待数字证书t1能够成功验签rpm软件包时,借助根证书t0验证该数字证书t1是否有效,如果验证有效,即可基于rpm软件包实施安装作业。
10.根据权利要求9所述的一种基于操作系统软件包的签名认证系统,其特征在于,所述已签名的rpm软件包包括文件头和文件数据,所述文件头包括哈希值和签名值,所述哈希值是使用sm3算法对rpm软件包进行计算获得的;所述签名值是使用sm2算法对上述计算得到的哈希值进行私钥签名获得的。
技术总结