方國強
(中國移動通信集團浙江有限公司,浙江 杭州 310000)
隨著網絡技術的不斷發展,信息系統與人們生活結合得越來越緊密,給人們帶來了諸多便利。這些便利也給網絡黑客帶去了攻擊便利,增加了網絡攻擊的攻擊面。即使是最強大的網絡防火墻[1]、入侵檢測系統[2]和反病毒軟件[3]一起,也無法保證信息系統的完全安全。在這種情況下,計算機審計系統[4]的作用愈發明顯。審計系統通過記錄和分析系統中發生的操作事件,對攻擊行為進行抽絲剝繭般的分析、追溯和特征歸納,從而對未來網絡攻擊進行預警。然而,現有的審計系統往往存在超級管理員權限過大的問題。具體來說,超級管理員擁有刪除審計記錄的權限。在極端情況,超級管理員可以監守自盜,并且從審計系統中刪除可能追蹤到他的所有審計記錄。此外,調查研究發現[5],60%以上安全攻擊來自于內部。因此,超級管理員的極端情況是不得不考慮的安全事件。
針對超級管理員問題,很多學者和企業也提出了許多解決方案,主要包括分散法和加層法。分散法中,超級管理員不是一個人,而是一個賬戶,該賬戶由多個人共同管理。當僅有其中的少數人作惡時,無法獲得審計記錄刪除權限,從而解決了超級管理員問題。但是,這種方法存在如下問題。超級管理員人數不能過多,如果人數過多將不利于日常升級系統的管理;一旦人數過少,將易使得合謀成功,從而又回到該問題的原點。加層法則指的是在超級管理員上面再設立一個管理員,該管理員只負責記錄超級管理員的操作行為。然而,這種方法完全寄托于新設立管理員的可信度。當該管理員和超級管理員合謀時,超級管理問題將再次發生。另外,當該管理員作惡如偽造超級管理員操作,將陷害超級管理員。如此一來,要區分是誰在作假,審計系統還需引進一套決策系統。公平地說,目前已有的審計系統沒有很好地解決超級管理員問題。
2008 年年底,一個化名為中本聰的學者提出了一種新的密碼貨幣,名為比特幣[6]。經過不斷發展,將在比特幣中涉及的技術歸納總結為區塊鏈技術。區塊鏈技術可以在一個無中心的不可信的環境中建立可信數據鏈,這些數據共享于全網絡且不可篡改。超級管理員問題實質上是數據篡改問題,而區塊鏈的一大特點是不可篡改性。因此,本文將結合區塊鏈技術,利用其不可篡改性,提出一個防篡改的審計系統。該系統不同于已有的解決方案,并不對已有的審計系統進行修改,而是將其作為一個黑盒,節約建設成本和人員培訓成本;由于區塊鏈本身是在不可信環境中建立可信的性質,最大程度上降低了超級管理員與區塊鏈進行合謀的可能性。
當然,僅僅使用區塊鏈技術并不能完全解決超級管理問題,原因有二。第一,當審計數據上鏈后,這些數據將被全網獲取,因此必須對其進行保密處理,而且是細粒度的訪問控制。第二,由于區塊鏈本身不支持查找搜索的特性,勢必會影響其審計數據稽核效率,因此必須設計一種快速有效的稽核方法。本文所提的最終解決方案較好地解決了以上兩個問題。
本文剩余內容安排如下。第1 節介紹所提審計系統的系統框架和設計目標。第2 節介紹所提審計系統涉及的基礎知識,包括哈希函數、數字簽名、區塊鏈和屬性基加密等。第3 節和第4 節分別給出系統的描述和分析。第5 節基于之前的系統提出一個更高效的防篡改審計系統。最后,在第6 節給出結論。
介紹涉及的防篡改審計系統的設計框架、信任假設以及設計目標。
如圖1 所示,提出的防篡改審計系統共有5 個部分,分別是傳統審計系統、數據采集網關、區塊鏈網絡、審計驗證系統和密鑰管理服務器。傳統審計系統顧名思義是現行的審計系統,具有對系統內部操作進行記錄和分析的功能,包括超級管理員對系統的操作。但是,由于超級管理員的權限設置問題,使得超級管理員可以刪除操作記錄。為了防止該情況的發生,數據采集網關將超級管理員的操作記錄收集并上傳至區塊鏈網絡中,利用區塊鏈的不可篡改性防止超級管理員對其操作記錄進行刪除。由于這些操作記錄涉及到企業內部信息或超級管理員的敏感信息,因此數據采集網關必須在上傳至區塊鏈網絡前對其進行加密。最后,用戶可以通過審計驗證系統驗證傳統審計系統中超級管理員的操作記錄是否經過修改。當然,用戶在驗證時需要用到解密密鑰。操作記錄的加解密密鑰都是由密鑰管理器生成和分發的。另外,這里的區塊鏈可以是許可鏈也可以是非許可鏈,但是不管是哪種區塊鏈,上鏈數據都需要進行認證。因此,在數據上傳前操作記錄將會由數據采集網關進行簽名。簽名所用到的公私鑰對由網關獨立生成,簽名驗證鑰(公鑰)由密鑰管理服務器上傳至區塊鏈。

