国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

OpenStack Keystone認(rèn)證機(jī)制研究

2021-03-08 00:24:52尹譽(yù)衡
關(guān)鍵詞:令牌用戶名公鑰

尹譽(yù)衡

(華北計(jì)算技術(shù)研究所,北京 100089)

0 引 言

隨著互聯(lián)網(wǎng)和計(jì)算機(jī)技術(shù)的高速發(fā)展,為了滿足人們對(duì)數(shù)據(jù)處理速度和數(shù)據(jù)存儲(chǔ)容量越來(lái)越高的要求,云計(jì)算平臺(tái)應(yīng)運(yùn)而生。云計(jì)算平臺(tái)通過整合分布式資源,構(gòu)建靈活、可擴(kuò)展的虛擬計(jì)算環(huán)境[1],根據(jù)用戶的需求提供理想的服務(wù)與資源。目前金融、政務(wù)、郵政等重要領(lǐng)域已經(jīng)廣泛應(yīng)用云計(jì)算平臺(tái),大量云計(jì)算平臺(tái)的用戶選擇將數(shù)據(jù)甚至是隱私數(shù)據(jù)保存在云端[2],因此用戶迫切希望有一個(gè)安全可靠的云計(jì)算平臺(tái)。

非對(duì)稱加密算法是一種將數(shù)據(jù)進(jìn)行加密處理的算法。數(shù)據(jù)收發(fā)雙方都有一套相互匹配的公鑰(public key)和私鑰(private key)[3]。數(shù)據(jù)發(fā)送方和數(shù)據(jù)接收方在正式傳送數(shù)據(jù)前會(huì)交換公鑰,傳送數(shù)據(jù)前發(fā)送方先用接收方的公鑰對(duì)數(shù)據(jù)進(jìn)行加密處理,接收方接收到數(shù)據(jù)后,用自己的私鑰對(duì)數(shù)據(jù)進(jìn)行解密,從而獲取原本的數(shù)據(jù)。

OpenStack是一個(gè)開源的、便于使用的、可擴(kuò)展的云計(jì)算平臺(tái),由多個(gè)功能各不相同的組件構(gòu)成,各組件之間分工協(xié)作,共同構(gòu)成云計(jì)算平臺(tái)[4]。目前為止發(fā)布了從A到T共20個(gè)版本,從Essex版本之后開始全面支持使用Keystone完成身份管理、訪問控制和統(tǒng)一授權(quán)的功能[5]。

1 OpenStack Keystone介紹

OpenStack由一系列開源項(xiàng)目組成,是一種提供基礎(chǔ)設(shè)施即服務(wù)(infrastructure as a service,IaaS)的虛擬化管理平臺(tái),能夠提供可靠的云部署方案[6]。OpenStack主要使用池化虛擬資源來(lái)構(gòu)建和管理私有云和公有云,通過多種功能不同的組件提供計(jì)算、網(wǎng)絡(luò)、存儲(chǔ)、認(rèn)證和鏡像等服務(wù),其中提供認(rèn)證服務(wù)的就是Keystone組件。各組件之間采用Restfull API接口規(guī)范,實(shí)現(xiàn)了模塊之間的低耦合,各個(gè)組件可以靈活配置,易于二次開發(fā)[7]。

1.1 Keystone基本介紹

用戶在申請(qǐng)OpenStack的資源和服務(wù)時(shí)都由Keystone對(duì)用戶進(jìn)行身份驗(yàn)證并對(duì)用戶授權(quán),同時(shí)還會(huì)向用戶提供一個(gè)該用戶可以使用的服務(wù)的列表,用以明確用戶使用資源的權(quán)限范圍[8]。在OpenStack中,無(wú)論是管理員還是用戶,要想使用各項(xiàng)服務(wù),都必須先通過Keystone的認(rèn)證。并且,OpenStack的認(rèn)證工作都交由Keystone完成,因此,提高Keystone的安全性是十分必要的。

下文會(huì)介紹Keystone中涉及的一些基本概念。

(1)用戶(User):使用OpenStack服務(wù)的個(gè)人或是系統(tǒng),需要向Keystone發(fā)送憑證以通過Keystone的驗(yàn)證。Keystone會(huì)向通過驗(yàn)證的用戶分配一個(gè)該用戶特有的令牌(Token),該令牌就是在OpenStack中請(qǐng)求其他服務(wù)時(shí)的憑證。

