借鑑P2P的思想實現了一個基於集羣的安全存儲系統,並介紹了構建在該存儲體系結構之上的一種數據安全存取方案。引入基於共享鑑別密鑰的鑑別機制,以確保用户數據的授權訪問,防止未授權用户的閲讀和修改。系統採用廣泛用於加/解密技術中的SHA-1算法作為密碼校驗函數,與採用數字簽名鑑別機制相比,該算法具有較高的性能。初步分析和實驗表明,該系統在現實條件下,在消耗較低的維護帶寬的同時維持了較高的可靠性,並提供了較好的讀寫性能。
近幾年來,基於P2P技術的分佈式存儲系統[1,2]已經成為一個研究熱點。廣域網中的分佈式文件存儲系統能夠更好地為用户提供文件存儲服務,使用户可以隨時隨地訪問存放在網上的數據,並且能夠為文件共享、多用户之間的協作提供支持。基於P2P構建的分佈式文件存儲系統,一般都是面向廣域網提供大規模網絡存儲服務,利用其分佈在廣域網上的大量服務器為用户提供安全的、可靠的和高效的存儲訪問服務。P2P強調的是對等服務,不區分服務器和客户端,每個節點在索取其他節點服務的同時,也與其他節點相配合提供相同的服務,每個參與節點的位置均相等。借鑑P2P技術的思想,採用高速網絡將普通PC機相連成一個可擴展集羣存儲系統方案[3~B6]相對於價格昂貴的大型磁盤陣列,具有極高的性能價格比。
基於以上現狀,本文提出了一個基於集羣的安全存儲系統設計[3]。在以前的研究工作中[7]解決了集羣存儲系統的數據容錯問題。本文致力於解決集羣存儲系統的信息安全性問題,保證存儲系統中的數據只被合法用户讀寫。
1系統架構
集羣存儲系統將局域網內單個PC上的存儲資源整合成具有統一邏輯視圖的高性能存儲系統。如圖1所示,系統中的存儲節點是一台PC機,每個節點運行Linux操作系統,通過局域網將各個節點連接起來,構成一個存儲實體,對外提供存儲服務。圖中LAN1的主要功能是實現節點之間的數據備份和恢復,以及節點的全局管理等;LAN2則起到用户之間進行數據交換的作用。LAN通過高速以太網連接,採用通用的TCP/IP協議通信形成一個集羣存儲系統。
在圖1的體系結構中,本地主機上裝有存儲虛擬化的客户端存儲代理軟件SA(storage agent)。用户的請求由駐留在客户端的這些SA截獲,並將請求發送給適當的存儲節點。應用程序訪問數據對象的步驟如下:a)將用户可理解的數據對象的名字通過一個目錄服務器解析為數據對象的惟一標誌DOID(data object identification);b)將DOID作為偽隨機函數的種子提交給本地客户端存儲代理SA,返回數據對象的位置;c)用户直接與選中的存儲節點連接,完成數據的讀寫請求。
2安全存取機制
系統數據安全性的增強主要取決於存儲在各個節點的數據對象的安全性,只有授權的合法用户有權存取數據。假設用户從密鑰對象中得到了對稱加密密鑰(RC5密鑰),安全數據對象包含了足夠的信息來保護其所包含數據的保密性和完整性。這就意味着即使惡意用户能夠得到存儲節點中的所有數據,或是嗅探到所有在網絡上載輸的數據,仍能夠維持數據的保密性和完整性。
2.1主要數據結構
系統中主要有三個基本的數據結構,即安全數據對象包括加密的用户數據和元數據;密鑰對象與一個或一組文件相關,保存各個用户用於解密文件數據的密鑰;認證對象存儲在每個存儲節點上,用於決定一個特定的用户能否從一個數據對象中寫或刪除數據。
1)安全數據對象每個數據對象由兩部分組成,即用户數據和元數據,如圖2所示。用户數據是加密存儲的。元數據包括文件id、用户id、文件相對應密鑰文件id。HMAC(hashed message authentication code)字段用於證明數據的完整性和鑑別用户的合法性;IV(初始向量)用於防止相同數據在相同密鑰加密時密文相同;timestamp字段用於防止hacker用一個已經存儲過的文件來覆蓋新的文件。
2)密鑰對象每個密鑰對象如圖3所示,包括兩種類型的信息。密鑰對象的頭部:key file id是系統中惟一的文件標誌;用户標誌域(uid)是指出最後一個修改密鑰對象的用户。當用户修改了密鑰對象後,對整個密鑰對象用自己的私鑰簽名,將結果存放在signature中,這種機制能夠防止非授權用户非法修改密鑰文件。密鑰對象主體信息是一組三元組,包括uid、encrypted key和權限位。Uid不僅可以是一個用户,還可以是幾個用户或是一個用户組;encrypted key是一個對稱密鑰用於加解密文件,由用户的公鑰加密;權限位類似於UNIX系統的權限位。一個密鑰對象可以不僅僅對應一個文件,也可以是一組文件,這樣這組文件都用同樣的密鑰加/解密。
3)認證對象每個存儲節點包含一個認證對象,如圖4所示。存儲節點利用認證對象來鑑別用户,作出是否授權該用户的寫操作的判斷。KeyMAC是一個共享密鑰,以密文形式存儲,用於HMAC生成及用户與存儲節點之間的驗證。當存儲節點啟動時,將認證對象調入內存,keyMAC被解密緩存在內存中。KeyPUB是用户的公鑰,存儲用户的公鑰主要是為方便查找用户的公鑰,而不用去求助於一個集中的密鑰服務器。時戳字段在一個文件塊被寫入時更新,用於防止重演攻擊。
uidkeyPUBkeyMACtimestamp
uidkeyPUBkeyMACtimestamp
…
gidkeyPUBkeyMACtimestamp
2.2鑑別機制
系統的主要目標是提供鑑別和加密的存儲服務。加密和解密由客户端來完成,儘管不容易減少加/解密的時間開銷,但是採用對稱加密算法時間相對要快一些。目前的主要鑑別方法在安全性和速度上均有差別,最常用的是採用數字簽名機制。但是數字簽名是一個相對比較慢的操作,對用户和存儲節點的CPU有較高的要求。本文提出一種基於密鑰的哈希散列方法來保證整個系統的數據完整性。與數字簽名方案相比,該方法具有相對較快的鑑別速度。
如圖5所示,在讀或寫操作時,存儲節點需要完成用户身份的鑑別。在本系統中,每個存儲節點存有一個認證對象,其中存有各個用户的用户標誌、公鑰以及由存儲節點加密的共享鑑別密鑰所得的密文keyMAC和時戳信息。每個用户均與存儲節點有一個共享鑑別密鑰,這個鑑別密鑰僅由用户和存儲節點兩方知道,用來完成用户身份的鑑別。每當一個新用户加入系統時,可以通過RSA加密機制將用户的鑑別密鑰發送到每個存儲節點,存儲節點在收到加密的密文keyMAC之後,在認證對象中,為該用户添加一行信息。
在這種方案中並沒有採用數字簽名機制,而只是在寫數據時計算HMAC散列來鑑別寫者。HMAC不同於數字簽名之處,在於用户端可以驗證一個基於密鑰的散列也可以創建這個散列。寫操作需要客户端加密安全數據對象,並且計算HMAC,然後將這些信息發送給存儲節點。存儲節點使用存儲在認證對象中的共享鑑別密鑰重新計算HMAC來鑑別發送者的身份。如果通過鑑別,客户有權修改或創建安全數據對象,存儲節點完成寫操作,並更新相應的數據結構。注意存儲節點並不存儲HMAC。如果讀數據的用户不是創建這個數據對象的用户,那麼需要重新計算一個新的HMAC。
2.3數據讀寫過程
數據的讀寫過程大致相同,首先用户將與存儲節點共享的鑑別密鑰私鑰提供給客户端,這可以通過要求用户輸入密碼形式或是鑑別服務器來完成。對於每一個文件,通過文件的放置與定位算法找到相應的存儲節點,完成存儲節點鑑別用户的.合法性。如果鑑別用户有權對此文件讀或寫操作,打開文件,獲得相應的密鑰文件標誌,然後去讀密鑰文件,得到該文件的加/解密密鑰。如果是寫操作,這個密鑰用於加密數據;如果是讀操作,用於解密數據。
2.4數據對象的複製機制
隨着系統規模的擴大,節點失效和磁盤損壞現象不可避免,因此考慮到數據對象的宂餘是很有必要的。數據對象標誌符DOID由事先定義好的函數,根據文件在其名字空間的全路徑和名字空間的標誌生成。將數據對象的全局統一標誌DOID作為SHA-1算法的輸入,產生一個160 bit的消息摘要x;將160 bit的消息摘要x分成五個32 bit偽隨機數k1~k5。如果需要更多的隨機數,可以將x作為SHA-1算法的輸入,產生另外五個32 bit偽隨機數k6~k10。假定系統要求的副本數量是k,需要產生三倍於k的偽隨機數,再根據這些偽隨機數將數據對象散列到不同的磁盤上。產生三倍於k的偽隨機數降低了3k個偽隨機數全部散列到同一個磁盤的概率。
2.5數據對象的修復機制
系統在運行一段時間後,存儲在系統中的數據副本可能會因為某些不可預知的原因而丟失或者被損壞,從而降低了存儲在系統中數據對象的可靠性。單獨使用宂餘機制無法有效地提高分佈式存儲系統中數據存儲的可靠性。對於高可靠性的存儲系統,設計並實現一個簡單而且高效的修復算法相當重要。在分佈式文件存儲系統中存在三種基本的修復機制,即本地數據維護、被動檢測和主動掃描。文獻[8]中詳細敍述了在OceanStore中如何應用這三種修復機制以及相應的性能分析。
考慮到系統實現的複雜性及性能,本文設計了簡單的數據對象副本修復機制。系統中每個存儲節點定期掃描存儲在本地的文件元數據信息,並檢查在其他副本存儲節點上的元數據信息,在多於quorum個(包括quorum)元數據信息中找出具有最大時間戳的元數據信息,並覆蓋其他副本。
3性能分析
3.1修復算法的可行性
首先分析修復算法的可行性,包括帶寬消耗和文件的可靠性。假定副本的死亡分佈服從負指數分佈,即Pdeath(t)=1-eλt。其中1/λ是副本的壽命期望。下面是推導過程中用到的其他符號的定義:bandwidth為系統節點的帶寬;N為系統的節點數目;F/N是每個節點保存在系統中文件的平均數目;filesize為系統中文件的平均大小;uptime為每個節點每天的平均在線時間;T為系統的修復週期;R為一個文件的副本數。
假如沒有修復,一個文件經過T時間後它存活的可能性為Pliving(1)=1-PRdeath(T)。文件的修復是需要時間的,修復文件所需時間的上界是一個節點修復所有丟失的副本所需的時間,即T2R=(filesize×R)/bandwidth。一個節點進行修復時可能由於下線等原因導致修復失敗,可以假定修復在上線期間是均勻進行的,則修復失敗的上限為T2r/uptime。如果修復時文件還存活,從這一時刻往前看:如果修復成功,死亡分佈的無記憶性,文件將以概率1存活下去;否則,文件以Pliving(T)的概率繼續存活。由此可以得到文件存活的遞推公式:
3.2系統的可擴展性分析
系統所採用的鑑別機制中,在客户端和存儲節點執行的操作分工如表1所示。值得一提的是這種方案不需要產生簽名或驗證簽名,而在讀和寫操作時,存儲節點均要計算一次HMAC。因為加密比散列需要更長的時間,存儲節點的工作量還不到客户端完成工作量的1/2,這將保證系統能夠擴展到更大規模。存儲節點的瓶頸主要是在網卡,因為完成散列的操作要比在100 Mbps鏈路上載送包所花費的時間少得多。
4結束語
集羣存儲是一種網絡存儲體系結構,本文重點介紹了構建在該存儲體系結構上的一種數據安全存取方案。它採用基於共享鑑別密鑰的鑑別機制,防止未授權用户的閲讀和修改,並且對上層應用透明。系統採用廣泛用於加/解密技術中的SHA-1算法作為密碼校驗函數,與採用數字簽名鑑別機制相比,該算法具有較高的性能。系統修復機制能夠自動地修復系統中存在錯誤的數據對象,保證了系統的高可靠性。通過分析推導,證明系統的自動修復機制是可行的。通過比較客户端和存儲節點所執行的任務,存儲節點的工作量不到客户端的一半,從而保證系統能夠擴展到更大規模。