APP下载

基于数字证书的openstack身份认证协议

2019-03-13朱智强林韧昊胡翠云

通信学报 2019年2期
关键词:数字证书密钥密码

朱智强,林韧昊,胡翠云

(1. 解放军战略支援部队信息工程大学密码工程学院,河南 郑州 450001;2. 郑州信大先进技术研究院,河南 郑州 450001)

1 引言

随着互联网和计算机技术的不断发展,产生了一种新的计算模式——云计算,云计算技术通过整合分布式资源,构建出灵活、可扩展的虚拟计算环境[1]。随着云计算的不断发展,大量的云用户将自己的隐私数据保存在云端[2],若云用户的合法身份被冒充,就会造成隐私数据的泄露,身份认证技术是解决这一问题的可靠技术。目前,云计算已经广泛应用于政务、金融、邮政、军事等对安全性需求较高的领域,与其相关的云基础设施和云平台均应按照信息系统安全要求的最高等级进行建设。应用最为广泛的基于用户名/口令的认证方式存在诸多安全性问题,不能适用于这些应用场景。数字证书是一个经证书授权中心(CA, certificate authority)签名的用来标识通信双方身份信息的一串数字,主要包含了公钥及公钥拥有者的信息[3],具有唯一性和不可否认性。数字证书的主要作用是确保互联网上通信双方进行安全且相互信任的通信。

openstack是一个由美国国家航空航天局和Rackspace合作研制的开源项目,是一种旨在提供基础设施即服务(IaaS,infrastructure as a service)的虚拟化管理平台,能够提供可靠的云部署方案[4]。目前,许多国内外的云行业领军企业都参与到了 openstack的项目研发中,并将其作为云计算架构的基石,这标志着 openstack已经是事实上的开源云平台的行业标准。

2 openstack云平台认证机制分析

2.1 开源云平台openstack

openstack云平台由多种组件共同组成,各组件分工明确、相互独立,构成云平台的实质就是组合这些组件[5]。openstack采用无共享、基于消息的架构,既可以将每个组件分别部署在单独服务器上,也可以部署在同一台服务器上。各组件统一采用 Rest-full API(application programming interface)接口规范,具有模块松耦合、组件配置灵活、易于二次开发等优点。

openstack的安全问题一直是国内外各大企业、学者关注的焦点。官方成立了 openstack安全项目组并编写了《openstack安全指南》,致力于解决openstack中存在的安全问题,并通过安全漏洞管理团队及时对漏洞进行修复。他们于 2015年创建了Security项目,提供安全工具解决openstack中存在的安全问题,并在2018年2月28日发布的Queens版本中对Security项目进行更新,通过Anchor提供轻量级PKI(public key infrastructure)服务,自动验证和签发短期证书。通过该项目中Bandit等工具检测代码、API、各组件中存在的安全问题和漏洞。

2.2 基于keystone组件的认证机制

openstack相较于其他虚拟化管理软件,采用了灵活的低耦合分布式 SOA(service-oriented architecture)架构模式,所以需要一个类似服务总线的模块对 openstack中的各组件进行统一的授权认证及服务规则管理。

openstack在essex版本增加了keystone这一核心组件[6]并使其作为串联 openstack中各组件的认证授权中心,keystone组件通过其特有的插件化结构为openstack云平台用户提供身份管理(account)、访问控制(authentication)以及统一授权(authorization)服务。

keystone组件作为openstack云平台的身份认证核心[7],可以与其他后端授权系统进行集成,其身份认证机制的特点主要通过令牌(token)来实现,主要包括了 UUID token、PKI token以及 fernet token。云用户在与openstack其他组件交互之前,需要从 keystone获得令牌,然后将该令牌用于与openstack云平台中各组件交互时的身份验证,其认证工作具体流程如图1所示,其中项目(project)为keystone中的基本概念,表示各个服务中可以访问的资源集合。

图1 keystone组件工作流程

openstack云平台基于keystone组件的认证机制存在以下问题。

1)基于PKI token的认证方式可以在一定程度上保证云用户在访问其他应用组件时的安全,但是用户在登录云平台时目前仅支持基于用户名/口令认证方式。这种认证方式存在口令泄露、易遭受口令猜测攻击、字典攻击等安全隐患。

