原文獻:Secure Deduplication with Efficient and Reliable Convergent Key Management算法
Dekey包含三個實體:用戶(Users),存儲雲服務提供商(S-CSP)和密鑰管理雲服務提供商(KM-CSP)安全
僅涉及User和S-CSP(即不須要KM-CSP)。每一個用戶都擁有本身的數據副本加密所對應的摘要密鑰,而後由獨立的主密鑰進一步加密。加密後的摘要密鑰存儲到S-CSP,而主密鑰由用戶維護。併發
具備原始功能的對稱加密方案(\(KeyGen_{SE},Encrypt_{SE},Decrypt_{SE}\))和用於安全參數\(1^{\lambda}\)的用戶的主密鑰\(\kappa = KeyGen_{SE}(1^{\lambda})\);app
具備原始功能的融合加密方案(\(KeyGen_{CE},Encrypt_{CE},Decrypt_{CE},TagGen_{CE}\))性能
用於文件的\(PoW\)算法:\(PoW_F\)和用於塊的:\(PoW_B\)算法(Proof of Ownership,全部權證名)。加密
假設用戶上傳文件F:spa
S1:用戶計算併發送F文件的標籤\(T(F) = TagGen_{CE}(F)\)到S-CSP。指針
S2:S-CSP收到\(T(F)\)後,檢查S-CSP上是否存在相同的標籤。若是存在,S-CSP向用戶回覆「文件重複」,不然回覆「沒有文件重複」。ip
S3:若是用戶收到「沒有文件重複」的響應,則跳轉到S5進行數據塊級重複數據刪除。若是響應是「文件重複」,則用戶在S-CSP上對F運行\(PoW_F\),以證實該用戶是存儲在S-CSP上的相同文件F的全部者.ci
S4:若是\(PoW_F\)經過,則S-CSP只向用戶返回F的文件指針,再也不上傳任何後續信息。若是\(PoW_F\)未經過,則S-CSP停止上傳操做。
S5:針對須要上傳的文件F,利用主密鑰\(\kappa\),用戶執行如下計算:
S6:S-CSP接收到數據塊標籤\({T(B_i)}\)後,計算獲得向量\(\sigma_B\),若是存在某個已存儲數據塊命中了\(T(B_i)\)則存儲\(\sigma_B[i] = 1\),表示數據塊已存在,反之則存儲\(\sigma_B[i] = 0\),表示數據塊不存在。而後,S-CSP將存儲\(\sigma_B\)返回給用戶。
S7:用戶接收到\(\sigma_B\)後,遍歷\(\sigma_B\),若\(\sigma_B[i] = 1\),則對數據塊\(B_i\)執行\(PoW_B\)運算以向S-CSP代表本身是該數據塊的全部者。若是認證經過,S-CSP向用戶發送數據塊\(B_i\)的指針,此時用戶再也不須要發送該數據塊。若認證不經過或\(\sigma_B[i] = 0\),則計算\(C_i = Encrypt_{CE}(K_i,B_i)\),其中摘要密鑰\(K_i=KeyGen_{CE}(B_i)\)。
S8:對於全部數據塊,用戶使用主密鑰和摘要密鑰計算加密的摘要密鑰\({CK_i}\),其中\({CKi} = Encrypt_{SE}(\kappa, K_i)\)。
S9:用戶將全部S-CSP沒有的且加密後的數據塊\({B_i}^{'}\)、\(\sigma_B[i] = 0\)、全部的摘要密鑰\(\{CK_i\}\) 、\(T(F)\)發送到S-CSP,而後將之存儲。
假設用戶想要下載文件F,首先向S-CSP發送請求和文件名,而後執行如下步驟:
S1:收到請求和文件名後,S-CSP將檢查用戶是否有資格下載F。若是沒有資格,S-CSP會向用戶發回停止信號以指示下載失敗。如有則S-CSP將相應的密文\(\{C_i\}\)和加密的摘要密鑰\(\{CK_i\}\)返回給用戶。
S2:用戶從S-CSP接收到加密數據後,首先使用其主密鑰來恢復每一個摘要密鑰\(K_i=Decrypt_{SE}(\kappa,CK_i)\)。而後使用\(K_i\)來恢復原始塊\(B_i=Decrypt_{CE}(K_i,C_i)\)。最後,用戶能夠得到原始文件\(F=\{B_i\}\)。
基線方法有兩個主要問題:
Dekey經過在摘要密鑰中實現重複數據刪除並將摘要密鑰分發到多個KM-CSP,以有效可靠地維護會摘要密鑰。
Dekey在原始摘要密鑰上構建祕密份額,並將這些份額分發到多個KM-CSP。若是多個用戶共享相同的數據塊,則能夠訪問相同的摘要密鑰。這樣顯着減小摘要密鑰的存儲開銷。同時,這種方法提供容錯性能,即便KM-CSP中的的部分字集發生錯誤也可進行正常訪問。
Dekey中的系統設置階段相似於基線方法中的系統設置階段,但涉及到一個額外的步驟:初始化KM-CSP中的密鑰存儲。假設KM-CSP的數量是n。
S1:在輸入安全參數\(1^{\lambda}\)時,用戶初始化收斂加密方案、\(POW_F\)和\(POW_B\)。
S2:S-CSP初始化快速存儲系統和文件存儲系統。
S3:每一個KM-CSP初始化用於數據塊標籤\(T(B_i)\)的快速存儲系統和用於保存摘要密鑰份額的輕量級存儲系統。
設要上傳文件F,用戶和S-CSP執行文件級和數據塊級重複數據刪除。文件級的刪除操做與基線方法相同。若是S-CSP找到文件副本,用戶運行\(POW_F\)向S-CSP證實文件全部權,而後跳過數據塊級重複檢查並跳轉到密鑰分發階段。若是文件不重複,則將執行數據塊級重複數據刪除(與基線方案的S5-S7相同)。最後,S-CSP存儲具備密文\(C_i\)、\(\sigma_B[i]=0\),並將相應數據塊的指針返回給用戶進行本地存儲。
在文件級和塊級重複檢查以後,執行一個稱爲密鑰分發的附加級。與基線方法相反,該階段使Dekey不依賴於每一個用戶保留各自主密鑰,而是在多個KM-CSP之間共享全部摘要密鑰。若是在S-CSP上找到文件副本,則用戶使用第\(j\)個KM-CSP運行\(POW_{F,j}\)來計算文件標籤\(T_j(F)=TagGen_{CE}(F,j)\)證實文件全部權。若是驗證經過,則存儲在第j個KM-CSP上的關於F的分享密鑰將被返回給用戶。
若是沒有找到文件副本,將執行如下步驟:
S1:在輸入文件\(F=\{B_i\}\)上,對於每一個塊\(B_i\),用戶計算併發送塊標籤\(T(B_i)=TagGen_{CE}(B_i)\)到每一個KM-CSP。同時計算文件標籤\(T_j(F)=TagGen_{CE}(F,j)\)併發送到第j個KM-CSP,其中\(1\leqslant j\leqslant n\)。
S2:對於每一個接收的\(T(B_i)\),第j個KM-CSP檢查是否存儲了另外一個相同的標籤.若是是,則在用戶和第j個KM-CSP之間經過\(T_j(B_i)=TagGen_{CE}(B_i,j)\)對數據塊執行\(POW_{B,j}\)。若是認證經過,第j個KM-CSP將爲用戶返回爲摘摘要密鑰\(K_i\)存儲的祕密份額。不然它會保留\(T(B_i)\),併發回一個信號,要求該摘要密鑰上的祕密共享。
S3:收到KM-CSP返回的數據塊\(B_i\)的結果,若是是有效指針,則用戶在本地存儲,若無效則用戶經過\((n,k,r)-RSSS\)來運行\(Share(K_i)\)計算出\(K_{i1},K_{i2} \cdots K_{ik}\),而後用戶經過安全信道發送分享密鑰\(K_{ij}\)和\(T_j(B_i)=TagGen_{CE}(B_i,j)\)到第j個KM-CSP,(\(j=1,2,\cdots,n\))
S4:在接收到\(K_{ij}\)和\(T_j(B_i)\)時,第j個KM-CSP存儲它們並將\(K_{ij}\)的指針發送給用戶以備未來訪問。
要下載文件F,用戶首先按照基線方案中所述從S-CSP下載加密的數據塊\(\{C_i\}\)。而後經過恢復摘要密鑰來解密這些加密的數據塊。
用戶向n個KM-CSP中的k個發送關於文件F的全部數據塊密鑰的指針,獲取每一個數據塊\(B_i\)的共享密鑰\(K_{ij}\)。在收集全部共享以後,用戶經過\(K_i = Recover(\{K_{ij}\})\)重建數據塊\(B_i\)的摘要密鑰。最後,經過\(\{C_i\}\)和\(\{K_i\}\)計算得到原始文件F。