(2)令牌(Token):Keystone驗(yàn)證用戶憑證后,向用戶分發(fā)特定的、在OpenStack各組件之間使用的通行證,用戶可以以此令牌訪問被授權(quán)的其他的OpenStack服務(wù)。令牌具有有效時(shí)間,可以隨時(shí)被云平臺(tái)管理員取消。Keystone的作用就是對(duì)外提供一個(gè)可以訪問資源的令牌。

(3)項(xiàng)目租戶(TenantProject):表示一組資源,資源范圍由Keystone授權(quán)給用戶的資源列表界定。

(4)憑證(Credential):用于證明用戶身份或權(quán)限,也就是用戶的用戶名和密碼,用戶將其發(fā)送給Keystone,以換取令牌。一個(gè)用戶可以有多個(gè)憑證,一個(gè)憑證與一個(gè)項(xiàng)目關(guān)聯(lián)。

Keystone通過這些基本概念,對(duì)外提供認(rèn)證、令牌、目錄和安全策略四個(gè)方面的核心服務(wù)。Keystone組件工作流程如圖1所示。

圖1 Keystone工作流程

(1)用戶發(fā)送自己的憑證(即用戶名和密碼)到Keystone,Keystone通過認(rèn)證后,返回一個(gè)臨時(shí)令牌和通用服務(wù)目錄。

(2)用戶通過臨時(shí)令牌向Keystone查詢當(dāng)前環(huán)境下的項(xiàng)目列表。Keystone通過驗(yàn)證后返回給用戶一個(gè)項(xiàng)目列表。

(3)用戶選擇一個(gè)項(xiàng)目后,發(fā)送憑證給Keystone申請(qǐng)正式令牌。

(4)用戶憑借正式令牌發(fā)送API請(qǐng)求到相應(yīng)的服務(wù)端點(diǎn),服務(wù)端點(diǎn)將令牌交由Keystone驗(yàn)證后響應(yīng)請(qǐng)求,向用戶返回請(qǐng)求狀態(tài)。

以上是Keystone完整的工作流程,該文就認(rèn)證過程的安全性進(jìn)行研究,并給出加強(qiáng)安全性的方法。

1.2 Keystone認(rèn)證機(jī)制

OpenStack身份認(rèn)證分為兩個(gè)部分,首先云平臺(tái)用戶需要先從Keystone申請(qǐng)到令牌,以令牌作為與各組件的API接口進(jìn)行交互的憑證,使用該令牌完成單點(diǎn)登錄和委派驗(yàn)證[9],從而獲取其他組件提供的服務(wù)。Keystone組件作為OpenStack云平臺(tái)的身份認(rèn)證核心[10],可以與其他后端授權(quán)系統(tǒng)進(jìn)行集成,其身份認(rèn)證機(jī)制通過token來(lái)實(shí)現(xiàn),主要包括了UUID token(universally unique identifier token)和PKI(public key infrastructure token)兩種認(rèn)證機(jī)制。

當(dāng)用戶需要進(jìn)行操作時(shí),用戶提供有效的用戶名和口令給Keystone,Keystone經(jīng)過認(rèn)證后返回給用戶一個(gè)令牌[11]。之后用戶對(duì)其他組件進(jìn)行其他操作時(shí),先出示這個(gè)令牌給相應(yīng)的API,組件收到請(qǐng)求后,用這個(gè)令牌去向Keystone進(jìn)行請(qǐng)求驗(yàn)證。Keystone通過比對(duì)令牌,以及檢查令牌的有效期,判斷令牌的有效性,最后返回結(jié)果給相應(yīng)的組件。

OpenStack在G版本之前只有UUID令牌認(rèn)證機(jī)制這一種方式。G版本及之后版本使用PKI令牌機(jī)制[12],Keystone會(huì)利用PKI對(duì)令牌相關(guān)的數(shù)據(jù)進(jìn)行簽名,對(duì)UUID機(jī)制進(jìn)行了改進(jìn),減少了交互開銷。

