一种OpenStack开源云用户的安全认证方法与流程

文档序号:15566981发布日期:2018-09-29 03:34阅读:250来源:国知局

本发明属于身份认证技术领域,涉及一种开源云用户的安全认证方法,具体涉及一种基于公钥的openstack开源云用户的安全认证方法。



背景技术:

openstack是目前最火的开源云平台,由nasa(美国国家航空航天局)和rackspace合作研发并发起的,以apache许可证授权的自由软件和开放源代码项目。openstack是一个iaas(infrastructureasaservice)软件,在云计算中主要负责虚拟机硬件资源的调度与分配。openstack由一系列独立模块构成,例如模块有keystone(认证服务)、nova(计算服务)、cinder(块存储服务)、glance(镜像服务)和neutron(网络服务)等。其中keystone提供认证服务,负责对接入用户的身份进行验证并对用户授权。

云计算中iaas层主要为用户提供虚拟机服务,当用户需要使用云资源时,需要向keystone发送认证请求,即俗称的登录系统,服务器会根据用户注册时授予用户的权限给用户颁发一个令牌,然后用户就可以使用这个令牌去请求对应的资源,对应的资源服务器可以通过令牌鉴别用户的身份和权限,从而提供相应的服务。

传统的openstack安全认证只提供认证流程,对于信息的保护,只建议在传输过程中使用tls安全传输协议,除此之外未使用任何安全加密算法,一旦用户信息泄露或者令牌被非法获取,非法分子就能轻松获得用户的资源。针对这种情况,现有的改进方法是请求认证时使用特殊辅助硬件,该硬件用于保存用户的私钥以及数字证书,对用户的身份认证需要借助里面的证书和秘钥,如公布号为cn106936760a名称为“一种登录openstack云系统虚拟机的装置和方法”中,用户登录系统需要使用usbkey(一种usb接口的硬件设备,内置智能芯片或者单片机,具有一定的存储空间,可以存储用户的私钥以及数字证书),通过usbkey中保存的证书和秘钥来保证用户身份的合法性。该方法存在的不足之处在于,依赖硬件设备,增加了服务成本,而且用户还需要额外保护此硬件设备,避免丢失或者被盗,同时每次请求都需要使用此设备,导致用户使用不便。



技术实现要素:

本发明的目的在于克服上述现有技术存在的缺陷,提出了一种openstack开源云用户的安全认证方法,用于解决现有技术中存在的认证需要额外硬件设备导致认证成本高的技术问题。

本发明的技术思路是:通过对通信消息进行签名,以防止通信消息被非法分子篡改,同时资源服务器利用令牌中保存的用户公钥对一个随机数进行加密,如果资源请求者能解密此随机数,则能证明资源请求者身份的合法性,从而在不借助额外硬件设备的情况下完成用户身份认证。

根据上述技术思路,实现本发明目的采取的技术方案包含步骤如下:

(1)认证服务器计算自己的公钥pks和私钥sks:

(1a)认证服务器根据素数m确定有限域gf(2m),并在gf(2m)上选择椭圆曲线e(a,b),其中a、b表示椭圆曲线的系数;

(1b)认证服务器选择椭圆曲线e(a,b)上的任意一点作为e(a,b)的基点p,并根据p的坐标计算p的素阶n;

(1c)认证服务器根据p和n,计算自己的公钥pks和私钥sks,并将e(a,b)、p、n和pks对外公开;

(1)用户计算自己的公钥pku和私钥sku:

用户根据p和n,计算自己的公钥pku和私钥sku;

(3)用户向认证服务器发送认证请求信息:

用户将自己的用户名、密码、公钥pku发送给认证服务器;

(4)认证服务器对用户的用户名和密码进行验证:

认证服务器在服务器数据库中查询是否存在与接收到的用户名和密码相同的用户,若是,执行步骤(5),否则认证失败;

(5)认证服务器为用户颁发签名令牌tokensign:

(5a)认证服务器在服务器数据库中通过用户名查询用户注册时分配给用户的标识符uid和用户权限ur,并通过uid、ur和pku构造令牌token={uid,ur,pku};

