一种Keystone中Fernet密钥的生成方法及相关装置与流程

文档序号:17088455发布日期:2019-03-13 23:09阅读:525来源:国知局
一种Keystone中Fernet密钥的生成方法及相关装置与流程

本申请涉及云服务领域,特别涉及一种keystone中fernet密钥的生成方法、生成系统、一种计算机可读存储介质和一种服务器。



背景技术:

openstack是一个旨在为公共及私有云的建设与管理提供软件的开源项目,由几个主要的组件组合起来完成具体工作。openstack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。openstack通过各种互补的服务提供了基础设施即服务(iaas)的解决方案,每个服务提供api以进行集成。keystone是openstack中的身份管理组件,为其他组件提供授权、认证等服务。keystone可利用fernet令牌作为身份验证后的标识,即验证通过后其他组件可利用keystone颁发的fernet令牌来访问其他组件或服务。

目前,keystone中的fernet密钥是利用系统提供的伪随机源来生成的,linux系统中使用的是/dev/unrandom设备作为随机源生成fernet密钥。而/dev/unrandom设备的随机性较差,容易遭受攻击。



技术实现要素:

本申请的目的是提供一种keystone中fernet密钥的生成方法、生成系统、一种计算机可读存储介质和一种服务器,解决现有技术中利用伪随机源生成fernet密钥带来的随机性差的问题。

为解决上述技术问题,本申请提供一种keystone中fernet密钥的生成方法,具体技术方案如下:

接收到keystone的密钥请求后,向可信芯片发送所述密钥请求对应的密钥生成指令;

在所述可信芯片根据所述密钥生成指令生成随机值后,接收所述随机值;

将所述随机值作为所述fernet密钥返回至所述keystone。

其中,接收所述随机值之后,还包括:

将所述随机值存放至密钥仓库。

其中,将所述随机值存放至密钥仓库之前,还包括:

利用base64编码对所述fernet密钥进行字符格式转换。

其中,当所述随机值包括一级随机值和二级随机值时,将所述随机值作为所述fernet密钥返回至所述keystone包括:

利用所述一级随机值对所述二级随机值加密,并将加密后的所述二级随机值作为所述fernet密钥返回至所述keystone。

其中,所述可信芯片为tpm2.0芯片。

本申请还提供一种keystone中fernet密钥的生成系统,包括:

请求发送模块,用于接收到keystone的密钥请求后,向可信芯片发送所述密钥请求对应的密钥生成指令;

随机值接收模块,用于在所述可信芯片根据所述密钥生成指令生成随机值后,接收所述随机值;

密钥返回模块,用于将所述随机值作为所述fernet密钥返回至所述keystone。

其中,还包括:

密钥存放模块,用于将所述随机值存放至密钥仓库。

其中,当所述随机值包括一级随机值和二级随机值时,所述密钥返回模块为用于利用所述一级随机值用于对所述二级随机值加密,并将加密后的所述二级随机值作为所述fernet密钥返回至所述keystone的模块。

本申请还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述的生成方法的步骤。

本申请还提供一种服务器,包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时实现如上所述的生成方法的步骤。

本申请所提供的一种keystone中fernet密钥的生成方法,包括:接收到keystone的密钥请求后,向可信芯片发送所述密钥请求对应的密钥生成指令;在所述可信芯片根据所述密钥生成指令生成随机值后,接收所述随机值;将所述随机值作为所述fernet密钥返回至所述keystone。

本申请利用针对当前keystone利用系统随机设备产生随机值的质量及效率方面的不足,利用虚拟可信根作为keystone中fernet密钥随机源的方法,具体的,利用可信芯片作为fernet密钥的随机源,解决了现有的系统随机源即/dev/unrandom设备在生成随机值的随机性与效率方面的不足,提高了随机值的随机性,有利于提高fernet密钥的安全性和工作性能。本申请还提供了一种keystone中fernet密钥的生成系统、一种计算机可读存储介质和一种服务器,具有上述有益效果,此处不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的一种keystone中fernet密钥的生成方法的流程图;

图2为本申请实施例所提供的一种keystone中fernet密钥的生成系统的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

请参考图1,图1为本申请实施例所提供的一种keystone中fernet密钥的生成方法的流程图,该生成方法包括:

