張 彤 張 偉 王佳慧 劉 珂 馬利民
1(北京信息科技大學(xué)計(jì)算機(jī)學(xué)院 北京 100101)
2(國家信息中心信息與網(wǎng)絡(luò)安全部 北京 100045)
(zhangtong9702@sina.com)
云存儲是云計(jì)算概念的延伸和衍生,云存儲將存儲資源放在云端供人們訪問,具有運(yùn)營成本低、存儲效率高、管理方便、訪問便捷等優(yōu)點(diǎn)[1].但云存儲因?yàn)閿?shù)據(jù)被外包到由不完全信任的云服務(wù)提供者(cloud service provider, CSP)維護(hù)的云服務(wù)器上[2]:一方面,半信任的CSP可能破壞數(shù)據(jù)的機(jī)密性,如將數(shù)據(jù)透露給其他用戶;另一方面,CSP一直遭受著大量的外部攻擊,如果數(shù)據(jù)在云服務(wù)器中以明文存儲,也會威脅到數(shù)據(jù)的保密性.為了保護(hù)云存儲中外包數(shù)據(jù)的機(jī)密性,在外包前使用對稱加密技術(shù)對大量數(shù)據(jù)進(jìn)行加密是一種直接可靠的做法[3-5].
現(xiàn)有的方法是采用對稱加密技術(shù)保護(hù)云存儲中外包數(shù)據(jù)的機(jī)密性,對數(shù)據(jù)塊加密后上傳.如此一來,每個數(shù)據(jù)塊需要1個相應(yīng)的數(shù)據(jù)密鑰,而云計(jì)算背景下的PB級數(shù)據(jù)需要海量的密鑰支持,如此龐大的密鑰數(shù)量將對密鑰的存儲產(chǎn)生巨大的壓力.
基于以上問題,本文貢獻(xiàn)如下:
1) 提出一種基于矩陣的密鑰派生方案,隨用隨派生,僅存儲根密鑰和矩陣結(jié)構(gòu)即可,本文方案對比傳統(tǒng)方案減少了約65%~80%的存儲開銷;
2) 提出基于SM2非對稱算法[6]的兩方門限數(shù)字分發(fā)方案,保證了密鑰分發(fā)過程中密鑰的機(jī)密性和可鑒別性;
3) 使用硬件密碼機(jī)對主密鑰進(jìn)行安全存儲,通過軟硬件結(jié)合提升了密鑰存儲的安全性.
面向密鑰派生結(jié)構(gòu)的密鑰生成方案一直以來受到學(xué)者的廣泛關(guān)注.
Atallah等人[7]在2009年提出了一種基于狀態(tài)密鑰樹的組密鑰分發(fā)協(xié)議,該方案利用單層密鑰派生方法(single-layer derivation equation, SDE),建立一個基于用戶的樹型層次結(jié)構(gòu),基于密鑰派生圖,根據(jù)不同用戶對不同數(shù)據(jù)的訪問權(quán)限,為各個用戶生成1棵密鑰派生樹,并根據(jù)密鑰樹的結(jié)構(gòu),為不同加密對象分配不同的密鑰.因此,系統(tǒng)只用管理少量用戶密鑰,再由用戶密鑰派生出大量加解密所需的數(shù)據(jù)密鑰[7-9],該方案為數(shù)據(jù)密鑰共享提供了很好的解決思路.但是密鑰派生樹的容量具有局限性,在用戶數(shù)量、密鑰數(shù)量巨大的云存儲場景下,密鑰派生會產(chǎn)生很大的時間開銷[9].Vimercati等人[10]在SDE基礎(chǔ)上提出的雙層派生方案(double-layer derivation equation, DDE)減少了SDE方案中因權(quán)限更新造成的密鑰更新成本損耗[11-12],但是在海量用戶的場景下與SDE有相同的缺點(diǎn)[13].
2011年,Lo等人[14]基于公鑰密碼和哈希函數(shù)提出了一種面向大型樹型結(jié)構(gòu)密文共享訪問的密鑰管理方案,與上述方案相比提高了訪問控制效率,但是隨著葉子節(jié)點(diǎn)數(shù)量的增長,密鑰生成的計(jì)算開銷較大,并且,在后續(xù)的研究中發(fā)現(xiàn),該方案在前向安全方面存在致命的安全隱患.
Horus[15]方案使用一種可擴(kuò)展的方法,利用哈希樹為大文件的不同區(qū)域生成不同的密鑰,支持更細(xì)粒度的安全.通過建立樹結(jié)構(gòu)為每個數(shù)據(jù)單元分配單獨(dú)密鑰,Horus使用密鑰哈希樹從每個文件的根密鑰KR中為各個塊導(dǎo)出唯一的加密密鑰,這是唯一需要存儲的密鑰.除根密鑰外的其他密鑰是由Kx,y=KH(Kparent,x‖y)計(jì)算得出的,其中Kparent是Kx,y父區(qū)域的密鑰,該方案能夠通過哈希運(yùn)算快速計(jì)算出數(shù)據(jù)密鑰.但是,在刪除數(shù)據(jù)時需要重新建立密鑰樹才能注銷密鑰,只有通過修改文件的根密鑰,然后讀取、重新加密和重寫所有數(shù)據(jù),才能在整個文件的粒度上撤銷加密密鑰,該操作會產(chǎn)生大量時間開銷.
因此,在云存儲環(huán)境多用戶和海量數(shù)據(jù)的背景下,上述方案隨著用戶所需密鑰的增多,密鑰派生樹深度和節(jié)點(diǎn)數(shù)量增長,密鑰派生算法的時間和存儲開銷會呈線性或指數(shù)增長.
圖1為本文方案云存儲的場景圖,有3種不同的實(shí)體:云存儲服務(wù)商(cloud service providers, CSP)、數(shù)據(jù)所有者(date owner, DO)和數(shù)據(jù)用戶(data user, DU).
圖1 云存儲場景
云存儲服務(wù)商擁有大量的計(jì)算資源和足夠的存諸空間提供數(shù)據(jù)存儲服務(wù);數(shù)據(jù)所有者將數(shù)據(jù)存儲在由云存儲服務(wù)商維護(hù)的公有云服務(wù)器中,為了保護(hù)數(shù)據(jù)的機(jī)密性,數(shù)據(jù)所有者對數(shù)據(jù)進(jìn)行分塊,并在外包前用唯一的密鑰對每個塊進(jìn)行對稱加密;數(shù)據(jù)用戶從CSP檢索加密的數(shù)據(jù)塊,并要求數(shù)據(jù)所有者提供相應(yīng)的加密密鑰或密鑰規(guī)則訪問數(shù)據(jù).在這種情況下,加密通常是在塊級進(jìn)行,每個區(qū)塊都由1個唯一的密鑰加密.其結(jié)果需要多個不同的對稱密鑰.因此,本文的目標(biāo)是有效地生成和維護(hù)這些密鑰.本文方案中數(shù)據(jù)所有者負(fù)責(zé)密鑰管理,如密鑰的生成、更新和分發(fā),但只有少量的密鑰信息由DO存儲和維護(hù).其他的密鑰可以有效地即時生成,并被很好地組織,以方便管理.
數(shù)據(jù)加解密的流程如下:
1) 數(shù)據(jù)所有者將明文數(shù)據(jù)加密后發(fā)送到云服務(wù)器存儲并建立索引;
2) 當(dāng)用戶需要請求數(shù)據(jù)訪問時,先向數(shù)據(jù)所有者發(fā)送請求;
3) 數(shù)據(jù)所有者收到請求后,將密鑰派生規(guī)則和輔助信息發(fā)送給用戶;
4) 用戶收到信息后,執(zhí)行相應(yīng)規(guī)則派生密鑰對數(shù)據(jù)進(jìn)行解密,得到明文數(shù)據(jù).
另外,本文方案數(shù)據(jù)塊加解密使用的SM4對稱密碼算法[16]是對稱密碼算法中的迭代分組密碼算法,它將明文劃分為若干個固定長度的組,在密鑰的控制下轉(zhuǎn)換為對應(yīng)的密文分組.其本質(zhì)是從明文空間到密文空間的一一映射,算法過程由加解密和密鑰擴(kuò)展組成,密鑰擴(kuò)展算法與加密算法可共用,資源利用率高,適合數(shù)據(jù)批量加解密場景;加密算法流程和解密算法流程一樣,軟硬件實(shí)現(xiàn)方便.缺點(diǎn)是密鑰管理難度大,對密鑰的依賴性大,密鑰一旦被破解隱患極大.
基于以上云存儲加密的場景和算法,海量用戶需要派生出海量密鑰,如何制定派生方式減少密鑰存儲的開銷,同時確保密鑰的安全是一個亟待解決的問題.若使用哈希樹的方案進(jìn)行存儲,固定的密鑰樹結(jié)構(gòu),當(dāng)密鑰數(shù)量超過容量時,會導(dǎo)致樹的深度加大,密鑰存儲會給服務(wù)器帶來巨大的開銷.
本文設(shè)計(jì)基于矩陣形式的派生密鑰,針對云存儲場景對密鑰樹進(jìn)行優(yōu)化,不需要額外存儲中間密鑰,只需存儲和管理根密鑰以及派生配置矩陣,實(shí)現(xiàn)數(shù)據(jù)密鑰的隨用隨派生,當(dāng)加密密鑰需求量大時,可以減輕存儲負(fù)擔(dān).
在密鑰管理系統(tǒng)(key manage system, KMS)根據(jù)用戶提供的主密鑰和密鑰派生規(guī)則派生出一定數(shù)量的數(shù)據(jù)密鑰后,需要將密鑰分發(fā)給客戶端進(jìn)行加解密操作,在密鑰分發(fā)過程中存在以下安全威脅:
1) 機(jī)密性威脅.雖然在本文方案中默認(rèn)密鑰分發(fā)通道為專有的安全通道,其信息難以被第三方截取,但不能完全保證其安全性,一旦通道被攻擊,會導(dǎo)致密鑰被截獲,嚴(yán)重威脅用戶數(shù)據(jù)的機(jī)密性.
2) 鑒別性威脅.當(dāng)系統(tǒng)規(guī)模擴(kuò)大時,可能涉及分層密鑰管理,有多個密鑰管理中心負(fù)責(zé)密鑰派生,用戶若不能鑒別KMS身份的合法性,則會導(dǎo)致數(shù)據(jù)被非法加密,同時,若KMS不能鑒別請求密鑰的用戶身份,將密鑰分發(fā)給非法用戶,會導(dǎo)致數(shù)據(jù)直接失密,帶來安全威脅.
因此,為了保證密鑰分發(fā)的機(jī)密性和雙方身份的可鑒別性,本文采用SM2非對稱算法實(shí)現(xiàn)門限算法,設(shè)置數(shù)字信封,保證密鑰分發(fā)過程中密鑰的機(jī)密性;并通過SM2門限簽名算法實(shí)現(xiàn)雙方的身份互認(rèn),避免鑒別性威脅.
本文方案的密鑰由私有云上的密鑰管理系統(tǒng)(KMS)管理,KMS負(fù)責(zé)安全、高效和可擴(kuò)展的密鑰管理.所涉及的密鑰體系如圖2所示:
圖2 密鑰分層保護(hù)體系
1) 主密鑰MK.用于保護(hù)用戶密鑰.在密碼機(jī)設(shè)備初始化時生成,規(guī)定數(shù)量的密鑰管理員分別輸入或隨機(jī)生成自己的秘密值,加密機(jī)主密鑰(根密鑰)由3段組件組成,每段組件分成3個成分,每個密鑰成分由不同的人員生成,采用數(shù)字和字母隨機(jī)組合.
2) 用戶密鑰UK.是用戶專用的密鑰,由用戶自選或由系統(tǒng)分配,可用于標(biāo)識用戶身份.
3) 數(shù)據(jù)加密密鑰DK.用于加密明文數(shù)據(jù),不進(jìn)行保存,由用戶密鑰UK隨用隨派生.
密鑰使用流程如圖3所示,密碼機(jī)內(nèi)部的隨機(jī)數(shù)芯片產(chǎn)生指定長度的隨機(jī)數(shù)充當(dāng)KMS根密鑰,并將其存儲于安全芯片內(nèi)部,并返回密鑰的索引;業(yè)務(wù)系統(tǒng)調(diào)用加解密接口,提交服務(wù)至密碼SDK,密碼SDK提供派生規(guī)則,如密鑰的個數(shù)等信息,申請密鑰派生;KMS會對密碼SDK的合法性進(jìn)行驗(yàn)證,驗(yàn)證通過之后,通過基于矩陣的密鑰派生和基于SM2兩方門限密碼算法的數(shù)字信封進(jìn)行密鑰分發(fā).密碼SDK使用派生的密鑰對數(shù)據(jù)進(jìn)行加密,返還給業(yè)務(wù)系統(tǒng)加密結(jié)果.
圖3 密鑰使用流程
在一般的安全云存儲系統(tǒng)中,數(shù)據(jù)訪問層執(zhí)行數(shù)據(jù)加密操作,然后通過應(yīng)用接口層的公有API接口上傳至云存儲管理服務(wù)器,即基礎(chǔ)管理層;基礎(chǔ)管理層提供數(shù)據(jù)分塊存儲、數(shù)據(jù)索引建立、數(shù)據(jù)密文搜索等功能,最后將數(shù)據(jù)密文及其附加信息(一般為元數(shù)據(jù))保存至存儲層;存儲層對傳入數(shù)據(jù)進(jìn)行壓縮、刪冗,從而減少成本,提高存儲空間的利用率[17].
如圖4所示,其中加解密客戶端屬于訪問層,為用戶提供文件的上傳、下載、刪除等基本功能,同時提供訪問權(quán)限控制、數(shù)據(jù)加解密以及完整性檢驗(yàn)等功能.密鑰管理服務(wù)系統(tǒng)KMS是基礎(chǔ)管理層,負(fù)責(zé)客戶端和云端之間的身份認(rèn)證和密鑰管理,其對用戶所存儲數(shù)據(jù)沒有訪問權(quán)限和使用權(quán)限.云端屬于存儲層,提供客戶端文件的分布式管理,并將其存儲到集群存儲服務(wù)器(chunk servers).
圖4 密鑰使用場景
本文假設(shè)在KMS和用戶之間有一個可信的安全通道,KMS使用這個通道向用戶分發(fā)密鑰;KMS和CSP公有云之間的信道以及客戶端和CSP之間的信道是不可信的.對手能夠竊聽或破壞在這些不可信信道上發(fā)送的數(shù)據(jù).
當(dāng)數(shù)據(jù)所有者需要上傳數(shù)據(jù)時,數(shù)據(jù)加密的流程中密鑰使用的步驟如下:
1) 數(shù)據(jù)所有者將數(shù)據(jù)明文和包含密鑰派生規(guī)則的密鑰配置通過安全通道發(fā)送到私有云的加解密客戶端,密鑰配置包括數(shù)據(jù)所有者或用戶的UK、密鑰派生矩陣的行列值、數(shù)據(jù)塊加密索引和訪問權(quán)限列表等信息;
2) 加解密客戶端收到數(shù)據(jù)后,向KMS發(fā)送密鑰配置,請求密鑰;
3) KMS收到請求后,根據(jù)密鑰配置和UK派生出數(shù)據(jù)加密密鑰DK,發(fā)送至加解密客戶端;
4) 加解密客戶端收到DK密鑰后,根據(jù)密鑰和索引加密相應(yīng)的數(shù)據(jù)塊,并使用KMS的公鑰對密鑰配置進(jìn)行加密,將加密后的密文數(shù)據(jù)塊和密文密鑰配置通過公共通道上傳至公有云進(jìn)行存儲.
當(dāng)數(shù)據(jù)用戶需要下載數(shù)據(jù)時,數(shù)據(jù)解密的流程中密鑰使用的步驟如下:
1) 數(shù)據(jù)用戶向客戶端發(fā)送下載訪問某數(shù)據(jù)塊的請求;
2) 客戶端收到請求后,向公有云下載對應(yīng)數(shù)據(jù)的密文,并向KMS發(fā)送對應(yīng)密鑰請求;
3) KMS收到請求后,向公有云下載對應(yīng)的密鑰配置,并用自己的私鑰解密判斷其訪問權(quán)限,通過后根據(jù)解密后的密鑰配置派生出對應(yīng)的密鑰,發(fā)送給加解密客戶端;
4) 客戶端收到密鑰后,用對應(yīng)密鑰解密對應(yīng)密文數(shù)據(jù)塊,將明文規(guī)定通過安全通道發(fā)送給用戶.
在此密鑰使用流程中,密碼配置包括用戶密鑰UK、密鑰派生矩陣的行數(shù)M、列數(shù)N,該用戶數(shù)據(jù)塊總數(shù)量應(yīng)不大于密鑰派生矩陣的行列乘積,從而確保每個數(shù)據(jù)塊擁有不同的密鑰.
密鑰派生矩陣如下:
(1)
該矩陣中,第x行第y列節(jié)點(diǎn)的密鑰值計(jì)算公式為
kx,y=hash_SM3(UK,x‖y),
(2)
其中UK為用戶密鑰,即該派生過程中的根密鑰,x‖y表示該矩陣某位置坐標(biāo)的串聯(lián)運(yùn)算,通過式(2)可以派生出矩陣K所需的所有密鑰,密鑰個數(shù)為M×N,密鑰值互不相同.
本節(jié)結(jié)合門限密碼算法實(shí)現(xiàn)數(shù)字信封,同時實(shí)現(xiàn)隱式數(shù)字簽名,SM2非對稱密碼算法是本文方案的安全基礎(chǔ).門限密碼算法是Shamir[18]基于多項(xiàng)式插值法提出的,在一個(t,n)門限算法方案中,通過構(gòu)造1個t-1次多項(xiàng)式,將需共享的秘密作為該多項(xiàng)式的常數(shù)項(xiàng),將秘密分成n部分分別給n個參與者,t個或以上參與者聯(lián)合可恢復(fù)秘密,但少于t個參與者聯(lián)合則不能得到共享秘密的任何信息.使用門限算法進(jìn)行簽名相比普通簽名的好處是顯而易見的,即密鑰不會在客戶端和KMS端完整出現(xiàn),對于具備攻破用戶終端能力的攻擊者來說,他只能獲取到密鑰的一部分,無法在KMS端不參與的情況下偽造簽名或數(shù)字信封,從而提高簽名和信封的可靠性.
但是,門限算法的實(shí)現(xiàn)往往交互次數(shù)多,過程復(fù)雜,而在云計(jì)算環(huán)境低延遲、少交互的需求下,并沒有優(yōu)勢.因此,本文采用基于SM2的兩方門限密碼算法,即t=2,n=2的(2,2)門限方案,將密鑰拆分成2份,使得任意一方密鑰被竊取的情況下都不會導(dǎo)致密鑰泄露.
本文方案密鑰分發(fā)過程分為以下幾個步驟:
1) 客戶端與KMS交互協(xié)商產(chǎn)生用戶公鑰;
2) KMS通過SM3哈希算法計(jì)算需要分發(fā)的密鑰的摘要值e,并與客戶端合作產(chǎn)生簽名值(r,s);
3) KMS使用用戶的公鑰對密鑰及其摘要值e進(jìn)行加密,產(chǎn)生數(shù)字信封并發(fā)送給客戶端;
4) 客戶端收到信封后,使用自己的私鑰進(jìn)行解密,得到分發(fā)的密鑰及其摘要值e;
5) 客戶端發(fā)起簽名驗(yàn)證,與KMS合作驗(yàn)證該密鑰為KMS發(fā)送的合法密鑰.
其中,用戶公鑰的協(xié)商產(chǎn)生流程如圖5所示,分為以下幾個步驟:
圖5 協(xié)商用戶公鑰流程
1) 用戶登錄客戶端發(fā)起密鑰生成請求,并產(chǎn)生自己的私鑰分量D1;
3) 客戶端收到后,保存密鑰標(biāo)識,計(jì)算完整的公鑰P并公開.
數(shù)字信封的實(shí)現(xiàn)流程如圖6所示,分為以下幾個步驟:
圖6 數(shù)字信封的實(shí)現(xiàn)流程
1) 客戶端和KMS分別輸入各自的私鑰分量D1,D2;
2) 客戶端生成隨機(jī)數(shù)n1,計(jì)算簽名分量Q1發(fā)送給KMS;
3) KMS使用SM3算法計(jì)算需要分發(fā)的密鑰組K的摘要值e,生成隨機(jī)數(shù)n2,n3,利用Q1和摘要值e計(jì)算部分簽名r,然后根據(jù)自己的私鑰分量D2生成s2,s3,將r,s2,s3發(fā)送給客戶端;
4) 客戶端通過計(jì)算得到s,從而得到完整的簽名(r,s);
5) KMS使用公開的用戶公鑰進(jìn)行數(shù)字信封計(jì)算,使用公鑰加密需要分發(fā)的密鑰組K和摘要值e,并將信封發(fā)送給客戶端,完成密鑰分發(fā).
簽名的驗(yàn)證過程同樣需要雙方合作完成,分為以下幾個步驟:
1) 客戶端和KMS分別輸入各自的私鑰分量D1,D2;
2) 客戶端從收到的密文C中提取比特串C1,C=C1‖C2‖C3,‖表示拼接,驗(yàn)證C1是否為橢圓曲線上的非無窮遠(yuǎn)點(diǎn),如果是,則計(jì)算T1=D1C1,將T1發(fā)送至KMS;
4) 客戶端根據(jù)T2計(jì)算出點(diǎn)(x2,y2),并根據(jù)SM2橢圓曲線進(jìn)行驗(yàn)證.
以上流程通過SM2兩方門限密碼算法實(shí)現(xiàn)密鑰分發(fā)的數(shù)字信封.此流程的好處是客戶端和KMS之間的通信不需要專門保護(hù),兩者在簽名過程中完成隱式的身份鑒別,不持有相應(yīng)的私鑰分量無法合作計(jì)算出合法的簽名值,防止了鑒別性威脅;兩者交互發(fā)送的r,s2,s3等數(shù)據(jù),即使明文傳輸被攔截也不會泄露私鑰信息;對需要分發(fā)的密鑰使用數(shù)字信封保護(hù),杜絕了分發(fā)過程中的機(jī)密性威脅.
1) 數(shù)據(jù)安全.對于CSP公有云節(jié)點(diǎn)面臨的攻擊,云端的訪問控制策略可以抵擋一部分攻擊能力較弱的外部攻擊者,若攻擊者通過偽裝等方式繞過訪問控制,竊取了存在云中的數(shù)據(jù),由于數(shù)據(jù)是密文存放,數(shù)據(jù)的密鑰由多種因子聯(lián)合派生,并且不存儲,攻擊者無法在沒有密鑰的情況下,即使得到數(shù)據(jù)也無法獲取其中的機(jī)密明文信息,從而最大程度保障了云中數(shù)據(jù)的安全性和機(jī)密性.
2) 主密鑰安全.主密鑰的安全存儲是整個系統(tǒng)安全性的核心保障.本文方案的主密鑰基于硬件密碼機(jī)生成并負(fù)責(zé)保護(hù).相比軟件保護(hù),硬件實(shí)現(xiàn)了相對獨(dú)立、受控的運(yùn)算環(huán)境,保證了密鑰的安全存儲.一方面,硬件環(huán)境功能單一,不運(yùn)行其他應(yīng)用,具有良好的隔離特性,斷絕了同一環(huán)境中惡意應(yīng)用攻擊的可能性,并且硬件運(yùn)行環(huán)境封閉,僅提供必要的數(shù)據(jù)輸入和輸出,不允許外部控制輸入,從而控制了外部威脅;另一方面,硬件密碼機(jī)配備專門的安全存儲區(qū)域,有額外的空間用于存儲長期密鑰,從而對主密鑰的安全存儲提供了更高的安全性.
3) 數(shù)據(jù)密鑰安全.對于用戶客戶端節(jié)點(diǎn)面臨的攻擊,用戶密鑰對采用SM2(2,2)兩方門限密碼算法生成,僅攻擊用戶端并不能得到完整的密鑰,從而保證了用戶密鑰的安全,進(jìn)一步保障了數(shù)據(jù)密鑰的安全.另外,每個用戶對云上數(shù)據(jù)的訪問權(quán)限不一,即使用戶節(jié)點(diǎn)被完全控制也只能獲取其權(quán)限下的小部分?jǐn)?shù)據(jù),且由于哈希函數(shù)的單向性,通過該用戶節(jié)點(diǎn)的用戶密鑰和數(shù)據(jù)密鑰也無法推導(dǎo)出其他用戶的密鑰信息.
本文實(shí)驗(yàn)使用個人PC端模擬用戶端,用多臺服務(wù)器搭建云環(huán)境模擬不同的云節(jié)點(diǎn),測試配置如表1所示:
表1 測試配置
對比存儲每個加密密鑰的傳統(tǒng)方案,本文方案大大減少了存儲開銷,如表2所示:
表2 存儲開銷對比 b
其中,b為密鑰樹的分支數(shù),d為密鑰樹的深度.可以看出當(dāng)分枝數(shù)目相同時,隨著深度的增加,本文的存儲開銷優(yōu)勢越來越明顯.圖7為本文密鑰派生方案存儲開銷占傳統(tǒng)方案存儲開銷的比重,圖7中走勢與表2中理論一致,隨著樹的深度的增加,其開銷占比減小,直至0.19后趨于穩(wěn)定,因此本文方案相比傳統(tǒng)方案,減少了約65%~80%的存儲開銷.
圖7 存儲開銷占比
在密鑰派生過程中產(chǎn)生的計(jì)算開銷包括密鑰派生I/O和密鑰分發(fā)I/O.
密鑰派生I/O如圖8所示,密鑰派生I/O與密鑰樹的深度有關(guān),深度越深,需要進(jìn)行的摘要計(jì)算次數(shù)越多,因此派生I/O越小.本文方案使用的密鑰派生將樹的深度降為2層,在大幅減少存儲空間的前提下,相比Horus密鑰樹方案,兩者在密鑰深度為2時I/O幾乎相近,但密鑰深度增加后,本文方案帶來一定的派生I/O損耗,但仍在可以接受的范圍內(nèi).
圖8 密鑰派生I/O
密鑰分發(fā)過程主要通過SM2兩方門限密碼算法實(shí)現(xiàn),該算法與普通門限算法的計(jì)算量對比如下:SM2算法計(jì)算過程中的主要開銷來自于橢圓曲線上的基點(diǎn)G的點(diǎn)乘kG和非固定點(diǎn)的點(diǎn)乘kp,對于算法本身而言,kG的計(jì)算比kp快約1個數(shù)量級.如表3所示,假設(shè)KMS服務(wù)端的性能遠(yuǎn)高于客戶端,因?yàn)榭梢院雎苑?wù)端的計(jì)算負(fù)載,在密鑰生成過程中,本文方案的計(jì)算開銷比標(biāo)準(zhǔn)SM2方案約降低了1個數(shù)量級,在數(shù)字信封和簽名過程中也減少一半開銷,在解密和驗(yàn)簽過程中也略有減少.因此,在不考慮網(wǎng)絡(luò)交互損耗的情況下,本文SM2兩方門限密碼算法的密鑰分發(fā)方案相比標(biāo)準(zhǔn)SM2方案,計(jì)算開銷大幅降低.
表3 密鑰分發(fā)開銷對比
為了解決云存儲數(shù)據(jù)加密背景下海量密鑰存儲造成的存儲空間損耗等問題,本文調(diào)研了當(dāng)前密鑰派生方案的優(yōu)缺點(diǎn),分析了公共衛(wèi)生系統(tǒng)云存儲場景的現(xiàn)實(shí)需求,提出了基于矩陣的數(shù)據(jù)密鑰派生方法,減少了密鑰存儲開銷,采用基于SM2的兩方門限密碼算法實(shí)現(xiàn)了門限數(shù)字信封,防止了機(jī)密性威脅和鑒別性威脅,并將其應(yīng)用到實(shí)際場景中,設(shè)計(jì)并實(shí)現(xiàn)了面向云存儲的綜合密鑰管理系統(tǒng).本文方案的優(yōu)點(diǎn)如下:
1) 存儲開銷更低.基于矩陣的密鑰派生方案通過用戶密鑰和密鑰派生矩陣實(shí)現(xiàn)數(shù)據(jù)密鑰的隨用隨派生,云中只需要存儲派生規(guī)則的密文即可,不需要對海量的數(shù)據(jù)密鑰進(jìn)行存儲,比傳統(tǒng)方案減少65%~80%的存儲開銷.
2) 安全性更高.基于SM2兩方門限密碼算法的門限數(shù)字信封使用數(shù)字信封對需要分發(fā)的密鑰進(jìn)行加密保護(hù),防止了機(jī)密性威脅;并使用SM2兩方門限簽名完成隱式的身份鑒別,保證密鑰分發(fā)的合法性,防止了鑒別性威脅;與標(biāo)準(zhǔn)SM2算法相比減少了一定的計(jì)算開銷.
雖然本文方案在密鑰存儲開銷方面有所優(yōu)化,但因減少存儲空間帶來了可接受范圍內(nèi)的派生I/O損耗,以時間換空間.在后續(xù)的研究中,可以優(yōu)化該派生方案,盡量做到空間和時間的平衡,更好地助力云場景下的數(shù)據(jù)存儲與共享.