(5b)认证服务器采用基点p、素阶n和认证服务器私钥sks,对token进行签名,得到签名令牌tokensign,并将tokensign发送给用户;

(6)用户向资源服务器发送签名资源请求reqres:

(6a)用户确定自己所需要的资源res,并采用认证服务器私钥sks、基点p和素阶n,通过认证服务器对res进行签名,得到签名资源请求ressign;

(6b)用户选取随机数numu,并采用ressign、numu和tokensign构造资源请求reqres={numu,ressign,tokensign},再将reqres发送给资源服务器,同时将numu存入资源服务器数据库,并将numu状态标记为未接收;

(7)资源服务器对ressign和tokensign合法性进行验证:

资源服务器采用认证服务器的公钥pks、基点p和素阶n,验证tokensign和ressign的合法性,若tokensign和ressign两个均合法,执行步骤(8),否则认证失败;

(8)资源服务器对用户的身份进行验证:

(8a)资源服务器选取随机数nums和ks,并采用nums、ks和numu构造资源响应respon={nums,ks,numu},同时将nums存入资源服务器数据库,并将nums状态标记为未接收;

(8b)资源服务器采用认证服务器的私钥sks、基点p和素阶n,通过认证服务器对respon进行签名,得到签名资源请求responsign;

(8c)资源服务器采用用户的公钥pku、椭圆曲线e(a,b)、基点p和素阶n对responsign进行加密,并将密文(c1,c2)发送给用户;

(9)用户对资源服务器发送的密文(c1,c2)进行解密:

用户采用自己的私钥sku、椭圆曲线e(a,b)、基点p和素阶n对资源服务器发送的密文(c1,c2)进行解密,得到签名资源请求responsign;

(10)用户对responsign的合法性进行验证:

用户采用认证服务器的公钥pks、基点p和素阶n,对responsign的合法性进行验证,若合法,则从responsign中提取nums、numu和ks,并执行步骤(11),否则认证失败;

(11)用户对numu的合法性进行验证:

用户在本地数据库中查询numu是否为用户发送给资源服务器且状态为未接收的随机数,若是,则将nums发回资源服务器,同时在资源服务器数据库中将numu状态标记为已接收,否则认证失败;

(12)资源服务器确认用户身份:

资源服务器在资源服务器数据库中查询nums是否为资源服务器发送给用户且状态为未接收的随机数,若是,则用户为tokensign的合法所有者,同时在用户本地数据库中将nums的状态标记为已接收,否则认证失败。

本发明与现有技术相比,具有如下优点:

第一,在本发明中,利用公钥签名和加密算法来完成对用户的身份认证,不需要额外硬件设备的支持,降低了成本,而且,认证过程对所有认证消息进行签名,保证了消息不会被非法篡改或者伪造,同时,使用令牌进行资源请求时,资源服务器会利用令牌中的公钥加密一个随机数,并要求用户解密此随机数,从而保证了令牌不会被冒用或者重放,同样能保证系统的安全。

第二,在本发明中,因为使用公钥技术,所以资源服务器收到请求之后,可以自行对请求作验证,不需要再次向认证服务器请求认证,提高了认证效率。

附图说明

图1是本发明适用的安全认证系统的结构示意图;

图2是本发明的的实现流程图。

具体实施方式

下面结合附图和具体实施例,对本发明作进一步详细描述:

参照图1,本发明适用的安全认证系统,包括认证服务器、用户和资源服务器,其中用户用于对认证服务器提出认证请求和对资源服务器提出资源请求,认证服务器用于对用户身份进行验证并给用户颁发令牌,资源服务器用于对用户令牌进行验证并提供资源。

参照图2,

一种openstack开源云用户的安全认证方法,包括如下步骤:

步骤1)认证服务器计算自己的公钥pks和私钥sks:

步骤1a)认证服务器根据素数m确定有限域gf(2m),并在gf(2m)上选择椭圆曲线e(a,b),其中a、b表示椭圆曲线的系数;