2)认证过程中,用户名/口令都是以明文形式发送,默认使用HTTP协议进行认证[8],攻击者可能通过协议分析器窃听用户的认证信息或对认证请求数据分组进行截取,进而发动重放攻击。

3)即使将keystone组件配置成支持HTTPS加密访问环境,攻击者仍能够利用 man-in-the-middle机制截取网络通信数据并进行数据篡改进而发动中间人攻击。

4)没有提供重复登录失败后限制登录的方法[9],这可能会遭受暴力攻击以及DoS(denial of service)攻击。

5)文献[10]通过定量安全评价对 openstack安全性进行分析,根据漏洞数据库(NVD,national vulnerability database)的经验数据得出keystone是最脆弱的组件,存在大量漏洞。攻击者可能通过这些漏洞对用户的隐私数据进行窃取。

6)keystone组件是部署 openstack云平台的唯一强制服务[11],这使得keystone成为攻击者的首要攻击目标。集成第三方身份验证和授权协议是一种更安全的部署方法。

综上所述,基于keystone组件的认证方式存在诸多安全问题,不能有效抵抗多种网络攻击,不能适用于政务、军事等对安全性需求较高的应用场景,因此需要一种高安全性的认证方式来保护openstack云用户的隐私数据安全。

2.3 密钥管理组件Barbican

为了在云中提供强大的数据保护,加密技术通常用于保护传输中的数据以及rest中的数据。密钥管理是所有使用加密的云组件面临的巨大挑战。

Barbican是为openstack云平台提供key的管理存储服务的组件[12],通过rest API来提供和管理机密信息并进行安全存储。Barbican组件通过加密密钥对用户机密信息进行加密,成为Barbican的秘密(secret):包括密码、公私钥、加密密钥,并存储到Barbican的后端数据库中。Barbican组件提供了外部密钥管理设备的接口,具有良好的扩展性,可以快速存储和检索传递给openstack组件的密钥[13],能够提供灵活、可靠的密钥周期管理服务。

Barbican组件的核心是数据的加解密以及秘密的存储,在组件内部生成一个密钥,存储在用于加密处理的硬件安全模块中(HSM, hardware security module),在秘密存储到数据库前对其进行加密。读取数据时,先从数据库读取密文,再通过密钥解密后获取明文,这可以有效防止数据库中的数据泄露。

3 基于数字证书的openstack身份认证系统

3.1 认证系统架构

针对openstack云平台基于keystone的认证机制在政务、军事等领域中安全性不足的问题,本文设计并实现了基于数字证书的 openstack身份认证系统来保护openstack云平台用户隐私数据的安全。针对不同云用户对云平台身份认证安全等级的不同需求,结合openstack基于keystone组件的认证特点并通过对keystone组件进行扩展,从而支持云计算环境下基于数字证书的认证方式。

认证系统主要包括云密码管理子系统和云身份认证子系统两部分。云密码管理子系统主要为云平台用户提供证书的管理、签发服务,由云平台证书分发服务器、证书密钥分发插件以及用户证书下载插件组成。云身份认证子系统是证书认证服务的提供者,由密码认证服务器、云认证客户端插件和认证令牌处理插件组成。认证系统组成如图2所示。

图2 认证系统组成

本系统将数字证书藏于UKey(USB Key)中,利用UKey提供的安全机制使其作为用户私钥与证书的安全载体[13]。在部署方面增加密码认证服务器和证书分发服务器,并对传统的证书认证及认证网关所采用的 socket通信接口进行改造,统一采用Rest-full API进行服务调用,提高标准化及快速扩展能力。使用Barbican组件作为密钥容器代替 keystone使用的文件方式密钥存储,统一将客户端与服务端的公私钥对作为secret经Barbican加密密钥加密后进行统一管理存储,使用密码认证服务器内置密码卡代替HSM存储Barbican加密密钥。考虑到系统性能要求,将密码认证服务器部署成认证服务器集群,统一为云平台中各组件提供证书或数字签名的验证服务。在数据库模块中增加新的用户证书信息表,用来存储keystone用户与证书之间的关系。认证系统总体架构如图3所示。