圖1 防篡改審計系統的系統設計框架
在所提的防篡改審計系統中,本文分別對各個參與組件做出如下信任假設。
(1)傳統審計系統是可靠的,即系統中的所有操作都會被記錄,但是在記錄后超級管理員可以利用其權限對操作記錄進行修改。
(2)數據采集網關是完全可信的,也就是說該網關會采集所有滿足條件的審計記錄(在本文的具體例子中指超級管理員的操作記錄),并且不會存儲所采集的審計記錄而泄露給其他參與方或外部人員。
(3)密鑰管理服務器也是完全可信的,會存儲數據采集網關的簽名驗證鑰(私鑰),會產生對記錄進行加解密操作的加解密鑰,并對其進行安全分發。它與數據采集網關之間的通信信道是可信的,而與審計驗證系統的通信信道是可信并保密的。
(4)區塊鏈網絡是誠實但好奇的,也就是區塊鏈網絡中的節點會根據區塊鏈的共識機制對數據進行驗證和上鏈操作,但是同時它們也對上鏈數據(審計數據)感興趣并嘗試獲得這些信息。當然,根據區塊鏈的性質,它不會發起主動攻擊。
(5)審計驗證系統由用戶控制,只有用戶具有對應的解密密鑰時,才能判斷審計記錄是否進行了修改。
本系統的設計目標包含安全和效率兩個方面。
1.3.1 安全設計目標
安全設計目標又包含審計記錄不可篡改性和審計記錄的保密性兩個子目標。不可篡改性指的是審計記錄一旦生成,任何人包括超級管理員都不能對其進行修改。保密性指的是審計數據在從數據采集網關出來后,只有授權過的用戶才能訪問這些審計數據,并滿足細粒度訪問控制的要求。
1.3.2 效率設計目標
效率設計目標包含上鏈效率和下鏈效率兩個子方面。上鏈效率指的是審計數據通過數據采集服務器出來后記錄到區塊鏈中的速度。在本文的具體應用中,需要滿足中國移動審計系統中每天上百萬條的數據量。下鏈效率指的是進行審計數據稽核時,它的效率在能接收的范圍內。當數據沒有被修改時,它的稽核效率不應該小于1 000 條/秒;當數據有修改時,假設1 000 條記錄中有1 條被修改,其定位效率不低于5 s。
本節中將主要介紹所設計的防篡改審計系統涉及的基本概念,包括區塊鏈、哈希函數、數字簽名以及屬性基加密。
哈希函數是一種特殊的函數,其輸入可以是任意字符串,而其輸出是一串恒定長度的字符串。兩個輸入字符串中僅僅只有一個比特不同,其得到的輸出也有很大的不同。一個哈希函數必須滿足單向性和抗碰撞性兩個安全屬性。單向性指的是從函數的輸出求不出函數的輸入。抗碰撞性指的是找不到兩個不同的輸入其輸出是一樣的。在本文的剩余部分,將用H 來表示哈希函數。
數字簽名方案是一種公鑰密碼方案,包含公私鑰生成算法KeyGen、簽名算法Sign 和驗證算法Verify 這3 個算法。在公私鑰生產算法中會產生一對公私鑰對(pk,sk)私鑰sk 用在簽名算法中產生對消息m 的簽名σ,而公鑰pk 可在驗證算法中用來驗證σ,判斷其是否是消息m 的有效簽名。公鑰pk也可被稱為簽名驗證鑰。在本文的剩余部分,將用S 來表示數字簽名方案。
對于數字簽名來說,其安全屬性主要是不可偽造性。該屬性保證了攻擊者即使通過自適應的方式獲得相當數量的消息簽名對(m,σ)后,也不能對一個新的消息m 產生有效的簽名σ。
區塊鏈技術來源于一個化名為中本聰的學者提出的比特幣[6],其最大的特點是不可篡改性。該性質主要通過全局共享和哈希鏈結構獲得。區塊鏈由一系列數據塊組成,且這些數據塊是公開可獲得的。也就是說,網絡中的任何一個節點都可以獲得區塊鏈上的所有數據,即使一個節點丟失了區塊鏈數據,也可以從其他網絡節點中獲得區塊鏈數據。此外,這些數據塊通過哈希函數連接在一起,修改其中的任何一個數據都會引起其后續區塊的變動。然而,根據哈希函數的安全屬性,這種變動很難實現。結合以上兩點,區塊鏈上的數據是不可篡改的。本文正是利用區塊鏈的該特性,提出了一個基于區塊鏈的防篡改審計系統。
屬性基加密是一種特殊公鑰加密類型,由密碼學家Sahai 和Waters[7]在歐密2005 會議上提出,主要用來實現密文的細粒度訪問控制系統。只有用戶的屬性滿足密文的訪問控制要求時,用戶所擁有的私鑰才能進行解密活動對應的明文。屬性基加密分為密鑰策略和密文策略兩種類型。前者中,訪問控制策略主要通過用戶所擁有的私鑰來實現;后者中,主要通過密文來實現。當然,屬性基加密也包含加密算法Enc 和解密算法Dec,還有系統公私鑰對產生算法SKeyGen 和用戶私鑰產生算法Ext。SKeyGen產生一對公私鑰對(mpk,msk),mpk 公開,msk 由一個叫密鑰生成中心(PKG)的實體掌握。該PKG 可以利用msk 根據用戶的屬性在Ext 算法中產生對應的用戶私鑰。在本文的剩余部分,用ABE 表示屬性基加密。
對于屬性基加密來說,它的安全屬性主要通過不可區分性來保證所加密消息的私密性。不可區分性指的是攻擊者不能得知一個給定的密文所對應的消息,即使這個消息是其所選定的兩個消息之一。另外,根據攻擊者是否可以獲得其他一些信息,不可區分性又可分為多個等級,如選擇明文攻擊(Chosen-plaintext Attack,CPA)、選擇密文攻擊(Chosen-ciphertext Attack,CCA)以及選擇模型(Selective Model,SM)等。
利用介紹的基本工具,給出設計的防篡改審計系統。該系統主要包括系統初始化階段、數據收集階段、數據上鏈階段以及數據下鏈階段。
該階段,各個系統組件生成必要的密鑰數據。
(3)系統中的用戶可以向密鑰管理服務器申請自己屬性所對應的私鑰。具體來說,密鑰管理服務器首先要認證用戶聲稱的屬性是真實的,可通過第三方認證系統來實現,如短信認證等。通過認證后,密鑰管理服務器運行生成用戶屬性所對應的私鑰,并通過可信且保密的通信信道傳輸給用戶。
該階段,數據采集網關將從傳統審計系統中收集到的審計數據經過處理上傳至區塊鏈網絡。具體來說,主要有以下步驟。
(1)從傳統審計系統中收集審計數據,記為m。
(2)利用一個對稱加密算法如SM4,對m 進行加密。加密所使用的密鑰記為k,加密后所得的密文記為C1。
(4)用sk 對密文C1、C2和m 的生成時間t 運行 S.Sign算法,獲得相對應的簽名σ。
(5)將(t,C1,C2,σ)廣播到區塊鏈網絡中。
該階段,區塊鏈網絡中的區塊生成節點(或稱共識節點)對傳播到區塊鏈網絡中的(t,C1,C2,σ)進行驗證。如驗證通過,則將其記錄到區塊鏈中;如驗證不通過,則拋棄該(t,C1,C2,σ)。
驗證過程主要包括以下步驟。
(1)(t,C1,C2,σ)是否已包含在區塊鏈中,如是,則驗證不通過;
(2)利用pk 運行 S.Sign算法驗證簽名σ 是否是對(t,C1,C2)的有效簽名,如不是有效簽名,則驗證不通過。
該階段,用戶可以通過審計驗證系統驗證傳統審計系統中是否有記錄進行了改動。
(1)用戶確定稽核時間段[T1,T2]。
(2)根據時間段[T1,T2],從傳統審計系統中下載對應數據M′={m′}。這里M′是一個審計數據的集合,包含數個待稽核的審計數據m′。
(3)根據時間段[T1,T2],從區塊鏈中下載對應數據,輸入從密鑰管理服務器處獲得的自己的私鑰,讓審計驗證服務器對下載的數據進行解密獲得審計數據明文。具體來說,用用戶的私鑰對C2運行算法獲得k,然后利用k 對C1進行解密獲得m。最終,從區塊鏈中獲得的審計數據記為M={m}。
(4)對集合M′和M 中的數據逐項進行稽核,從而驗證傳統審計系統中在時間段[T1,T2]是否有記錄進行了修改。
本節將對提出的防篡改審計系統進行分析,包括安全分析和效率分析。
4.1.1 防篡改性
根據信任假設可知,數據采集網關一定能收集到所有的審計數據,并將這些審計數據傳輸到區塊鏈網絡。當區塊鏈網絡收到數據采集網關發來的審計數據時,會驗證其有效性。通過有效性驗證后,這些數據將會被寫入區塊鏈。由區塊鏈的不可篡改性可知,數據一旦上傳至區塊鏈中將不可被修改;而用戶通過審計驗證服務器,一定能從區塊鏈上下載到完整的審計數據。數據采集網關會對所有傳輸到區塊鏈網絡中的審計數據進行數字簽名認證。根據數字簽名的不可偽造性可知,系統中的其他實體或者其他人無法產生偽造的審計數據。因此,在所提的審計系統中,任何人都無法篡改審計數據,從而滿足防篡改性。
4.1.2 細粒度訪問控制
審計數據是經過對稱加密算法進行加密的,其使用的加密密鑰又是經過屬性基加密方案加密的。根據屬性基加密和對稱加密算法的安全性可知,沒有對應的解密密鑰是無法獲得對應的審計數據的。根據屬性基加密的特點,如果用戶的屬性無法滿足密文的訪問控制要求,那么用戶擁有的密鑰將無法進行解密。因此,即使用戶可以從區塊鏈中隨意下載(t,C1,C2,σ)數據,但只有其屬性滿足要求時才能審計明文數據,從而實現細粒度訪問控制。
在所提的防篡改審計系統中,系統初始化階段的主要消耗是公私鑰的產生。這些操作可在秒級程度上完成。初始化操作一般都只執行一次,或者在系統更新時才執行,而系統更新的頻率很低,次數屈指可數,因此初始化操作即使在分鐘級別也是能夠接受的。另外,在數據上鏈階段,主要消耗包括對數據采集網關簽名的驗證和共識形成。前者的時間消耗在毫秒級內完成,特別是使用ECDSA 時,而后者取決于所使用的共識機制。在非許可鏈中,使用PoS(Proof of Stake)共識機制的變體[8],其效率可以在秒級程度上完成。在許可鏈中可以獲得比在非許可鏈中更高的效率[9]。因此,下面將詳細分析數據收集階段和數據下鏈階段兩個階段的效率。
(1)數據收集階段。該階段,時間的消耗主要是在屬性基加密操作。對于屬性基加密來說,時間消耗在秒級。對于一天數百萬審計記錄的系統來說,該階段的時間消耗很大,遠遠達不到高效的要求。
(2)數據下鏈階段。不同于數據收集階段,該階段的時間消耗除了在屬性基解密操作上外,還有相當部分時間消耗在區塊鏈上查找對應的審計數據上。眾所周知,區塊鏈是一個不支持快速查詢的數據庫,其查找只能按順序逐個查找,時間復雜度是O(n),n 是區塊鏈上審計數據的數量。當審計數據達到每天數百萬的量級時,查找速度將會無法忍受。
由上述分析可知,提出的審計系統雖然在安全性上達到了設計要求,但其效率遠遠不足,必須對其進行改進。
在給出本文的改進方案之前,簡要闡述改進思路。
(1)密碼操作加速。對于屬性基加解密的操作,由于所使用的密碼算法都已是標準算法或知名算法,已經很難從算法本身去改進。為此,從計算機系統思路進行改進,采取批處理的思想,即多個審計記錄用相同的加密密鑰,從而減少屬性基加解密操作次數。
(2)查找加速。由于區塊鏈本身不支持查找搜索功能,因此必須自建一個對應于區塊鏈的數據庫,從而達到快速查找的功能。但是,如此一來,如何保證自建數據庫不可篡改性就成了一個新問題。為此,設計了一個快速稽核方法,在每次利用自建數據庫稽核前都要驗證自建數據庫是否被篡改。
同第4 節中描述相同。
本階段中,數據將被分批、分階段、分類型進行打包、上傳至區塊鏈網絡。
(1)建立一個空打包表,包括時間點、訪問策略、屬性基密文以及密鑰。
(2)從傳統審計系統中收集審計數據,記為m。
(3)在打包表中查找滿足以下兩方面的記錄。
①審計數據m 的生成時間t 和記錄的時間點處于相同時間段。時間段的定義可靈活設置,可為1 h、1 d 或1 a 等。
②審計數據m 的訪問控制策略和記錄的訪問策略是否一致。
如果存在這樣的記錄,則取出對應的屬性基密文(記為C2)和密鑰(記為k);如果不存在這樣的記錄,則隨機生成滿足對稱加密的密鑰k,對k利用算法,獲得對應于訪問控制策略的屬性基密文,并將審計數據m 的t、訪問策略、C2和k 記錄在打包表中。
(4)對m 進行加密,加密使用的密鑰記為k,得到密文C1。
(5)用sk 對密文C1、C2、t、h、h-1運行 S.Sign算法,獲得相對應的簽名σ。這里h=H(h-1||C1||C2||t),h-1為上一條審計記錄的h 值。
(6)將(t,C1,C2,σ,h,h-1)廣播到區塊鏈網絡。
對比第4 節中的數據收集階段,本文并不是對每一條審計記錄都進行屬性基加密,在同一時間段內訪問控制策略一致的審計數據只做一次屬性基加密操作,從而大大減少了數據收集階段的時間消耗。
審計驗證系統將建立一個支持搜索功能的數據庫,該數據庫存儲(t,C1,C2,σ,h,h-1)和區塊ID 等,并主動監測區塊鏈。當有新的區塊產生時,審計驗證系統去區塊中讀取(t,C1,C2,σ,h,h-1),并連同區塊ID存儲在數據庫中。
審計數據稽核過程如下。
(1)用戶確定稽核時間段[T1,T2]。
(2)自建數據庫對應于時間段[T1,T2]為
(3)從區塊鏈中取得{ti1,C1,i1,C2,i2,σi1,hi1,h-1,i1}的前一審計記錄(t,C1,C2,σ,h,h-1),驗證h-1,i1=h 是否成立,且對于j=1,…,n-1,驗證和hij=H(h-1,ij||C1||C2||t)是否成立。如果h-1,ij+1=hij有一個不成立,說明自建數據庫被人修改過,需要重新讀取數據;否則,說明自建數據庫在時間段[T1,T2]的數據和區塊鏈中的數據一致。
(4)根據時間段[T1,T2],從傳統審計系統中下載對應數據M′={m′}。這里M′是一個審計數據的集合,包含數個待稽核的審計數據m′。
(5)根據時間段[T1,T2],從區塊鏈中下載對應數據,輸入從密鑰管理服務器處獲得的自己的私鑰,讓審計驗證服務器對下載的數據進行解密,獲得審計數據明文。具體來說,用戶需要建立一個解密表,包括屬性基密文和密鑰。在打包表中查找C2。如果存在這樣的記錄,則取出對應密鑰(記為k);如果不存在這樣的記錄,則利用其密鑰進行算法,獲得對稱加密密鑰k(可能為空,即無法解密),并將C2和k 記錄在解密表中。
(6)當k 不為空時,對密文解密獲得m。最終,從區塊鏈中獲得的審計數據記為M={m}。
(7)對集合M′和M 中的數據逐項進行稽核,從而驗證傳統審計系統中在時間段[T1,T2]是否有記錄進行了修改。
對比第4 節中的數據收集階段,本文并不是對每一條審計記錄都進行屬性基加密,在同一時間段內訪問控制策略一致的審計數據只做一次屬性基加密操作。另外,對于區塊鏈的操作僅僅是一次,而不是每條審計記錄都要進行臨時下鏈操作,從而大大提高了稽核效率。
針對傳統審計系統無法對超級管理員進行有效審計的問題,利用區塊鏈技術的不可篡改性,提出了一個新的防篡改審計系統。為了保護審計數據的私密性,利用屬性基加密實現了密文的審計數據的細粒度訪問控制。由于使用區塊鏈和屬性基加密帶來了效率上的損失,于是提出了相應的提速方法。