例如素数m可以取m=191,则有限域为gf(2191),并在gf(2191)上选择椭圆曲线e(a,b),其中椭圆曲线的系数a、b可以取

a=(000000000000000000000000000000000000000000000000)h

b=(6db729dc5e6294173dbdf669b9fca0fecd2165b05d63834c)h;

步骤1b)认证服务器选择椭圆曲线e(a,b)上的任意一点作为e(a,b)的基点p,并根据p的坐标计算p的素阶n;

例如可以选择基坐标为(x,y)点p作为基点,其中x、y取

x=(358df1ea9ebc2e422fbec069dde73d2c25597cccd2a3e244)h

y=(5ddd4506014ca3e606076e2bd7521643f6b2c805be0544c2)h

并计算出n=(4000000000000000000000009cf2d6e3901dac4c32eec65d)h;

步骤1c)认证服务器根据p和n,计算自己的公钥pks和私钥sks,并将e(a,b)、p、n和pks发送给用户以及资源服务器:

步骤1c1)认证服务器在1到-1之间随机选取一个整数作为自己私钥sks;

步骤1c2)认证服务器计算sks·p,并将sks·p作为自己的公钥pks;

步骤1c3)认证服务器对外公开e(a,b)、p、n和pks;

步骤2)用户计算自己的公钥pku和私钥sku:

步骤2a)用户在1到n-1之间随机选取一个整数作为自己私钥sku;

步骤2b)用户计算sku·p,并将sku·p作为自己的公钥pku;

步骤3)用户向认证服务器发送认证请求信息:

用户将自己的用户名、密码、公钥pku发送给认证服务器;

步骤4)认证服务器对用户的用户名和密码进行验证:

认证服务器在服务器数据库中查询是否存在与接收到的用户名和密码相同的用户,若是,执行步骤(5),否则认证失败;

用户在注册时,认证服务器会将用户名、密码和用户权限等相关信息存储在认证服务器数据库中;

步骤5)认证服务器为用户颁发签名令牌tokensign:

步骤5a)认证服务器在服务器数据库中通过用户名查询用户注册时分配给用户的标识符uid和用户权限ur,并通过uid、ur和pku构造令牌token={uid,ur,pku};

其中标识符用来唯一确定一个用户,用户权限限定了用户能请求的资源,令牌以字典的形式生成;

步骤5b)认证服务器采用基点p、素阶n和认证服务器私钥sks,对token进行签名,得到签名令牌tokensign,并将tokensign发送给用户:

步骤5b1)认证服务器在1到n-1之间随机选取一个整数k1,并计算k1·p;

步骤5b2)认证服务器令k1·p的横坐标为x1,纵坐标为y1,并计算r1=h(token)+x1modn,其中h为hash函数;

hash采用ms3算法;

步骤5b3)认证服务器判断r1+sks=0modn是否成立,若是,执行步骤(5b1),否则执行步骤5b4);

步骤5b4)认证服务器计算s1=(r1+sks)-1(k1-sks·r1)modn,并判断s1=0是否成立,若是,执行步骤5b1),否则将token、r1和s1作为token的签名令牌tokensign:tokensign=(token,r1,s1);

步骤6)用户向资源服务器发送签名资源请求reqres:

步骤6a)用户确定自己所需要的资源res,并采用认证服务器私钥sks、基点p和素阶n,通过认证服务器对res进行签名,得到签名资源请求ressign:

步骤6a1)认证服务器在1到n-1之间随机选取一个整数k2,并计算k2·p;

步骤6a2)认证服务器令k2·p的横坐标为x2,纵坐标为y2,并计算r2=h(res)+x2modn,其中h为hash函数;

hash采用ms3算法;

步骤6a3)认证服务器判断r2+sks=0modn是否成立,若是,执行步骤6a1),否则执行步骤6a4);

步骤6a4)认证服务器计算s2=(r2+sks)-1(k2-sks·r2)modn,并判断s2=0是否成立,若是,执行步骤6a1),否则将res、r2和s2作为res的签名资源请求ressign:ressign=(res,r2,s2);