3.2 认证系统功能

认证系统主要完成云平台用户的证书管理、签发以及身份认证工作。

1)云平台用户的证书管理、签发

在keystone后端部署云平台证书分发服务器并与keystone组件结合,同时另一端与公钥密码基础设施连接,提供用户和设备证书管理服务。管理员根据需要构建用户证书管理请求连接到云平台证书签发服务器,获得证书密码管理服务权限,并通过证书密钥分发插件向用户直接颁发数字证书,从而实现云平台用户证书的在线签发、更新与撤销。

2)云平台用户身份认证

在keystone后端部署密码认证服务器,主要处理云用户基于UKey数字证书的身份认证和令牌签发工作,通过内置密码卡来提供密码技术支持,与keystone组件协同完成云平台证书用户的身份认证。通过认证令牌处理插件与keystone组件结合,使keystone能够接受新的认证令牌,解析协议数据,并发送至密码认证服务器进行验证,而后从本地身份管理模块中获取用户对应的证书信息,查看该用户的合法性,从而实现基于证书密码的全局身份认证。

4 基于数字证书的openstack认证协议

本文通过一种基于数字证书的 openstack认证协议保障云用户身份认证的安全。

表1给出协议描述相关的符号记法。协议涉及五方参与者:客户端 C、密码认证服务器 AS(authentication server)、管理员终端 MT(management terminal)、keystone服务器KS(key stone server)、证书分发服务器CS(certificate authorization server),参与者能够通过密钥管理组件Barbican获得对方公钥UK(public key)。协议分为云用户身份标识阶段与云用户身份鉴别阶段。

由于对称密钥加密具有实时性且加密效率高等优点,因此统一使用对称密钥SK(symmetric key)对数据进行加密传输,同时考虑到密钥安全性,利用非对称加密公钥UK将对称密钥封装到数字信封中发送至服务端,服务端利用私钥RK(private key)对其进行解密后提取SK。

图3 认证系统总体架构

表1 认证协议符号记法

4.1 云用户身份标识阶段

1)管理员通过管理员系统发出新建用户指令,调用 UKey设备产生一个经 MD5(message-digest algorithm 5)Hash算法加密后的随机数,通过云密码管理子系统向CS提交证书签发请求及随机数,CS端通过对校验随机数有效性,返回 verify request。在握手过程中使用文献[14]所提出的 cookie的交换和验证来抵御DoS攻击。

2)通过本地 UKey设备产生临时公私钥对UKUKey和RKUKey,并将用户信息提交至keystone端。

3)keystone在完成正常用户创建过程后,向云密码管理子系统提交证书申请。云密码管理子系统收到请求后,向CS提交证书签发请求。

4)申请成功后,CS对用户信息、公钥进行签名,获得数字证书 CerUKey与被加密私钥RKE,返回至KS。

5)KS向服务后台 dashboard返回证书和加密私钥,并将证书与私钥写入用户UKey。

6)云用户身份标识流程如图4所示。

图4 云用户身份标识流程

4.2 云用户身份鉴别阶段

1)客户端与认证服务端通过 Rest-full API进行握手并发送HTTP请求进行连接。传入PIN(personal identification number)码激活认证客户端插件。调用本地 UKey提取数字证书Cer,携带Cer和一份签名消息向密码认证服务器 AS发送登录请求,验证成功后返回认证服务器令牌,其中签名消息中包含一个时间戳T0和随机产生的random nonce。采用成熟的对称加密算法(AES, advanced encryption standard)对传输信息进行加密/解密。

2)将客户端与 keystone服务端扩展为双向认证,C发送认证服务请求,KS收到请求之后将自己的证书及相关信息发送至 C。客户端验证keystone服务端证书的有效性,验证成功后携带ID、Dm、Tauth通过 dashboard提交至KS身份鉴别模块。

3)KS通过身份鉴别模块将认证令牌提交至认证服务器进行认证,成功后获取用户及证书信息。同时将安全域名、用户名、转化为本地userID提交至本地身份管理模块。

4)将获取的证书信息同身份认证子系统返回的用户证书信息进行比较映射;成功后通过KS向客户端返回keystone令牌。