1.2.1 UUID令牌認(rèn)證機(jī)制

UUID令牌認(rèn)證機(jī)制基于用戶提供的用戶名和口令完成認(rèn)證[13]。Keystone生成的令牌保存在后端數(shù)據(jù)庫(kù)中,每個(gè)令牌都有一個(gè)獨(dú)一無(wú)二的ID。用戶向Keystone提交驗(yàn)證申請(qǐng),Keystone經(jīng)過驗(yàn)證后將令牌ID傳給用戶。用戶在申請(qǐng)?jiān)破脚_(tái)資源時(shí),會(huì)在API請(qǐng)求中附加上自己的令牌ID,Keystone通過比對(duì)API請(qǐng)求和后端數(shù)據(jù)庫(kù)中的令牌ID來(lái)驗(yàn)證用戶身份,之后再響應(yīng)用戶的API請(qǐng)求。這種方式的設(shè)計(jì)決定了用戶每次發(fā)起API請(qǐng)求之前都要向Keystone發(fā)起驗(yàn)證請(qǐng)求,造成極大的開銷,對(duì)網(wǎng)絡(luò)和Keystone資源都是一種極大的消耗。Keystone生成令牌和用戶使用令牌發(fā)起API請(qǐng)求的過程如圖2所示。

圖2 UUID認(rèn)證過程

1.2.2 PKI令牌認(rèn)證機(jī)制

PKI令牌認(rèn)證機(jī)制中Keystone被設(shè)計(jì)為一個(gè)數(shù)字簽名認(rèn)證中心。Keystone使用簽名密鑰和數(shù)字證書對(duì)用戶的令牌簽名,每一個(gè)API端點(diǎn)都會(huì)保存一份簽名公鑰證書、CA公鑰證書和證書吊銷列表的Keystone拷貝,用以驗(yàn)證用戶的請(qǐng)求[13]。在這種機(jī)制下,當(dāng)用戶發(fā)起API請(qǐng)求時(shí),每個(gè)API端點(diǎn)都可以使用這份拷貝離線響應(yīng)請(qǐng)求,節(jié)省了為每個(gè)驗(yàn)證直接請(qǐng)求Keystone的開銷,解決了UUID機(jī)制中客戶端與Keystone頻繁交互造成的性能瓶頸,緩解了對(duì)網(wǎng)絡(luò)帶寬和Keystone資源的壓力。PKI令牌認(rèn)證機(jī)制的流程如圖3所示。

圖3 PKI認(rèn)證過程

2 Keystone認(rèn)證機(jī)制安全性分析

通過對(duì)Keystone認(rèn)證機(jī)制的分析,可以發(fā)現(xiàn)Keystone在認(rèn)證過程中存在一些缺陷,這些缺陷可能會(huì)使Keystone和其他組件遭受安全問題。本節(jié)針對(duì)Keystone認(rèn)證機(jī)制的安全性進(jìn)行分析,指出其中存在的問題。

(1)Keystone是OpenStack身份認(rèn)證中心,使用用戶名和口令來(lái)驗(yàn)證用戶,但在驗(yàn)證過程中,用戶名和口令都是以明文形式傳輸?shù)?。Keystone默認(rèn)使用HTTP協(xié)議進(jìn)行通信,HTTP不會(huì)加密通信內(nèi)容,攻擊者可以針對(duì)HTTP協(xié)議發(fā)起諸如中間人攻擊等的攻擊行為,導(dǎo)致泄露用戶的用戶名和口令等信息。

(2)Keystone會(huì)向經(jīng)過認(rèn)證的用戶發(fā)送一個(gè)令牌,用戶憑此令牌進(jìn)行后續(xù)的資源訪問和使用,其他的組件不會(huì)再對(duì)用戶的身份加以驗(yàn)證。這種做法意味著攻擊者一旦通過某些途徑拿到某個(gè)用戶的令牌,就相當(dāng)于擁有了此用戶在云平臺(tái)的所有權(quán)利,攻擊者可以不再經(jīng)過Keystone的身份驗(yàn)證而直接以該用戶的身份使用云平臺(tái)的資源,甚至對(duì)云平臺(tái)本身發(fā)動(dòng)攻擊。

