原文献:Secure Deduplication with Efficient and Reliable Convergent Key Management
Dekey包含三个实体:用户(Users),存储云服务提供商(S-CSP)和密钥管理云服务提供商(KM-CSP)
- 用户:将数据存储到S-CSP并且稍后访问。假设用户只上传S-CSP中没有的数据,且仅上传一次。
- S-CSP:为用户存储数据。通过数据重删消除了冗余数据的存储,并保留了唯一的数据。
- KM-CSP:为用户提供摘要密钥,同时为用户提供最少的存储和计算服务,方便密钥管理。每个摘要密钥使用RSSS分布在多个KM-CSP上。
基线方法
仅涉及User和S-CSP(即不需要KM-CSP)。每个用户都拥有自己的数据副本加密所对应的摘要密钥,然后由独立的主密钥进一步加密。加密后的摘要密钥存储到S-CSP,而主密钥由用户维护。
系统设置
S1:初始化以下实体
具有原始功能的对称加密方案(\(KeyGen_{SE},Encrypt_{SE},Decrypt_{SE}\))和用于安全参数\(1^{\lambda}\)的用户的主密钥\(\kappa = KeyGen_{SE}(1^{\lambda})\);
具有原始功能的融合加密方案(\(KeyGen_{CE},Encrypt_{CE},Decrypt_{CE},TagGen_{CE}\))
用于文件的\(PoW\)算法:\(PoW_F\)和用于块的:\(PoW_B\)算法(Proof of Ownership,所有权证名)。
S2:S-CSP初始化两种类型的存储系统
- 有效重复检查的快速存储系统
- 用于存储加密数据副本和加密的摘要密钥的文件存储系统。
文件上传
假设用户上传文件F:
1. 执行文件级重复数据删除
S1:用户计算并发送F文件的标签\(T(F) = TagGen_{CE}(F)\)到S-CSP。
S2:S-CSP收到\(T(F)\)后,检查S-CSP上是否存在相同的标签。如果存在,S-CSP向用户回复“文件重复”,否则回复“没有文件重复”。
S3:如果用户收到“没有文件重复”的响应,则跳转到S5进行数据块级重复数据删除。如果响应是“文件重复”,则用户在S-CSP上对F运行\(PoW_F\),以证明该用户是存储在S-CSP上的相同文件F的所有者.
S4:如果\(PoW_F\)通过,则S-CSP只向用户返回F的文件指针,不再上传任何后续信息。如果\(PoW_F\)未通过,则S-CSP中止上传操作。
2. 用户执行数据块级重复数据删除,以消除冗余块。
S5:针对需要上传的文件F,利用主密钥\(\kappa\),用户执行以下计算:
- 将F分成一组数据块\({B_i}\)(其中\(i 1/4 1; 2; ...)\)
- 对于每个块\(B_i\),计算块标签\(T(B_i)=TagGen_{CE}(B_i)\);
- 将块标签\({T(B_i)}\)发送到S-CSP以进行数据块重复检查。
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\}\)。
限制
基线方法有两个主要问题:
- 密钥管理中巨大的存储开销。特别地,每个用户必须将摘要密钥与他拥有的每个数据副本相关联,并且用他自己的主密钥加密所有的摘要密钥。由于不同用户使用不同的主密钥,不同用户加密的摘要密钥(即CKi)互不相同。因此,摘要密钥的数量随着存储的唯一数据副本的数量和用户的数量而线性增加,导致了大量的存储开销。
- 主密钥可能出现单点错误,需要由用户可靠地维护。
Dekey
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。