5)当用户访问其他组件或应用服务时,携带keystone token和一份签名消息SC向keystone发送认证请求,认证成功后处理请求并返回认证结果。

云用户身份鉴别流程如图5所示。

图5 云用户身份鉴别流程

5 原型系统及安全性分析

5.1 原型系统

针对不同云用户的需求,在保留原有认证方式的基础上,为高安全需求的用户提供基于数字证书的认证方式。

系统主要功能是为管理员用户及普通用户提供身份的标识和鉴别服务。系统工作流程如图6所示。在系统安装时至少需要设置一名管理员用户并绑定一个UKey。管理员使用UKey及PIN码通过图7所示云用户登录界面发送认证请求,通过密码认证服务器及keystone组件按照本文所设计的系统认证流程进行认证,成功后返回认证结果并跳转至图8所示openstack管理员系统界面。通过管理员系统中的添加用户按钮跳转至图9所示云用户创建界面,根据不同用户对安全等级的需求来填写用户信息和证书序列号,对于安全等级需求较高的用户需向证书分发服务器提交证书签发请求,通过证书分发及下载插件将数字证书写入UKey设备并颁发给普通云用户。云用户使用UKey及PIN码通过登录界面发送认证登录请求,成功后即可使用openstack云平台中的各项服务。

图6 系统工作流程

图7 云用户登录界面

认证系统主要分为云用户的标识和鉴别这两部分。在云用户身份标识部分,通过与云平台证书密钥分发插件进行集成,通过Rest-full API与云平台证书分发服务器进行握手并建立连接,从而支持证书的签发下载。对数据库表结构进行修改,增加PKI证书属性。在openstack_auth组件代码中对view.py文件中的 login函数进行修改,将不同的 URL请求将转至UKey认证的form页面。界面部分在openstack原有的用户标识页面的基础上增加了是否使用 PKI证书的选项以及对应的证书序列号输入框。

图8 openstack管理员系统界面

图9 云用户创建界面

在云用户身份鉴别部分,通过与云认证客户端插件进行集成,负责读取云用户UKey设备中的证书。对keystone组件进行扩展,增加新的PKI认证方式及该认证方式所需要解析的数据格式和属性。在 openstack_auth/plugin目录下新建usbkeytoken.py文件,定义一个新的认证插件,支持UKey token的认证方式,在identities/v3/目录下实现封装这种认证方式所需要传递的参数和协议,并支持对这种协议的引用。界面部分将云用户口令输入框替换为UKey设备口令输入框,为云用户提供基于数字证书的身份鉴别服务。

在系统应用方面,本文基于 openstack云平台搭建了密码云(cryptographic cloud)系统。密码云系统是对分布式密码资源进行整合,并通过虚拟化技术生成密码资源池,构建出具有较高动态扩展性和灵活性的虚拟计算平台,按需向用户提供密码服务,解决了传统密码技术受限于固定的载体和密码资源不可扩展等问题。密码云系统对身份认证技术有着极高的安全性需求,若攻击者成功获得系统的授权,可能会对密码信息资源进行窃取和篡改。目前本文系统已全面应用于基于密码云服务系统的应用场景,管理员使用UKey设备通过本文所设计的认证协议登录基于 openstack的密码云系统来对密码虚机进行统一管理,提高了云用户在登录云平台系统时的安全性。

政务云(government cloud)系统指通过云计算技术为政府部分行业提供基础设施、应用系统及信息安全等综合服务的云计算平台。但是涉及政府机密数据信息的泄露是具有破坏性的。在2017年国家电子政务外网管理中心电子政务云集成与应用国家工程实验室联合发布的《政务云安全要求》(GW0013-2017)中明确指出,安全接入平台是政务用户通过互联网或移动专线网络访问政务云的部门业务和公共区业务的唯一接入通道,接入平台应具备数字认证、授权管理等功能。本文通过数字证书来实现系统的身份认证和访问控制,符合政务云对安全性方面的要求,可以很好地适用于政务云系统。

5.2 安全性分析