(3)用戶在請(qǐng)求其他組件的服務(wù)時(shí),發(fā)送的API請(qǐng)求包括了令牌和請(qǐng)求信息。由于API請(qǐng)求在傳輸過程中是以明文傳輸?shù)?,所以攻擊者一旦截獲了用戶的任意一條API請(qǐng)求,都可以通過該請(qǐng)求中的信息對(duì)API接口發(fā)動(dòng)重放攻擊。

(4)Keystone作為OpenStack平臺(tái)唯一一個(gè)強(qiáng)制服務(wù),同時(shí)還具備管理認(rèn)證的功能,這使得它成為攻擊者的首選攻擊目標(biāo)。在Keystone的基礎(chǔ)上結(jié)合其他安全手段無(wú)疑是提高其安全性的一個(gè)重要方式。

綜上所述,Keystone組件的認(rèn)證機(jī)制中仍然存在很多安全問題[14],尤其是通信過程中的明文傳輸,這是一個(gè)很大的隱患,使得OpenStack無(wú)法應(yīng)用于對(duì)數(shù)據(jù)保密有極高要求的場(chǎng)景,因此需要將Keystone結(jié)合其他安全手段來(lái)保障Keystone數(shù)據(jù)傳輸?shù)碾[蔽性,而非對(duì)稱加密作為一種經(jīng)過驗(yàn)證的可靠方式,無(wú)疑是最佳的選擇。

3 Keystone改進(jìn)方案及分析

3.1 Keystone改進(jìn)方案

針對(duì)Keystone現(xiàn)有的安全問題,該文介紹一種基于非對(duì)稱加密的認(rèn)證機(jī)制改進(jìn)方案,該方法可以有效地解決上文中指出的問題。

非對(duì)稱加密算法使用公鑰和私鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密。公鑰作為對(duì)信息進(jìn)行加密的密鑰,對(duì)數(shù)據(jù)發(fā)送方公布,同時(shí)數(shù)據(jù)接收方應(yīng)妥善保管私鑰,任何人都無(wú)法通過公鑰推測(cè)出私鑰。被數(shù)據(jù)接收方的公鑰加密過的數(shù)據(jù)只能通過接收方的私鑰解密,其他人無(wú)法解密獲取其中的信息,由此可見,使用非對(duì)稱加密算法可以有效地防止信息泄露,將其與Keystone認(rèn)證機(jī)制相結(jié)合,可以大大提高Keystone認(rèn)證機(jī)制的安全性。

表1給出了改進(jìn)方案相關(guān)的符號(hào)記法。

表1 改進(jìn)方案符號(hào)記法

在設(shè)計(jì)改進(jìn)方案時(shí),考慮到需要交換公鑰,并且讓用戶驗(yàn)證Keystone的身份,所以在認(rèn)證過程的前三個(gè)階段仍然使用明文傳輸。在交換了公鑰并驗(yàn)證了Keystone的身份之后再使用非對(duì)稱加密算法對(duì)傳輸?shù)拿舾行畔⑦M(jìn)行加密處理,完成認(rèn)證工作,增強(qiáng)認(rèn)證機(jī)制的安全性。

圖4給出改進(jìn)方案的工作流程。

圖4 改進(jìn)方案工作流程

(1)用戶向Keystone發(fā)送hello消息:用戶發(fā)送包含了用戶公鑰K_PUBC的hello消息給Keystone。

(2)Keystone向用戶發(fā)送hello消息:Keystone收到用戶發(fā)送的hello消息后,將用戶公鑰和用戶隨機(jī)數(shù)保存在本地,然后將用戶的hello消息再發(fā)還給用戶,作為收到hello消息的確認(rèn)。

(3)Keystone發(fā)送證書:Keystone將自己的CA證書和公鑰K_PUBK發(fā)給用戶。

(4)用戶發(fā)送身份信息:用戶驗(yàn)證證書通過后,將自己的用戶名和密碼用Keystone的公鑰K_PUBK加密,發(fā)送給Keystone。

(5)發(fā)放令牌:Keystone用私鑰K_PRIK解密消息,獲取用戶名和密碼并驗(yàn)證后,發(fā)送用戶公鑰K_PUBC加密過的令牌給用戶。