步骤6b)用户选取随机数numu,并采用ressign、numu和tokensign构造资源请求reqres={numu,ressign,tokensign},再将reqres发送给资源服务器,同时将numu存入资源服务器数据库,并将numu状态标记为未接收;

numu可以使用当前时间戳作为随机数种子生成;

步骤7)资源服务器对ressign和tokensign合法性进行验证:

步骤7a)资源服务器分别验证r1、s1、r2和s2是否是1到n-1之间的整数,若是,执行步骤7b),否则认证失败;

步骤7b)资源服务器计算e1=h(token)、e2=h(res)、x1=r1·s1·p+(r1+s1)·pks和x2=r2·s2·p+(r2+s2)·pks;

步骤7c)资源服务器令x1的横坐标为x1,纵坐标为y1,令x2的横坐标为x2,纵坐标为y2,并判断e1=r1-x1(modn)和e2=r2-x2(modn)是否成立,若均成立,则执行步骤8),认证失败;

步骤8)资源服务器对用户的身份进行验证:

步骤8a)资源服务器选取随机数nums和ks,并采用nums、ks和numu构造资源响应respon={nums,ks,numu},同时将nums存入资源服务器数据库,并将nums状态标记为未接收;

其中nums可以使用当前时间戳作为随机数种子生成,ks为64位的二进制随机数,用于后续通信对称秘钥;

步骤8b)资源服务器采用认证服务器的私钥sks、基点p和素阶n,通过认证服务器对respon进行签名,得到签名资源请求responsign:

步骤8b1)认证服务器在1到n-1之间随机选取一个整数k3,并计算k3·p;;

步骤8b2)认证服务器令k3·p的横坐标为x3,纵坐标为y3,并计算r3=h(respon)+x3modn,其中h为hash函数;

其中hash采用ms3算法;

步骤8b3)认证服务器判断r3+sks=0modn是否成立,若是,执行步骤8b1),否则执行步骤8b4);

步骤8b4)认证服务器计算s3=(r3+sks)-1(k3-sks·r3)modn,并判断s3=0是否成立,若是,执行步骤8b1),否则将respon、r3和s3作为respon的签名资源响应responsign:responsign=(respon,r3,s3);

步骤8c)资源服务器采用用户的公钥pku、椭圆曲线e(a,b)、基点p和素阶n对responsign进行加密,并将密文(c1,c2)发送给用户:

步骤8c1)资源服务器将responsign表示为椭圆曲线e(a,b)上的点m;

首先将消息编码为二进制串,然后就可以将此二进制串映射到椭圆曲线上;

步骤8c2)资源服务器选择1到n-1之间的随机数k,并计算c1=k·p和c2=m+k·pku,得到密文(c1,c2);

步骤9)用户对资源服务器发送的密文(c1,c2)进行解密:

用户采用自己的私钥sku、椭圆曲线e(a,b)、基点p和素阶n对资源服务器发送的密文(c1,c2)进行解密,得到签名资源请求responsign,其中解密公式为:

responsign=c2-sku·c1

其中sku为用户的私钥;

步骤10)用户对responsign的合法性进行验证:

步骤10a)用户验证responsign中的r3和s3是否是1到n-1之间的整数,若是则执行步骤10b),否则认证失败;

步骤10b)用户计算e3=h(respon)和x3=r3·s3·p+(r3+s3)·pks;

步骤10c)用户令x3的横坐标为x3,x3的纵坐标为y3;

步骤10d)用户判断e3=r3-x3(modn)是否成立,若成立则执行步骤10e),否则认证失败;

步骤10e)用户从responsign中提取nums、numu和ks;

步骤11)用户对numu的合法性进行验证:

用户在本地数据库中查询numu是否为用户发送给资源服务器且状态为未接收的随机数,若是,则将nums发回资源服务器,同时在用户本地数据库中将numu状态标记为已接收,否则认证失败;

步骤12)资源服务器确认用户身份:

资源服务器在资源服务器数据库中查询nums是否为资源服务器发送给用户且状态为未接收的随机数,若是,则用户为tokensign的合法所有者,同时在用户本地数据库中将nums的状态标记为已接收,否则认证失败。

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