在协议安全性方面,文献[10]在openstack原有认证协议的基础上提出了一种基于安全度量的方法对 openstack认证系统进行定量化安全评估,对keystone组件中存在的漏洞进行分析与修补。文献[16]提出了一种基于改进OpenID框架的openstack认证协议。文献[16]提出了一种基于keystone的安全认证协议,通过加密技术来提高云平台身份认证的安全性。本文从加密技术、密钥管理、协议效率以及 openstack现阶段易遭受的主要网络攻击抗性等角度将本文协议与openstack原有的基于keystone令牌的认证协议及文献[10]、文献[15-16]协议进行比较。对比分析结果如表2所示。

表2 协议对比分析结果

在加密技术方面,本文与文献[16]协议采用对称加密和非对称加密相结合的加密技术,相较于其他认证协议,具有更高的数据机密性。基于 PKI token的认证方式虽然可以通过非对称加密技术拓展为 HTTPS加密认证环境,但是在后续令牌的交互过程数据仍以明文传输,不能保证整个认证过程的数据安全。文献[15]协议通过MD5算法对云用户在登录时填写的认证码进行加密,但是无法保证数据传输过程中的安全。在认证因素方面,本文所设计的认证协议是双因素认证协议,相较于其他单因素认证协议,攻击者必须获得全部认证因素才能冒充合法用户。在密钥管理方面,本文方案相较于其他对比方案采用了Barbican组件提供的密钥管理和存储服务,通过密码认证服务器的内置密码卡充当硬件安全模块来存储Barbican密钥,能够有效防止后端数据库发生密钥泄露。另外,本文方案通过密码认证服务器与keystone组件协同完成认证服务,攻击者难以仅通过对keystone组件的漏洞进行攻击来窃取用户数据。

本文主要针对 openstack云平台现阶段易遭受的主要网络攻击进行分析。在抵抗重放攻击方面,本文方案通过客户端向服务端发送服务请求时携带的签名消息中包含一个时间戳T0和一个随机数NR,并通过Hash算法签名保证其完整性。当攻击者重放认证请求时,认证服务器端通过验证随机数以及对比时间戳判断并有效抵抗重放攻击。文献[16]方案通过添加时间戳在一定程度上也能够抵抗重放攻击,而其他认证协议中没有抵抗重放攻击的有效手段。在抵抗中间人攻击方面,本文协议与文献[16]在认证协议中采用了双向认证机制,客户端需验证服务端证书保证其身份的合法性,在一定程度上可以抵御中间人攻击。本文方案相较于其他对比方案提供了重复登录失败后限制登录的方法。若攻击者取得 UKey,但是 PIN码错误次数超过规定限制,UKey将自动死锁。这种机制可以很好地抵抗UKey丢失攻击、暴力攻击、字典攻击及用户身份鉴别阶段的 DoS攻击,而cookie的交换和验证机制能够抵抗用户标识阶段可能遭受的DoS攻击。

对比结果显示,本文所提出的认证协议虽然在工作效率方面有所牺牲,且在一定程度上会增加认证组件的负载,但具有更高的安全性,更加完善的密钥管理方式,并且能够有效抵抗 openstack云平台现阶段易遭受的网络攻击。在政务、军事等应用场景中,高安全性往往是第一考虑要素,所以本文方案对于安全等级需求较高的应用场景具有重要意义。

6 结束语

本文重点对 openstack云平台中基于 keystone的身份认证机制进行了研究,分析了基于keystone组件的认证方式在安全性上的不足,提出了一种基于数字证书的身份认证协议并实现了相应的身份认证系统。根据云用户对安全等级的不同需求,提供一种具有更高安全性的身份认证方式。分析表明,基于数字证书认证方式能够更有效地防范多种可能遭受的攻击行为,从而更好地保证云平台用户隐私数据的安全。下一步工作是对系统性能进行评估并通过适当的负载均衡策略使认证服务器集群负载分布更加均衡,从而降低认证服务器负载量,提高整个系统的工作效率。

猜你喜欢

数字证书密钥密码
密码里的爱
幻中邂逅之金色密钥
幻中邂逅之金色密钥
密码系统中密钥的状态与保护*
密码抗倭立奇功
TPM 2.0密钥迁移协议研究
密码藏在何处
基于数字证书的军事信息系统安全防护方案
夺命密码
数字签名保护Word文档