(6)發(fā)送API請(qǐng)求和令牌:用戶基于隨機(jī)數(shù)生成會(huì)話密鑰,將API請(qǐng)求、令牌和時(shí)間戳T用Keystone的公鑰K_PUBK加密,并發(fā)送給Keystone。

(7)API請(qǐng)求處理:Keystone用私鑰K_PRIK解密后,驗(yàn)證令牌和T,驗(yàn)證通過后,將API請(qǐng)求的結(jié)果和時(shí)間戳T用K_PUBC加密后發(fā)送給用戶。

3.2 實(shí)驗(yàn)分析

實(shí)驗(yàn)環(huán)境:物理機(jī)win 7,使用VMware Workstations安裝兩臺(tái)CentOS 7.7虛擬機(jī),分別作為Controller節(jié)點(diǎn)和Compute節(jié)點(diǎn),并在Controller節(jié)點(diǎn)和Compute節(jié)點(diǎn)上安裝OpenStack Stein。

在物理機(jī)上使用wireshark抓包,追蹤http流,未加密流量中可以直接獲取用戶名和密碼,而在對(duì)數(shù)據(jù)流進(jìn)行加密之后,無(wú)法解密數(shù)據(jù)流,只能獲取到亂碼,從而有效地保障了通信過程的機(jī)密性。

3.3 Keystone改進(jìn)方案分析

上文所述的改進(jìn)方案通過在Keystone認(rèn)證過程中增加非對(duì)稱加密機(jī)制,對(duì)認(rèn)證過程中所涉及的用戶名、密碼和令牌等重要信息進(jìn)行加密傳輸,對(duì)這些重要信息的傳輸進(jìn)行了保護(hù)。該方案實(shí)現(xiàn)了一個(gè)安全有效的改進(jìn)方案,解決了第2節(jié)提出的安全問題。以下從三個(gè)方向?qū)υ摳倪M(jìn)方案進(jìn)行了詳細(xì)具體的安全分析。

3.3.1 防消息泄漏

從改進(jìn)方案的工作流程可以看出,只有在前三個(gè)階段沒有用公鑰加密,而前三個(gè)階段包含的有效信息只有用戶公鑰、Keystone公鑰和Keystone的CA證書,沒有用戶名和密碼,在后續(xù)向Keystone發(fā)送認(rèn)證請(qǐng)求的過程中無(wú)法通過Keystone的驗(yàn)證,從而就無(wú)法獲取令牌和時(shí)間戳,因此即使攻擊者截獲了前三個(gè)階段交互的信息,也不會(huì)泄露用戶名和密碼、令牌、API請(qǐng)求等信息。

通過對(duì)認(rèn)證過程中的敏感信息使用安全性較高的非對(duì)稱加密算法進(jìn)行加密,有效地防止了敏感信息的泄露,攻擊者即使截獲了信息也無(wú)法破解出有效信息。

3.3.2 防重放攻擊

重放攻擊是指攻擊者向目標(biāo)主機(jī)發(fā)送一個(gè)合法的包,但是這個(gè)包是該主機(jī)事先已經(jīng)接收過的包,利用他人的合法身份來(lái)欺騙目標(biāo)主機(jī)[15]。這種攻擊方式主要用于身份認(rèn)證過程,從而造成目標(biāo)主機(jī)對(duì)攻擊者錯(cuò)誤的身份認(rèn)證。

發(fā)動(dòng)重放攻擊的可以是普通的合法用戶,也可以是將合法用戶的請(qǐng)求攔截了的攻擊者。攻擊者可以通過竊聽合法用戶的網(wǎng)絡(luò)流量或其他途徑獲取到認(rèn)證過程中的憑證,然后再將這個(gè)憑證發(fā)給認(rèn)證服務(wù)器,從而獲取經(jīng)過認(rèn)證的合法身份。

若將重放攻擊運(yùn)用在欺騙Keystone,攻擊者就可以在沒有破解出傳輸數(shù)據(jù)的真實(shí)含義時(shí),也能夠用加密過的認(rèn)證信息欺騙Keystone,從而獲取到令牌。