s101:接收到keystone的密钥请求后,向可信芯片发送所述密钥请求对应的密钥生成指令;

本步骤旨在需要生成fernet密钥时,接收keystone的密钥请求,并向可信芯片发送所述密钥请求对应的密钥生成指令。需要说明的是,本实施例中各步骤的主语均为可信根模块,其作用是作为keystone与可信芯片之间的信息交互中介,因此可信根模块实际上为区别于系统中处理器的另一个处理器,只不过仅用于控制处理keystone和可信芯片之间的信息交互以及相关的功能实现。以下以“可信根模块”为例作为各步骤的实施主体对各进行说明。

fernet密钥作为身份验证标识使用,通常在其他组件访问其余组件或服务时会利用keystone授予的fernet密钥作为身份验证必不可少的标识。也即是说,当其他组件需要进行组件或服务的访问时,将会向keystone请求获取fernet密钥。然而为了保证系统中各服务及组件之间的交流是安全的,fernet密钥不能为固定形式的密码,因此本步骤需要向可信根模块发送密钥请求。需要说明的是,通常在keystone中负责fernet密钥相关指令的模块为fernetutil,则其他需要fernet密钥的组件可之间向fernetutil发送密钥请求,以请求获取fernet密钥。

在此对于密钥生成指令的形式和具体内容不作限定,可以理解的是,密钥生成指令用于请求keystone授予fernet密钥,里面可以包括请求方的组件名称等信息。同样的,对于fernet密钥的具体形式和位数以及采用的编码方式均不做限定,例如可以为128位的ascii码等等。

可信芯片在需要生成随机数时生成该随机数。而作为与可信芯片进行信息交互的可信根模块,通常还可以包括用于与keystone等组件相连接的相关驱动等。在此对于可信芯片不作限定,优选的,可以为tpm2.0芯片等。可以理解的是,可信根模块中包括的相关驱动应与可信芯片相匹配,例如当采用tpm2.0芯片时,则应使用tpm2.0驱动。tpm(trustedplatformmodule)安全芯片是指符合tpm(trustedplatformmodule,可信平台模块)标准的安全芯片,它能有效地保护pc、防止非法用户访问。

s102:在所述可信芯片根据所述密钥生成指令生成随机值后,接收所述随机值;

具体的,可信根模块包括可信芯片时,生成随机值前,通常需要向可信芯片发送符合可信芯片指令标准的生成密钥的相关指令,例如tpm2_cc_getrandom等指令,此后可信芯片生成随机值。

本步骤旨在接收可信芯片生成的随机值,为s103将随机值返回至keystone做准备。

s103:将所述随机值作为所述fernet密钥返回至所述keystone。

本步骤旨在将可信根模块生成的随机值作为fernet密钥。在此对于可信根模块如何生成随机值不作具体限定,优选的,在此提供一种优选的生成方法:

在所述可信根模块先生成一级随机值,再生成二级随机值后,利用所述一级随机值用于对所述二级随机值加密,并将加密后的所述二级随机值作为所述fernet密钥。

上述随机值的生成过程中旨在表明可信根模块可以生成两个随机值,而其中一个随机值用于对另一个随机值进行加密,加密后的另一个随机值作为fernet密钥。而容易理解的是,两个随机值中具体是用一级随机值对二级随机值加密抑或是用二级随机值对一级随机值加密均可行。

当然,基于上述随机值的生成过程,还可以采用一个随机值以及其他加密方式相结合的方式对随机值进行加密,或者采用类似的多级随机值的方法,以提高随机值的安全性。

容易理解的是,可信根模块中的可信芯片生成随机值后还需要将随机值返回keystone,则该随机值作为fernet密钥返回至密钥请求方。

若随机值被采用上文所述的包含加密过程的生成方法,则将随机值作为fernet密钥时,需要将完整的fernet密钥发送至密钥请求方,接收到fernet密钥后密钥请求方还需要对fernet密钥进行解密。

基于上述实施例,作为优选实施例,上述实施例步骤s102中接收随机值之后,还可以包括:

将所述随机值存放至密钥仓库。

密钥仓库的作用是存放fernet密钥,通常指的是存放fernet密钥的目录,并分配一定的存储空间。本实施例中,fernet密钥与随机值的含义相同,可相互替代。需要说明的是,即使随机值包括上述实施例中所述的一级随机值、二级随机值甚至多级随机值等,均可以存于密钥仓库中。

