蔣 凡,魏弋翔,程紹銀
1(中國科學(xué)技術(shù)大學(xué) 信息安全測評中心,合肥 230027)
2(中國科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,合肥 230027)
訪問控制是信息安全中最為基礎(chǔ)的方面之一[1],而RBAC正是一種解決辦法.在RBAC中,一個(gè)多級結(jié)構(gòu)被定義為擁有不同權(quán)限的不同角色的集合,將用戶映射到角色,給角色賦予權(quán)限,把用戶與權(quán)限的直接聯(lián)系舍棄,通過角色來聯(lián)系與管理[2].NIST標(biāo)準(zhǔn)RBAC模型分為RBAC0 (core RBAC,核心RBAC)、RBAC1(hierarchy RBAC,分級 RBAC)、RBAC2 (constraint RBAC,約束 RBAC)和 RBAC3 (combine RBAC,組合RBAC)四個(gè)子模型[3],其中在RBAC1中引入了角色的繼承關(guān)系.這個(gè)標(biāo)準(zhǔn)模型統(tǒng)一了人們對于RBAC的認(rèn)識[4].于是RBAC模型可以被抽象為具有支配關(guān)系的集合,有限繼承的RBAC1模型正是線性以及樹形結(jié)構(gòu)的多層結(jié)構(gòu).在此基礎(chǔ)上,可以使用密鑰來區(qū)分不同角色,以達(dá)到權(quán)限與角色對應(yīng)的目的.這個(gè)需求會(huì)出現(xiàn)在大部分的多層結(jié)構(gòu)組織的訪問控制系統(tǒng)中.在這樣的系統(tǒng)中的密鑰管理面臨的一大挑戰(zhàn)性的問題就是如何保證角色能獲得自身的密鑰[5]和期望每一個(gè)處于這個(gè)系統(tǒng)中的用戶都能從它自身的密鑰計(jì)算出它的下級集合的密鑰,即便是在頻繁變化的系統(tǒng)中.系統(tǒng)的變動(dòng)是使用中的必然,容易預(yù)見,用戶的角色會(huì)發(fā)生變化,每一個(gè)角色也有可能會(huì)發(fā)生變化(例如增加角色、刪除角色,權(quán)限的升級與降級).所以密鑰管理應(yīng)該在保證安全性的同時(shí)高效地生成或改變密鑰.如何在系統(tǒng)發(fā)生改變時(shí)做出響應(yīng)即是本文章討論的重點(diǎn)[6].
為了更容易地理解這個(gè)場景,想象有一個(gè)多職位的企業(yè).其中每一個(gè)職位都會(huì)有下轄的職位,例如總經(jīng)理下有銷售經(jīng)理等.這樣一來,不同職位對應(yīng)著不同的角色.顯然,不同角色對應(yīng)著不同的訪問權(quán)限.這樣一來就出現(xiàn)了一個(gè)問題: 當(dāng)某職位有人員調(diào)動(dòng)時(shí),該角色的密鑰應(yīng)當(dāng)發(fā)生改變,否則本不該知道密鑰的、不屬于該角色的成員仍能掌握該密鑰.
真正核心的問題在于,如何保證一個(gè)祖先節(jié)點(diǎn)能夠推測出密級遠(yuǎn)低于它的節(jié)點(diǎn)的密鑰[7].更進(jìn)一步地,如果一個(gè)用戶離開了這個(gè)系統(tǒng)或者離開了其中某個(gè)部門,要想使得該用戶原節(jié)點(diǎn)之下的信息不再被該用戶獲知,則這些節(jié)點(diǎn)的密鑰都需要作出相應(yīng)更改.
在這篇文章中,我們提出了一種新的高效的密鑰管理方法.這篇文章按以下結(jié)構(gòu)組織: (1)在第2節(jié)中介紹了該模型的多層結(jié)構(gòu)和密鑰分配方法; (2)在第3節(jié)中,對已有的密鑰管理方法做了一個(gè)回顧; (3)在第4節(jié)中,介紹了我們的模型并闡述了理論基礎(chǔ);(4)在第5節(jié)對該方法進(jìn)行安全性證明與實(shí)驗(yàn); (5)最后對本文進(jìn)行了總結(jié).
正如在前文提到過的一樣,在這個(gè)訪問控制模型中最基本的是“角色”,每個(gè)角色對應(yīng)一個(gè)密級.可以如下定義這個(gè)問題[8].
這些實(shí)體根據(jù)密級被分割為不同的子組,即成為角色.每個(gè)角色是用戶的一個(gè)集合,對應(yīng)了一個(gè)密級,將其稱為SCi.這樣在定義中,每個(gè)SCi就是一些實(shí)體的集合,所有的SCi組成的集合稱作SC.現(xiàn)在我們可以定義SC的偏序關(guān)系.對于兩個(gè)類SCi和SCj,若SCi對SCj具有訪問權(quán)限,則稱SCj從屬于SCi,以≤表示這個(gè)關(guān)系.這樣定義之后有以下幾個(gè)特性[9]:
1) 傳遞性: 假設(shè)有三個(gè)不同的密級集合,SCi,SCj,SCk,如果有 SCi≤SCj且 SCj≤ SCk,那么 SCi≤SCk.
2) 自反性: 對任何密級集合 SCi都有 SCi≤SCi.
3) 非對稱性: 如果 SCi≤SCj且 SCj≤SCi那么必定有i=j.話句話說,和 SCj是對應(yīng)于同一角色的密級集合.
如果在一張圖上表示這個(gè)結(jié)構(gòu),可以明顯地看出三種構(gòu)型: 線性,樹形和有向無環(huán)圖(DAG),如圖1.所示.在一般情況下,從有向無環(huán)圖到線性結(jié)構(gòu)是一個(gè)逐步特化的過程.但是線性結(jié)構(gòu)與樹形結(jié)構(gòu)和有向無環(huán)圖有很大的區(qū)別,因?yàn)榫€性與樹形結(jié)構(gòu)的每一個(gè)節(jié)點(diǎn)均只有一個(gè)直接支配節(jié)點(diǎn).在應(yīng)用上來說,這兩種結(jié)構(gòu)更符合現(xiàn)實(shí)中的情景,和有限繼承的RBAC模型契合,所以本文著重討論這線性與樹形兩種結(jié)構(gòu).
圖1 三種結(jié)構(gòu)類型示意圖
在一開始,需要為每個(gè)角色分別指定一個(gè)初始的密鑰.方法如下[10]:
(1) 為每個(gè)角色分別指定一個(gè)互不相同的質(zhì)數(shù).對于每個(gè)v∈V,選擇一個(gè)與其他質(zhì)數(shù)p均不同的質(zhì)數(shù)pv.
(2) 利用這些質(zhì)數(shù),通過如下方法,為每個(gè)角色生成一個(gè)標(biāo)記(token).
(3) 隨機(jī)選擇兩個(gè)不同的大質(zhì)數(shù)p和q,計(jì)算n=p·q.然后選擇根密鑰k0使得1 (4) 對于每一個(gè)v∈V,計(jì)算出modn.其中Av表示從屬于v的所有密級集合的集合. 這個(gè)標(biāo)記的優(yōu)點(diǎn)在于,非常簡單地標(biāo)記了不同角色之間的從屬關(guān)系.對于角色SCi≤SCj(i≠j),一定有tj|ti.這一點(diǎn)很好證明. 但是,上述有兩點(diǎn)問題.第一點(diǎn)是計(jì)算出的tv可能非常大[11].另一點(diǎn)是,所有的密鑰都與k0有緊密的聯(lián)系,因此當(dāng)密鑰系統(tǒng)發(fā)生了改變時(shí),不管是角色還是角色中的用戶改變,幾乎都必須從根向下更新一遍.這意味著每當(dāng)變化發(fā)生,密鑰將被重新分配.這篇文章關(guān)注的重點(diǎn)則是如何減少變化發(fā)生時(shí)的修改次數(shù). Hassen等人提出的密鑰管理方法利用了額外空間來存儲(chǔ)密鑰表.他們將此方法稱為“對線性多層結(jié)構(gòu)的基于密鑰表的密鑰管理方法”(KTLHs)[12].第一次使用KTLHs時(shí),它會(huì)隨機(jī)生成一個(gè)K1,然后每一個(gè)Kt+1都能使用一個(gè)單向哈希函數(shù)H來生成,Kt+1=H(Kt).這樣一來,對于每一個(gè)SCt的成員來說,任意密級集合SCu(SCu≤SCt)的密鑰可以通過u–t次哈希函數(shù)來得到.密鑰表將記錄下每個(gè)密級集合已經(jīng)得到的密鑰以及版本號,用Ktp來表示密級集合SCt在進(jìn)行過第p–1次更新后的密鑰.更新密鑰時(shí),將會(huì)進(jìn)行以下操作: 以密級集合SCt發(fā)生了改變?yōu)槔? (1) 控制中心隨機(jī)生成一個(gè)新的密鑰Ktp+1. (2) 對每個(gè)滿足SCc≤SCt的SCc,使用單向函數(shù)H計(jì)算出Kcp+1并發(fā)送至相應(yīng)的集合. (3) 對每個(gè)滿足SCt≤SCs的SCs,發(fā)送消息對(t,Ktp+1)至對應(yīng)集合. (4) 每個(gè)密級集合更新自己的密鑰表. 考慮一個(gè)有5個(gè)密級集合的系統(tǒng),其中SC3的一位成員離開系統(tǒng).那么SC1的成員所持有的密鑰表在運(yùn)行了上述算法后將如表1所示.這樣,若SC1的成員想要訪問SC5的資源,只需要運(yùn)行兩次H(K32). 這個(gè)情形是SCu的成員升級或降級至SCt,為了方便描述,不妨設(shè)SCu≤SCt. 表1 成員持有的密鑰表 (1) 控制中心隨機(jī)生成一個(gè)新的密鑰Ktp+1. (2) 然后對每個(gè)滿足 SCu-1≤SCc≤SCt+1的 SCc,使用單向函數(shù)H計(jì)算出Kcp+1并發(fā)送至相應(yīng)的集合. (3) 滿足SCt≤SCs的SCs將會(huì)收到消息對(t,Ktp+1);滿足 SCu–1≤SCs的 SCs將會(huì)收到消息對 (u,Kup+1). (4) 每個(gè)密級集合更新自己的密鑰表. 密級集合只會(huì)通過兩種方式發(fā)生改變,即增加和刪除.這個(gè)改變可以視為在改變的節(jié)點(diǎn)處做了加入/離開操作.舉例來說,當(dāng)SCt被添加的時(shí)候,使原本的SCt降級為SCt+1,然后對SCt做SCt上的相應(yīng)的加入/離開操作. 當(dāng)連續(xù)且不同的改變發(fā)生時(shí),密級集合的密鑰表可能表得非常大,使得這個(gè)方法接近或等價(jià)于“非依賴方法”.比如角色中的成員自上而下發(fā)生改變時(shí).在之前舉例的情境中,則是從SC2,SC3直至SC5發(fā)生改變.在這些改變發(fā)生完成后,SC1的密鑰表將分別記錄下所有密級集合的密鑰.如表2所示. 本文提出了一種新的密鑰管理方法,引入?yún)?shù)的密鑰管理方法(Parameters Table-based key management scheme for Hierarchies,PTH).它在保持與“依賴方法”相同的獲取下級密鑰的速度的同時(shí)比KTLHs時(shí)的存儲(chǔ)空間改變更小. 這個(gè)模型是依賴模型的一個(gè)改進(jìn)模型,在計(jì)算下級密鑰方面有相同的復(fù)雜度,在系統(tǒng)的變動(dòng)發(fā)生時(shí)更新次數(shù)有很大的減少.每個(gè)角色僅存儲(chǔ)自身的密鑰和一個(gè)參數(shù),這個(gè)參數(shù)用來參與計(jì)算下級密鑰.這樣保證了系統(tǒng)所消耗的空間與系統(tǒng)的角色數(shù)是成正比的,并且該比例是穩(wěn)定的. 表2 極端情形下成員持有的密鑰表 如圖2所示,每個(gè)角色存儲(chǔ)它自己的密鑰和參數(shù)i兩個(gè)信息. 圖2 在變化時(shí)發(fā)生的更新 K0作為根密鑰由中心控制器直接隨機(jī)生成. 對于每個(gè)不是根節(jié)點(diǎn)的角色,Kt=H(Kt–1,it–1),H(K,i)=gK+i. 當(dāng)SCt的成員發(fā)生變動(dòng)時(shí),以下操作會(huì)被執(zhí)行: 1) SCt選擇一個(gè)隨機(jī)數(shù)r,計(jì)算出Ktnew=Kt?gr. 2) 計(jì)算并更新itnew. 3) 上級密鑰的參數(shù)it–1new更新. 算法1.結(jié)構(gòu)的建立與用戶變動(dòng)Data: 由 CA 生成的K0 Result: 各自保存自身密鑰的 RBAC 模型 1 initialization;2 foreach 非根節(jié)點(diǎn)角色 do 3Kt=H(Kt-1,it-1);4 end 5 while SCt發(fā)生變動(dòng) do 6 SCt 選擇隨機(jī)數(shù)r;7 計(jì)算 ;inew Knew t=Kt.r 8 ;t=(Kt⊕it)⊕Knewt 9 ;10 end inew t-1=(Kt-1⊕it-1+r)⊕Kt-1 可以看出,每一個(gè)變動(dòng)的只對鄰近的角色的有影響,而且只更新其參數(shù).每一次變動(dòng)只有兩個(gè)密鑰集合的信息會(huì)被更新. 算法2.角色變動(dòng)Data: 由 CA 生成的K0 Result: 各自保存自身密鑰的 RBAC 模型1 initialization;2 while SCt 刪除 do 3 SCt的直接指派關(guān)系移交至其直接父親(假設(shè)為SCt–1);4 ;5 end 6 while SCt 插入子節(jié)點(diǎn) SCt+1 do 7 SCt 的直接指派關(guān)系移交至 SCt+1 ;8 設(shè)置新參數(shù)itnew;Kt+1=H(Kt,inewt )inew t-1=Kt⊕it⊕Kt-1 9 計(jì)算 ;10 ;inew t+1=Kt+1⊕Kt⊕it 11 ;12 end inew t-1=Kt⊕it⊕Kt-1 在實(shí)現(xiàn)與測試中,密鑰與參數(shù)進(jìn)行異或運(yùn)算作為單向函數(shù)的參數(shù),可以保證密鑰與參數(shù)的規(guī)模在使用過程中保持不變. 因?yàn)榫€性多層結(jié)構(gòu)和樹形多層結(jié)構(gòu)有一個(gè)重要的共同點(diǎn),即都只有一個(gè)直接的上級節(jié)點(diǎn),所以樹形多層結(jié)構(gòu)可以被看作是線性多層結(jié)構(gòu)的一個(gè)擴(kuò)展.有一點(diǎn)區(qū)別在于,樹形結(jié)構(gòu)由于子節(jié)點(diǎn)更多,所以需要更多的空間來存儲(chǔ)參數(shù)序列.這樣,下級節(jié)點(diǎn)的密鑰計(jì)算如圖3所示. 圖3 計(jì)算并更新密鑰 定理1.這個(gè)更新方法保證了一個(gè)密級集合不能夠獲取上級集合的密鑰. 證明.假設(shè)有一個(gè)函數(shù)Dec可以通過給定的信息輸出上級集合的密鑰.不妨設(shè)該函數(shù)形為: 1) 這里,該公開模p循環(huán)群,g為其生成元. 2) Alice選擇一個(gè)隨機(jī)數(shù)a作為密鑰.那么公鑰則是(g,ga,p). 3) 在這個(gè)情境下,Dec則輸出a–i.而其中i=0. 這等價(jià)于利用Elgamal加密算法的公鑰輸出了其私鑰,而這在目前是公認(rèn)計(jì)算不可行的.證明完畢. 這個(gè)結(jié)論的成立也是非常直觀的.對于不同的x和i,算出的x'是有可能相同的.Dec不可能在僅知道x'的情況下輸出確切的x.由于這個(gè)方法有和Hassen等人提出的方法同樣的更新時(shí)機(jī),這個(gè)方法也滿足他們提出的兩個(gè)安全特性. 如果用N來代表密級集合的個(gè)數(shù)(也即角色數(shù)),用ui表示密級集合SCi的成員數(shù)量.SCi中成員的變動(dòng)概率為p.那么這個(gè)系統(tǒng)發(fā)生的變動(dòng)總數(shù)為: 雖然沒有一個(gè)特定的規(guī)則或公式去求得具體的p和u,但是顯而易見的是,越下級的SCi的p和u傾向于越大.不妨簡單地假設(shè)pi=ki,ui=mi,其中k和m是兩個(gè)指定的參數(shù).在本文的方法中,每次變動(dòng)的更新次數(shù)是一致的,可以算出T=O(N); 而在密鑰表模型中,T是不確定的,在一些極端情況下,可能出現(xiàn)T=O(N2).可以說,密鑰表方法是使用了更多的表更新次數(shù)換取了更少的獲取下級密鑰的時(shí)間. 基于密鑰表的密鑰管理幾乎只能用于一個(gè)純線性的結(jié)構(gòu)中.在純線性的模型中,KTLH的消耗與角色數(shù)呈正相關(guān).在同樣的變動(dòng)次數(shù)下,其響應(yīng)時(shí)間受系統(tǒng)中角色數(shù)的影響.如圖4所示. 可以看出,由于本文提出模型的單向函數(shù)基于離散對數(shù),而處于安全考慮,其循環(huán)群的階數(shù)得較大,所以在系統(tǒng)初始化時(shí)的構(gòu)建中耗時(shí)較長.但是在其后的頻繁變動(dòng)中,由于每次獨(dú)立變動(dòng)的耗時(shí)幾乎相同,其消耗僅與變動(dòng)次數(shù)相關(guān).在大規(guī)模的多角色多層級的系統(tǒng)中,相較于KTLH將擁有更高的效率. 在角色變動(dòng)中,有類似的表現(xiàn).如圖5所示. 圖4 線性結(jié)構(gòu)用戶變動(dòng)響應(yīng)效率對比 圖5 線性結(jié)構(gòu)角色變動(dòng)響應(yīng)效率對比 本文介紹了一個(gè)可以被用于基于角色的多層系統(tǒng)中的新的密鑰管理方法,這個(gè)方法滿足Hassen等人提出的安全要求.除了在線性的多層結(jié)構(gòu)中有良好的表現(xiàn),這個(gè)密鑰管理方法可以輕松的擴(kuò)展至樹形結(jié)構(gòu).這個(gè)方法保持了與依賴方法推測下級密鑰相同的復(fù)雜度,并且降低了在變動(dòng)發(fā)生時(shí)的更新次數(shù).該方法的優(yōu)點(diǎn)在于,對于一個(gè)可能頻繁變動(dòng)的系統(tǒng)來說,其消耗僅與變動(dòng)次數(shù)相關(guān),可以更好得應(yīng)用于一個(gè)多角色多層級的大規(guī)模系統(tǒng)當(dāng)中.3 KTLHs
3.1 加入/離開
3.2 升級/降級
3.3 密級集合變化
3.4 空間消耗增多的情形
4 本文方法
4.1 模型結(jié)構(gòu)
4.2 線性模型
4.3 樹形模型
5 安全性證明及實(shí)驗(yàn)
5.1 安全性
5.2 計(jì)算復(fù)雜度
5.3 真實(shí)場景模擬
6 結(jié)論與展望