在改進(jìn)方案中,在用戶發(fā)送API請(qǐng)求時(shí),同時(shí)會(huì)發(fā)送一個(gè)時(shí)間戳。由于攻擊者無(wú)法破解傳輸?shù)募用埽詿o(wú)法定點(diǎn)修改時(shí)間戳,因此信息中的時(shí)間戳必定是合法用戶發(fā)送的。所以當(dāng)Keystone收到兩個(gè)相同的消息時(shí),Keystone可以通過對(duì)比信息中包含的時(shí)間戳和接收到信息的時(shí)間來(lái)確定哪一個(gè)API請(qǐng)求是由合法用戶發(fā)出的,從而防止有效的重放攻擊。

3.3.3 雙向認(rèn)證

在Keystone過程中,不僅是Keystone需要確定用戶的身份,用戶同樣也需要確定Keystone的身份,防止攻擊者通過偽裝成Keystone來(lái)欺騙用戶。

在該文的改進(jìn)方案中,用戶會(huì)在通信過程前期收到Keystone的CA證書,從而確認(rèn)Keystone的身份,為下一步的認(rèn)證過程提供保障。CA證書由第三方可信機(jī)構(gòu)簽署頒發(fā),具有極高的可信度,用戶通過CA證書驗(yàn)證身份后可確定對(duì)方身份。同時(shí)因?yàn)樵撟C書是公開證書,所以可以在認(rèn)證過程的明文傳輸階段就對(duì)Keystone進(jìn)行驗(yàn)證。

而Keystone驗(yàn)證用戶的身份則是通過用戶名和密碼,在信息不被泄露的前提下,使用用戶特有的用戶名和密碼來(lái)驗(yàn)證用戶身份不失為一個(gè)傳統(tǒng)但有效的方法。

在認(rèn)證機(jī)制中加入這樣的雙向認(rèn)證可以保障用戶和Keystone雙方都不被欺騙,極大地增強(qiáng)了認(rèn)證機(jī)制的安全性。

4 結(jié)束語(yǔ)

通過分析Keystone的工作流程以及UUID token和PKI token兩種認(rèn)證機(jī)制,指出其中存在的缺陷和可能受到的攻擊,再針對(duì)這些缺陷,給出一種改進(jìn)方案,將非對(duì)稱加密機(jī)制與Keystone的認(rèn)證機(jī)制結(jié)合,并加入雙向認(rèn)證和時(shí)間戳證明,保證通信過程的數(shù)據(jù)安全。然后對(duì)這種改進(jìn)方案進(jìn)行安全分析,可以看出該方案對(duì)信息泄露和重放攻擊有很好的防御,同時(shí)增加的雙向認(rèn)證也加強(qiáng)了通信雙方的互信度,不失為一個(gè)一舉多得的方案。下一步工作是對(duì)該方案的性能進(jìn)行評(píng)估,并通過適當(dāng)?shù)牟呗越档驼J(rèn)證服務(wù)器負(fù)載量,提高整個(gè)系統(tǒng)的工作效率。

猜你喜歡
令牌用戶名公鑰
《護(hù)士進(jìn)修雜志》投稿程序
稱金塊
基于路由和QoS令牌桶的集中式限速網(wǎng)關(guān)
一種基于混沌的公鑰加密方案
動(dòng)態(tài)令牌分配的TCSN多級(jí)令牌桶流量監(jiān)管算法
機(jī)智的快遞員
HES:一種更小公鑰的同態(tài)加密算法
SM2橢圓曲線公鑰密碼算法綜述
基于格的公鑰加密與證書基加密
令牌在智能小區(qū)訪客系統(tǒng)的應(yīng)用
科技傳播(2011年10期)2011-06-14 02:29:04
樟树市| 大丰市| 晋宁县| 苍溪县| 秦安县| 龙口市| 海南省| 溧阳市| 湖州市| 湘潭市| 延川县| 凌海市| 库车县| 金坛市| 英吉沙县| 诏安县| 安乡县| 乳山市| 台山市| 金坛市| 九寨沟县| 酉阳| 定州市| 漾濞| 栾城县| 甘孜| 竹溪县| 渑池县| 佳木斯市| 涞源县| 定日县| 玉山县| 香河县| 嵩明县| 依安县| 南江县| 和静县| 阿克| 微博| 英吉沙县| 南木林县|