为了避免其他组件向keystone请求fernet密钥时还必须实时生成随机值,造成系统中各组件之间的信息交互效率下降,可以利用密钥仓库提前存储预设数量的fernet密钥。当然在此对于预设数量不作具体限定,可以根据系统中需要请求fernet密钥的组件数量作相应设定。

相应的,当需要密钥仓库时,应当在生成随机值之前生成密钥仓库。密钥仓库可以理解为一个可配置的“文件夹”,用于存在fernet密钥。在此对于密钥仓库在系统中的存放位置不作限定。通常,可以由上文所述的fernetutil模块创建密钥仓库。

当存在密钥仓库时,keystone运行时可以直接到密钥仓库所在目录下读取所需的fernet密钥,无需实时向可信根模块请求生成fernet密钥,提高了系统中各组件之间的信息交互效率。

值得一提的是,“将所述随机值存放至密钥仓库”还可以由keystone完成,即本步骤可以在s103之后执行,ketstone在接收到fernet密钥之后,若无其他组件向其请求fernet密钥,可以先将其存放至密钥仓库。

本实施例利用虚拟可信根作为keystone中fernet密钥随机源的方法,具体的,利用可信芯片作为fernet密钥的随机源,解决了现有的系统随机源即/dev/unrandom设备在生成随机值的随机性与效率方面的不足,提高了随机值的随机性,有利于提高fernet密钥的安全性和工作性能。

基于上述实施例,作为优选实施例,将所述随机值存放至密钥仓库之前,还包括:

利用base64编码对所述fernet密钥进行字符格式转换。

需要说明的是,由可信根模块生成的fernet密钥可能包含不可打印的值。不可打印的值指的是密钥请求方无法解析的值。需要说明的是,解析不同于解密过程。简单来说,为了避免fernet密钥中出现无法识别的字符,本步骤利用统一的编码对fernet密钥进行字符格式转换,具体的转换内容在此不作限定,包括但不限于统一fernet密钥的位数等方式。

基于前述实施例,若存在多级随机值,本步骤可以在每个随机值生成之后对该随机值进行字符格式转换。由于各随机值均是由可信芯片生成,因此不同的随机值通常采用相同的编码格式,也可以仅对最后加密后的随机值进行字符格式转换。

若存在密钥仓库,在将fernet密钥存入密钥仓库之前应执行本步骤,即入库前应利用base64编码将fernet密钥进行字符格式转换,使得keystone可以将密钥仓库中的fernet密钥直接返回密钥请求方。

当然,在本实施例的基础上,还可以应用其他编码方法,在此不一一举例限定。

下面对本申请实施例提供的一种keystone中fernet密钥的生成系统进行介绍,下文描述的生成系统与上文描述的一种keystone中fernet密钥的生成方法可相互对应参照。

参见图2,图2为本申请实施例所提供的一种keystone中fernet密钥的生成系统的结构示意图,本申请还提供一种keystone中fernet密钥的生成系统,该生成系统包括:

请求发送模块100,用于接收到keystone的密钥请求后,向可信芯片发送所述密钥请求对应的密钥生成指令;

随机值接收模块200,用于在所述可信芯片根据所述密钥生成指令生成随机值后,接收所述随机值;

密钥返回模块300,用于将所述随机值作为所述fernet密钥返回至所述keystone。

基于上述实施例,作为优选的实施例,该生成系统还可以包括:

密钥存放模块,用于将所述随机值存放至密钥仓库。

基于上述实施例,作为优选的实施例,该生成系统还可以包括,当所述随机值包括一级随机值和二级随机值时,所述密钥返回模块300具体为用于利用所述一级随机值用于对所述二级随机值加密,并将加密后的所述二级随机值作为所述fernet密钥返回至所述keystone的模块。

基于上述实施例,作为优选的实施例,该生成系统还可以包括:

编码模块,用于利用base64编码对所述fernet密钥进行字符格式转换。

本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的一种keystone中fernet密钥的生成方法的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本申请还提供了一种服务器,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的一种keystone中fernet密钥的生成方法的步骤。当然所述服务器还可以包括各种网络接口,电源等组件。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例提供的系统而言,由于其与实施例提供的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1