抗入侵云存储审计协议
云计算中的数据存储抗入侵的公共审计协议
摘要
云存储审计是一种关键服务,可为存储在云服务器上的客户数据提供完整性检查。然而,如果客户端的审计密钥被暴露,恶意云服务器便可篡改甚至删除客户数据而不会被发现。本文提出了一种抗入侵的公共审计协议,能够减轻密钥泄露造成的损害。在我们的协议中,审计密钥由客户端管理,并在第三方审计员(TPA)的协助下进行更新,而TPA无法计算出客户端的审计密钥。该协议将文件在云上存储的生命周期划分为多个时间段,每个时间段又进一步划分为若干刷新周期。我们证明,只要客户端和TPA在不同的刷新周期内被攻击者攻破,本协议便能抵御攻击者,实现安全性(即具备后向安全和前向安全)。即使客户端和TPA在同一刷新周期内被攻破,该协议仍能保持前向安全。
关键词 : 密钥泄露 · Intrusion-resilient · 云计算 云存储审计
1 引言
云存储吸引了许多个人和企业将数据存放在云服务器上。然而,在将数据上传到云服务器后,客户端通常会删除本地存储的数据。因此,云服务器上的数据是否得到良好保存成为一个重要的安全性问题,即数据完整性问题。
2007年,Ateniese 等人首次提出PDP(可证明数据持有),旨在确保存储在不可信服务器上的数据的持有性 [1]。该方案利用随机抽样和同态线性认证器(HLA)的方法,能够验证外包数据的完整性。Juels 等人提出了可恢复性证明(PoR)[8]。通过抽查和纠错码技术,PoR不仅能确保数据的持有性,还能确保数据可恢复性。Shacham 和 Waters[10]提出了一个改进的PoR,该方案能够支持无状态验证。在过去的几年中,关于审计的不同领域得到了研究,例如数据动态问题[13,21],客户数据隐私保护问题[12,14],数据共享[11,20],以及云数据多副本[2,4]。近年来,已提出了若干抗密钥泄露的云存储审计协议[15–17]。如果恶意云服务器获得了客户端的密钥,它可能会隐藏客户数据的丢失以维持其声誉,甚至为了节省存储空间而故意删除那些很少被访问的数据。因此,研究抗密钥泄露的云存储审计协议是必要的。
Yu et al.[16]首次研究了密钥泄露可抵御的云存储审计协议,该协议将存储在云服务器上的文件生命周期划分为离散的时间段。客户端审计密钥用于生成文件的审计认证器,并在每个时间段内进行密钥更新,从而保证了审计密钥的前向安全[16]。2016年,提出了一种将密钥更新外包给TPA的协议,降低了客户端的计算开销[15]。然而,在[15,16]中,客户端自行更新其审计密钥。如果客户端被攻击者攻破,攻击者可以在密钥暴露后继续更新审计密钥,并在密钥暴露的时间段之后伪造文件认证器,即这些协议[15,16]无法实现审计密钥的后向安全。
2017年,Yu 和 Wang [17]提出了一种强抗密钥泄露审计协议,该协议不仅保持了审计密钥的前向安全,还保持了后向安全。在他们的协议中,用于更新审计密钥的密值被分为两部分,一部分交给TPA,另一部分由客户端自身保留。因此,TPA除了提供类似于[16]的审计服务外,还新增了一项任务,即协助客户端更新其审计密钥。需要注意的是,由于TPA不知道客户端的私有部分,因此无法单独计算出审计密钥。如果仅客户端被攻破,攻击者也无法计算出审计密钥,因为它无法获得由TPA的私有部分生成的更新令牌。然而,在该协议中,TPA和客户端各自持有的密值部分是不可更改的。因此,只要在审计协议的生命周期内攻击者同时攻破了客户端和TPA,就能在不被发现的情况下更新所有时间段的审计密钥。
1.1 我们的贡献
我们发现,如果攻击者能够同时攻破客户端和TPA,则文献中提出的任何审计协议都不安全。因此,在本文中,我们提出了一种抗入侵的公共审计协议以解决这一安全性问题。该协议能够在客户端和TPA于不同的刷新周期被攻破的情况下,仍然保持审计安全性。所提协议将每个时间段划分为多个刷新周期。在每个时间段内,TPA和客户端执行一次密钥更新算法,以更新审计密钥,该密钥用于计算下一时间段文件的审计认证器。与协议 [17], 不同,TPA和客户端执行一次
在每个更新时段使用时间密钥更新算法来更新TPA和客户端的密钥部分,该部分用于更新审计密钥。密钥更新算法使我们的协议避免了[17]中的问题。本文的主要贡献如下:
-
我们提出了一种抗入侵的公共审计协议,其中用于更新审计密钥的密值也被分为两部分,一部分交给TPA,另一部分由客户端自身保存。在每个刷新周期中,我们选择一个随机数,然后TPA和客户端根据该随机数相应地刷新其密钥部分:一方将其密钥部分乘以该随机数,另一方则将其密钥部分除以该随机数。在同一个刷新周期内,客户端和TPA的密钥部分可联合恢复出该密值。如果攻击者分别在不同的刷新周期内攻陷了客户端和TPA,则除了客户端被攻陷的那个刷新周期外,无法获得其他时段的审计密钥。因此,所提协议进一步减轻了密钥泄露对云存储审计造成的危害。
-
我们为所提协议给出了形式化的定义和安全性模型。在安全模型中,攻击者可以查询除一个未暴露时间段外所有时间段的密钥更新令牌、密钥刷新令牌以及客户端和TPA的密钥。通过数值分析对计算开销和通信开销进行了分析。
本文的其余部分组织如下:我们在第2节中给出系统模型、协议定义、安全模型和预备知识。具体协议在第3节中详细阐述。安全性证明和性能分析分别在第4和5节中展示。最后,本文的结论在第6节中给出。
2 定义与预备知识
2.1 系统模型

图1中的抗入侵云存储审计系统包含三方:云服务器、客户端和TPA。云服务器为客户端提供存储服务和数据访问。客户端可以计算文件的认证器,将认证器和文件上传至云服务器,并从自身的存储空间中删除相应的数据。TPA是由政府管理的可信组织,在该系统中扮演两个角色:一是为客户提供公正的审计服务,二是正确协助客户更新其审计密钥。与以往的研究类似,TPA在为客户提供的审计服务中是诚实的。此外,我们假设TPA在协助客户更新密钥时也是可信的。
2.2 抗入侵公共审计协议定义 l
在所提出的协议中,每个时间段 t被划分为 RN(t) 个刷新周期,标记为 r,即 r ∈[0, RN(t) −1]。根据先前的工作,密钥更新算法在密钥生成后立即执行,而密钥更新算法在密钥更新后立即执行,从而确保带有 t= 0或 r= 0的密钥永远不会被使用。所提出的协议由以下六个算法组成:
(1) SysSetup(1k, T) →(SKC0.0, SKT0.0, P K):系统设置算法是概率性的,由客户端运行该算法。输入为安全性参数 1k和时间周期数 T。输出为客户端的初始密钥 SKC0.0、TPA的初步密钥 SKT0.0以及公钥PK。
(2) KeyUpd(SKTt.r, SKCt.r, P K, t) →(SKTt+1.0, SKCt+1.0):密钥更新算法是概率性的。TPA 和客户端交互运行该算法。输入为 TPA的私钥 SKTt.r、客户端的私钥 SKCt.r、公钥 PK 和时间段 t。具体而言,TPA 生成更新令牌 T Ut 以帮助客户端更新其密钥。输出为下一时间段的 TPA的私钥 SKTt+1.0 和客户端的私钥 SKCt+1.0。
(3) KeyRef(SKTt.r, SKCt.r, P K, t) →(SKTt.r+1, SKCt.r+1):密钥更新算法是概率性的。TPA 和客户端交互式地运行此算法。输入为 TPA的私钥 SKTt.r、客户端的私钥 SKCt.r、公钥 PK 和时间段 t。具体而言,TPA 生成密钥刷新令牌 TRt.r,以帮助客户端刷新其密钥。输出为下一刷新周期的 TPA的私钥 SKTt.r+1 和客户端的私钥 SKCt.r+1。(4) AuthGen(SKCt.r, P K, F, t) →(Φ):认证器生成算法是概率性的,由客户端运行该算法。输入为客户端的私钥 SKCt.r、将存储在云服务器上的文件 F、公钥 PK,以及时间段 t。输出为文件 F 在时间段 t 内的认证器集合 Φ。
(5) ProofGen(Chal, F,Φ, P K, t) →(P):存储证明生成算法是概率性的,由云服务器运行该算法。输入为TPA发出的挑战 Chal、文件 F、认证器集合 Φ、 公钥PK和时间段 t。输出为关于拥有文件 F的证明P P。
(6) 证明验证(P, Chal, P K, t) →(‘’T’‘or’‘F’‘):TPA 运行此确定性证明验证算法。输入为证明 P、挑战 Chal、公钥PK和时间段 t。输出为 ‘’真’‘或 ‘’假’‘。
2.3 安全性定义
与[5]类似。我们使用SKC∗、 SKT∗、 T U∗、 T R∗分别表示客户端在所有时间段内的密钥、TPA的密钥、密钥更新令牌和密钥刷新令牌。存储在云服务器中的文件 F被划分为 n个数据块mi(i= 1,···, n)。概率多项式时间对手可能窃取这些消息,因此预言机如下所示。
– 认证器预言机。输入时间段 t 中文件 F 的某个数据块 mi,该预言机输出数据块 mi 的认证器。– Osec。这是一个密钥泄露预言机,基于 SKC∗, SKT∗, T U∗, T R∗。攻击者输入(‘’s’‘, t.r)、(‘’b’‘, t.r)、(‘’u’‘, t)、(‘’r’‘, t.r),然后分别获得 SKCt.r、 SKTt.r、 TUt 以及 TRt+1.0、 TRt.r ,如下所示。
- 输入(‘’s’‘, t.r),得到 SKCt.r;
- 输入(‘’b’‘, t.r), 得到 SKTt.r;
- 输入(‘’u’‘, t),得到 T Ut和 T Rt+1.0;
- 输入(‘’r’‘, t.r),得到 T Rt.r。
客户端或TPA被攻陷以及获取密钥更新或刷新令牌的情况包含在该预言机的查询中。
假设 Q 是一组密钥查询,我们定义当至少发生以下情况之一时, SKCt.r 为 Q − exposed。
(1) (‘’s’‘, t.r) ∈ Q
(2) r> 1,(‘’r’‘, t.(r −1)) ∈ Q,且 SKCt.r−1是 Q− exposed
(3) r= 1,(‘’u’‘, t −1) ∈ Q,且 SKC(t−1).RN(t−1)是 Q− exposed
如果 SKCt.r 是 Q − exposed,则在时间段 t 内对文件 F 的认证器可以被伪造。当 SKTt.r 和 SKCt.r 同时为 Q − exposed 时,攻击者可以自行执行密钥更新和密钥刷新算法,并在每个时间段 t ′ > t 内伪造文件 F 的认证器。因此,我们说当 SKCt.r 是 Q− exposed 或 SKTt ′ .r 和 SKCt ′ .r 同时为 Q− exposed(其中 t′< t)时,所提协议是 (t, Q) −compromised。
以下游戏描述了一个针对入侵可抵抗云存储审计协议安全性的攻击者。如果该攻击者能够伪造文件 F在时间周期 t∗中某个数据块 mii= 1,···, n的认证器,且既不是协议(t∗, Q) − compromised,也未执行对mi的认证器查询,则称该攻击者成功。该游戏包含以下阶段:
(1) 设置阶段。挑战者设置 t= 0并执行系统初始化算法以获得客户端的私钥 SKC0.0、TPA密钥 SKT0.0以及 PK。挑战者向攻击者发送公钥 PK。
(2) 查询阶段。我们允许攻击者自适应地查询T U∗、 SKT∗、 SKC∗、 T R∗和认证器。设当前时间段为 t。
a) Osec查询。攻击者可以自适应地查询在时间段 t内的客户端密钥、TPA密钥、更新令牌、刷新令牌,并进行Osec查询。挑战者向攻击者发送相应的秘密信息。
b) 认证器查询。攻击者可以选择一系列数据块m1、 m2、 ···、 mn并将其发送给挑战者。挑战者计算这些数据块在时间段 t内的认证器,并将这些认证器发送给攻击者。攻击者存储文件FF=(m1, m2,···, mn)的所有数据块及其认证器。随后,令当前时间段为 t:= t+1。在每个时间段结束前,允许攻击者继续此查询阶段或进入下一阶段。
(3) 挑战阶段。挑战者选择时间段 t∗,所提协议在 t∗中不是(t∗, Q) − compromised,且 Chal={i, vi}i∈I( I={s1, s2,···, sc}, 1 ≤sl ≤ n, 1 ≤ l ≤ c, 1 ≤ c ≤ n)。挑战者向攻击者发送 Chal,并要求其提供关于文件F F=(m1, m2,···, mn)在时间段 t∗内针对数据块 ms1、 ms2、···、 msc的证明PChal。
(4) 伪造阶段。攻击者在时间段 t∗ 生成一个针对 Chal中数据块的证明P P 。攻击者将 P发送给挑战者,由挑战者进行验证。如果证明验证(ProofVerify)(P, Chal, P K, t∗)输出 ‘’真’‘,则称攻击者获胜。
只要所提协议不是(t, Q) −compromised,攻击者在不拥有 Chal指示的所有数据块的情况下,无法在时间段 t内伪造出有效的持有证明,除非其解出了所有缺失的数据块。我们允许攻击者查询文件 F在所有时间段内所有数据块的认证器。此外,只要不使所提协议成为(t∗, Q)−compromised,攻击者可以自适应地查询集合SKC∗, SKT∗, T U∗, T R∗中所有时间段的密文消息。攻击者的目标是在时间段 t∗内为 Chal中的数据块伪造一个有效的持有证明 P。以下定义表明, 如果攻击者在时间段 t∗内的证明是有效的,则我们可以使用知识提取器提取出被挑战的文件数据块。
定义1(抗入侵审计) 。当满足以下条件时,我们称云存储的审计协议是抗入侵的:在上述游戏中,挑战者以一定概率接受攻击者的证明时
是不可忽略的,那么除了可能以可忽略的概率外,我们能够找到一个知识提取器,该知识提取器能够提取所有被挑战的文件块。
以下定义展示了所提出的审计协议的可检测性。它确保云以高概率存储未被挑战的数据块。
定义2(可检测性) 。如果在存在 q 比例的坏块时,以至少 p 的概率检测到坏块,则该抗入侵审计协议是(q,p)可检测的 (0< q,p< 1)。
2.4 预备知识
(1) 双线性映射:G1和 G2是两个具有素数阶 q的乘法循环群。如果eˆ: G1 × G1 → G2满足以下条件,则称其为双线性映射:
(a) 双线性:对任意 ∀g1, g2 ∈ G1和 ∀a, b ∈ Z∗ q,有eˆ(g1a, gb 2)=eˆ(g1, g2) ab。
(b) 非退化性:若 g1, g2是 G1中的生成元,则eˆ(g1, g2) = 1。
(c) 可计算性:eˆ(g1, g2)可通过高效算法计算。
(2) CDH问题:给定(g, ga, gb),计算 gab,其中 a, b ∈ Z∗ q且 g是阶为 q的乘法群 G1中的生成元。
3 提出的协议
3.1 技术说明
在本节中,我们首先给出时间段的表示,其次解释关于时间段和密钥的符号,最后描述TPA与客户端之间的密钥更新过程。
时间段表示 。类似于[3,6,7,18,19],,我们利用深度为 l+ 1的完全二叉树结构,并将存储在云服务器上的文件 F的生命周期划分为从0到 T −1的 T= 2l个离散时间段。每个时间段 t进一步划分为 RN(t)个刷新周期,用 r标记。当 t1= t2且 r1= r2时,我们设 t1.r1= t2.r2;当 t1< t2或当 t1= t2且 r1< r2时,设 t1.r1< t2.r2,如图2所示。时间段从最左侧到最右侧依次对应于二叉树的叶节点。二叉树的节点用二进制字符串 ω标记,为简化起见,我们将标签为 ω的节点称为 ‘’节点 ω’‘。非叶节点 ω的左子节点和右子节点分别用二进制字符串 ω0和 ω1表示。节点 〈t〉是对应于时间段 t的叶节点, 〈t〉是一个长度为 l的二进制字符串。

符号说明 。在二叉树中,每个叶节点 〈t〉有一个密值 S〈t〉 ∈ G1,而 S〈t〉是客户端在时间段 t的审计密钥。每个非叶节点 ω有两个值 Rω和 Sω ∈ G1。 Rω是用于验证文件认证器的验证值, Sω是用于计算其子节点密值的密值。当节点 ω为根节点且标记为空字符串 ε时,我们有 Sε= 1。对于每个节点 ω,我们定义三个集合 θ(β, ω)、 ϕ(ω)和Ωβ,ω。集合 θ(β, ω)包含从节点 ω到 β路径上 ω的祖先,集合 ϕ(ω)包含从根节点到节点 ω路径上各节点的右兄弟。集合Ωβ, ω={Rπ|π ∈ θ(β, ω)}包含集合 θ(β, ω)中每个节点的验证值。如果 β是根节点,则 θ(β, ω)和Ωβ,ω分别取为θ(ω)和 Ωω。对于每个叶节点 〈t〉,,我们额外定义一个集合Sec〈t〉={Sω|ω ∈ ϕ(〈t〉)},它包含集合ϕ(〈t〉)中每个节点的密值。集合Sec〈t〉用于计算下一时间段的审计密钥 S〈t+1〉。Sec〈t〉中的每个值Sω被分为两部分,即 Sω= S ′ ω · S ′′ ω,和Sec′ 〈t〉={S′ ω|ω ∈ ϕ(〈t〉)},Sec′′ 〈t〉={S′′ ω|ω ∈ ϕ(〈t〉)}。TPA在时间段′ t的私钥是SKTt.r=Sec〈t〉,客户端在时间段 t的私钥是 SKCt.r={S〈t〉,Ω〈t〉,Sec′′ 〈t〉}。这些符号总结于表1。

图3给出了一个示例来解释一些符号。在此示例中,二叉树的深度为4,且 l= 3,因此时间段 T的数量为8,从0到7。我们将根节点的左子节点标记为二进制字符串 ω= 0,节点0的左子节点标记为 ω0= 00,右子节点标记为 ω1= 01。节点0有两个值 R0、 S0,且 S0用于计算秘密值 S00和 S01。
叶节点000的值为 S000,即客户端在时间段0的审计密钥。同时,节点000包含四个集合 θ(β, 000)Ωβ,000,ϕ(000), Sec000。我们有 ϕ(000) ={节点1、节点01、节点 001}、 Sec000={S1, S01 S001}。如果节点 β是根节点 ε,则集合 θ(β, 000) = θ(000) ={节点 ε、 节点0、节点 00}以及Ωβ,000=Ω000={Rε, R0, R00}。在时间段0,客户端的密钥为 SKC0.r={S000,Ω000,Sec′′ 〈0〉={S1′′, S01′′, S001′′},TPA的私钥为 SKT0.r= Sec′ 000,,其中Sec′ 000={S1′, S01′, S001′}。Sec′中的秘密值S1, S01, S001分别为 Sec000′′ ′ ′′ ′ ′′ ′ ′′和Sec000 ,中对应因子 的乘积,即 S1= S1 · S1,S01= S01 · S01, S001= S001 · S001。
密钥更新 。 在时间段 t结束时的密钥更新可描述如下。假设客户端的私钥为 SKCt.r={S〈t〉 ,Ω〈t〉 ,Sec′′ 〈t〉} ,,TPA的私钥为 SKTt.r= Sec′ 〈t〉。我们有 〈t〉= t1t2 ··· tl,,并且密钥更新根据二进制位 tl的值执行。
| 符号 | 含义 |
|---|---|
| SKTt.r | 时间段 t 内经过 r 次更新后的 TPA密钥 |
| SKCt.r | 客户端在时间段 t 经过 r 次刷新后的密值 |
| T Ut | TPA在时间段 t结束时生成的密钥更新令牌 |
| T Rt.r | TPA在(r+1) − th刷新后生成的密钥刷新令牌 |
| T | 总时间段数 |
| ω | 标记二叉树节点的二进制字符串 |
| ω0 | 标记节点 ω左子节点的二进制字符串 |
| ω1 | 标记节点 ω右子节点的二进制字符串 |
| 〈t〉 | 对应时间段 t 的叶节点的二进制字符串 |
| Rω | 二进制字符串为 ω 的树节点的验证值 |
| Sω | 树节点 ω 的密值 |
| Ω〈t〉 | 从根节点到叶节点 〈t〉 的路径上所有树节点的验证值集合 |
| ϕ(〈t〉) | 从根节点到叶节点 〈t〉 的路径上各节点的右兄弟的集合 |
| Sec〈t〉 | ϕ(〈t〉)中节点的密值集合 |
| θ(β, ω) | 节点 ω在从节点 β到 ω的路径上的祖先集合 |
| 在情况 tl= 0下,节点 〈t〉是一个左叶节点,节点 〈t+ 1〉是节点 〈t〉,的右兄弟,即 〈t+ 1〉= t1t2 ··· tl−11。因此,TPA可以在集合Sec′〈t〉,中找到 S〈′t+1〉,客户端可以在集合Sec′〈′t〉中找到 S〈′′t+1〉。TPA设置密钥更新令牌 T U〈t〉={S〈′t+1〉},并将 T U〈t〉发送给客户端。客户端收到 T U〈t〉后,计算出 S〈t+1〉= S〈′t+1〉 · S〈′′t+1〉,,即时间段′周期 t+ 1中的审计密钥。在时间段 t+ 1, TPA的私钥为SKTt+1.0= Sec〈t+1〉,客户端的私钥为 SKCt+1.0={S〈t+1〉,Ω〈t+1〉,Sec′〈′t+1〉},,其中Sec′〈t+1〉= Sec′〈t〉{S 〈′t+1〉}且 Sec′〈′t+1〉= Sec′〈′t〉{S 〈′′t+1〉}。由于节点 〈t+ 1〉是节点 〈t〉,的右兄弟,在时间段 t+1内的验证值集合不发生变化,即Ω〈t+1〉=Ω〈t〉。 |
在情况 tl= 1下,节点 〈t〉是右叶节点,节点 〈t+ 1〉是左叶节点。TPA获得满足 ti= 0的最大值 i,则节点 〈t〉和 〈t+ 1〉的最近公共祖先为节点 t1t2 ··· ti−1。节点 β= t1t2 ··· ti−10是节点 t1t2 ··· ti−1的左子节点,而节点 ω= t1t2 ··· ti−11是右子节点。因此,TPA和客户端可分别找到S′ ω ∈ Sec′ 〈t〉, S′′ ω ∈Sec′′ 〈t〉。TPA为时间段 t+ 1设置其密钥Sec′ 〈t+1〉= Sec′ 〈t〉{S ′ ω},客户端设置Sec′′ 〈t+1〉= Sec′′ 〈t〉{S ′′ ω}。然后,客户端与TPA协作,按照以下三个步骤计算时间段 t+ 1的密钥信息。
(a). 对于集合 θ(ω,〈t+ 1〉) 中的每个节点 π,TPA 随机选择 ρ′ π ∈ Z∗ q。然后,TPA 计算节点 π 的验证值部分 R ′ π= gρ′ π,左子节点的′密值部分 S ′ π0= S′ π · H1(π0)ρπ和右子节点的密值部分S ′ π1= S′ π · H1(π1) ρ′ π。TPA 然后设置 Sec′ 〈t+1〉= Sec′ 〈t+1〉 ∪{S′ π1}。当节点 π 是节点 〈t+ 1〉, 的父节点时,TPA 获得其在时间段 t+ 1 的密值部分 S ′ 〈t+1〉= S′ π0。对于集合 θ(ω,〈t+ 1〉) 中的每个节点 π,客户端随机选择 ρ ′′ π ∈ Z∗ q。然后,客户端计算节点 π 的验证值部分 R ′′ π= g ρ′′ π,左′′子节点的密值部分 S ′′ π0= S′′ π · H1(π0) ρ π和右子节点的密值部分 S ′′ π1= S′′ π · H1 (π1)ρ′′ π。客户端然后设置 Sec′′ 〈t+1〉= Sec′′ 〈t+1〉 ∪{S′′ π1}。当节点 π 是节点 〈t+ 1〉, 的父节点时,客户端获得其在时间段 t+ 1 的密值部分 S ′′ 〈t+1〉= S′′ π0。
(b). TPA 在时间段 t+ 1 获取其密钥 SKTt+1.0= Sec′ 〈t+1〉 和验证值部分集合 Ω′ ω,〈t+1〉 ={R′ π|π ∈ θ(ω,〈t+ 1〉)},其中 θ(ω,〈t+ 1〉) 包含从节点 ω 到 〈t+ 1〉 的路径上节点 〈t+ 1〉 的祖先。最后,TPA 设置密钥更新令牌 T U〈t〉={S′ 〈t+1〉 ,Ω′ ω,〈t+1〉} 并将 T U〈t〉 发送给客户端。在收到T U〈t〉后,客户端从集合 Ω ′ ω,〈t+1〉 中获取 R ′ π ,并为 π ∈ θ(ω,〈t+ 1〉) 计算验证值 Rπ= R ′ π · R ′′ π。然后客户端设置验证值集合 Ω〈t〉= Ω〈t〉 ∪{Rπ}。由于 θ(β,〈t〉)在时间段 t+ 1内未被使用,因此应移除验证值集合Ωβ,〈t〉,其中节点 β是节点 ω的左兄弟节点。最后,客户端得到 Ω〈t+1〉=Ω〈t〉\Ωβ,〈t〉,其中 Ω〈t+1〉是从根节点到节点 〈t+ 1〉的路径上各节点的验证值集合。
(c). 客户端计算叶节点〈t+ 1〉 的审计密钥 S〈t+1〉= S〈′t+1〉 · S〈′′t+1〉。因此,客户端在时间段 t+ 1 的密钥为 SKCt+1.0={S〈t+1〉, Ω〈t+1〉,Sec′〈′t+1〉}。最后,TPA 和客户端删除密钥更新令牌 T U〈t+1〉、在步骤 b中生成的左子节点的所有随机值和秘密值部分。
3.2 所提协议的描述
与先前的审计协议类似,我们采用数字签名来计算文件F的唯一标识符、验证值集合和时间段t的文件标签。客户端将文件F划分为数据块m1, m2, …, mn。提出的协议包含以下六个算法:
(1) SysSetup。输入为时间段数量 T和安全性参数k。(a) 客户端获得两个阶均为素数q的循环群 G1, G2,以及双线性配对eˆ: G1 × G1 → G2。然后,它选择生成元 g, u ∈ G1和两个密码学哈希函数 H1: {0, 1}∗ →G1, H2: {0, 1}∗ × G1 → G1。客户端设置公钥 PK=(G1, G2, H1, H2, eˆ, g, u)。(b) 对于集合 θ(〈0〉)中的每个节点 π,客户端随机选择ρπ ∈ Z∗ q。然后,客户端计算节点 π的验证值 Rπ= gρπ、左子节点的密值 Sπ0= Sπ · H1(π0) ρπ和右子节点的密值Sπ1= Sπ · H1(π1) ρπ。注意到当节点 π为根节点时, Sπ= 1。当节点 π是节点 〈0〉,的父节点时,客户端获得时间段0的审计密钥 S〈0〉= Sπ0。(c) 客户端获取其验证值集合Ω〈0〉={Rπ|π ∈ θ(〈0〉)},其中 θ(〈0〉)包含从节点 〈0〉到根节点的祖先。然后客户端设置Sec〈0〉={Sπ|π ∈ ϕ(〈0〉)},该值用于计算下一个时间段的秘密值。 ϕ(〈0〉)包含从根节点到节点 〈0〉路径上每个节点的右兄弟。(d) 对于集合 ϕ(〈0〉)中的每个节点 ω ,客户端随机选择满足Sω= S′ ω ·S′′ ω,的S′ ω和S′′ ω,然后设置Sec′ 〈0〉={S′ ω|ω ∈ ϕ(〈0〉)},Sec′′ 〈0〉={S′′ ω|ω ∈ ϕ(〈0〉)}。在时间段0,TPA的密钥为SKT0.0= Sec〈0〉,客户端的私钥为 SKC0.0={S〈0〉,Ω〈0〉,Sec′′ 〈0〉}。 S〈0〉是当前时间段用于在AuthGen算法中生成文件审计认证器的审计密钥。集合 Ω〈0〉用于在证明验证算法中验证文件认证器。集合Sec〈0〉 ′′和Sec〈0〉用于计算密值,以更新下一时间段的审计密钥。客户端将 SKT0.0秘密发送给TPA,然后删除除 SKC0.0之外的所有值。
(2) 密钥更新。输入为密钥 SKTt.(RN(t)−1), SKCt.(RN(t)−1)、公钥PK和时间段 t。t.(RN(t) −1) 表示客户端和TPA的密钥处于时间段 t的最后一次刷新周期内。密钥更新过程与第3.1节中描述的密钥更新相同。
(3) 密钥刷新。输入在时间段 t 内已被刷新 r 次的密钥 SKTt.r, SKCt.r,公钥 PK 和时间段 t。 SKTt.r= Sec〈t〉={S′ ω|ω ∈ ϕ(〈t〉)} 是 TPA 的私钥。客户端的私钥是 SKCt.r={S〈t〉,Ω〈t〉,Sec′〈′t〉},,其中 Sec′〈′t〉={S′′ ω|ω ∈ ϕ(〈t〉)}。
(a) 对于每个节点 ω ∈ ϕ(〈t〉),TPA随机选择 Xω ∈ G1并设置S′ ω: = S′ ω · Xω。然后TPA的私钥为 SKTt.r+1={S′ ω|ω ∈ ϕ(〈t〉)},密钥更新令牌为 T Rt.r={Xω|ω ∈ ϕ(t)}。TPA随后将 T Rt.r发送给客户端。在收到密钥更新令牌 TRt.r 后,客户端为每个节点( )计算 S′′ ω: = S′′ ω · X−1 ω ∈ ϕ 〈t〉 。客户端下一刷新周期的新密钥为 SKCt.r+1={S〈t〉,Ω〈t〉,Sec′′ 〈t〉},,其中密值集合为 Sec′′ 〈t〉={S′′ ω|ω ∈ ϕ(〈t〉)}。
(b) TPA 和客户端从本地删除 T Rt.r。
(4) 认证生成。输入为当前时间段 t、客户端的私钥 SKCt.r={S〈t〉, Ω〈t〉,Sec′′ 〈t〉},、将在时间段 t 上传至云的文件 F={m1, m2,···, mn},以及公钥 PK。
(a) 客户端随机选择 name ∈ Z∗ q作为F的唯一标识符,并使用签名算法 SSig计算文件标签 σ=SSig(Ω〈t〉, name, t)。客户端选择一个随机数 r ∈ Z∗ q,然后为每个数据块 mi, i ∈[1, n]计算 U= gr和 F的审计认证器 δi=H2(name||i||t, U)r · S〈t〉 urmi。
(b) 文件 F 在时间段 t 的认证器集合为 Φ ={t, U,{δi}1≤i≤n ,Ω〈t〉}。客户端将文件 F、文件标签 σ 和认证器集合 Φ 发送给云服务器。
(5) 证明生成。TPA 向云服务器发出挑战 Chal={(i, vi)}i∈I,其中 vi ∈ Z∗ q,且 I={s1,···, sc} 是 [1, n] 的一个子集, c 是文件 F 在时间周期 t 内被挑战的数据块数量。输入挑战 Chal、文件 F 和 F 的认证器集合 Φ=(t, U,{δi}1≤i≤n , Ω〈t〉)后,云服务器计算 δ= ∏i∈I δvi i, μ=∑i∈I vimi。云服务器设置证明 P={t, U, δ, μ,Ω〈t〉},并将 (P, σ) 发送给 TPA 作为对 TPA 挑战的响应。
(6) 证明验证。输入为证明 P、文件标签 σ、挑战 Chal、公钥PK和时间段 t。TPA 首先检查文件标签 σ,以验证 name, t,Ω〈t〉是否完整。如果 name, t, Ω〈t〉是完整的,TPA 检查以下等式是否成立:
ˆe(U, u μ∏i ∈ I H2(name||i||t, U) v i )· ∏ π,β ∈ θ(〈t〉) β isπ′ s child ˆe(Rπ, H1(β)∑i ∈ I v i )= ˆe(g, δ)
如果等式成立,TPA 向客户端发送 ‘’真’‘。否则,TPA 向客户端发送’‘假’‘。
4 安全性分析
定理1(正确性) 。对于一个有效的证明 P和相应的挑战 Chal,证明验证算法必须输出 ‘’真’‘。
Proof:由于以下等式成立,所提协议是正确的:
ˆe(U, uμ∏i∈I H2(name||i||t, U)vi)· ∏ π∈θ(〈t〉) β isπ′s child ˆe(Rπ, H1(β)∑i∈I vi) = ˆe(g, urμ∏i∈I H2(name||i||t, U)rvi)· ˆe(g, ∏ π∈θ(〈t〉) β isπ′s child H1(β)ρπ·∑i∈I vi) = ˆe(g, ur∑i∈I vimi∏i∈I H2(name||i||t, U)rvi)· ˆe(g, S〈t〉∑i∈I vi) = ˆe(g,∏i∈I urmivi · H2(name||i||t, U)rvi · S〈t〉 vi) = ˆe(g,∏i∈I urmi · H2(name||i||t, U)r · S〈t〉) vi = ˆe(g,∏i∈I δi vi )= ˆe(g, δ)
定理2(抗入侵性) 。所提出的协议具有抗入侵性,前提是数字签名SSig是存在不可伪造的,并且 G1中的CDH问题是困难的。
证明:我们定义了五个游戏,并证明攻击者在这些游戏中的成功概率差异可以忽略不计。
游戏0:游戏0 与第2节中定义的游戏相同。
游戏1:除了一个区别外,游戏1与游戏0类似。挑战者维护一个列表,该列表包含认证器集合中的文件标签。如果攻击者生成了一个有效的文件标签,该文件标签并非由挑战者生成,而是由签名方案SSig生成,则挑战者中止。分析:对该博弈的分析类似于[10]中的分析。显然,如果挑战者终止的概率不可忽略,则利用该攻击者,我们可以找到一个能够攻破SSig的伪造者。因此, name, t以及 Ω〈t〉的每个值均由挑战者Chal发布。
游戏2:除了一个区别外,游戏2与游戏1类似。挑战者维护一个列表,其中包含对攻击者查询认证器的响应。如果攻击者在游戏2中获胜,但攻击者计算出的 U不等于挑战者存储的 Φ=(t, U,{δi}1≤i≤n ,Ω〈t〉)列表中的 U,则挑战者终止。分析:如果挑战者中止,则存在一个模拟器能够以不可忽略的概率解决 CDH问题。该模拟器的行为与游戏1中挑战者的行为相似。因此, U在P=( t∗, U, δ, μ,Ω〈t∗〉)中的结果必须是正确的。这意味着攻击者在游戏1和游戏2中成功概率之间存在可忽略差异。
游戏3:除了一个区别之外,游戏3与游戏2类似。挑战者维护一个列表,其中包含对认证器查询的响应。挑战者监视每一次交互。如果在某次交互中攻击者在游戏3中成功,但其证明中的 δ不等于 δ=∏i∈I δvi i,,则挑战者终止。分析:假设挑战者在时间段 t∗ 下对名为 name 且包含数据块 m1,···, mn 的文件F中止,挑战者生成的认证器集合为 Φ=(t∗, U,{δi}1≤i≤n,Ω〈t∗〉)。假设导致挑战者中止的挑战为 (t∗, Chal={i, vi}i∈I),攻击者返回的证明为 P= (t∗, U, δ′, μ′,Ω〈t∗〉)。假设诚实方返回的证明为 P=(t∗, U, δ, μ,Ω〈t∗〉)。对于诚实方的证明 P,以下等式成立 ˆe(U, uμ∏i∈I H2(name||i||t, U)vi)· ∏ π,β∈θ(〈t〉) β isπ′s child ˆe(Rπ, H1(β)∑i∈I vi)= ˆe(g, δ) 对于使挑战者中止的攻击者的证明,我们有 δ = δ ′,,但以下等式成立: ˆe(U, uμ′ ∏i∈I H2(name||i||t, U)vi)· ∏ π,β∈θ(〈t〉) β isπ′s child ˆe(Rπ, H1(β)∑i∈ I vi)= ˆe(g, δ′) 与定理1中的等式相比,我们有 μ = μ ′,否则,这意味着 δ= δ ′。设 Δμ= μ ′ − μ。如果挑战者中止,则存在一个模拟器能够以不可忽略的概率解决CDH问题。因此,对手在游戏2和游戏3中成功概率之间存在可忽略差异。
游戏4:游戏4与游戏3类似,仅有一个区别。在游戏4中,挑战者会监视每一次交互。如果攻击者在某次交互中成功,但其证明中的 μ与 μ=∑i ∈ I vimi不相同,则挑战者终止该过程。分析:假设挑战者在时间段 t∗发生中止,且名称为 name的文件包含数据块 m1,···, mn,挑战者生成的认证器集合为 Φ=(t∗, U,{δi}1≤i≤n ,Ω〈t∗〉)。假设导致挑战者中止的挑战为(t ∗, Chal={i, vi}i ∈ I) ,攻击者的证明为 P=(t ∗, U, δ′, μ′ ,Ω〈t∗〉)。设诚实方生成的响应为 P=(t ∗ , U, δ, μ, Ω〈t∗〉)。由游戏3可知 δ= δ ′。令 Δμ= μ ′ − μ,
如果挑战者中止,则存在一个模拟器能够以不可忽略的概率解决离散对数问题。因此,攻击者在游戏3和游戏4中成功概率之间存在可忽略差异。综上所述, 上述五个游戏中攻击者成功概率的差异均是可忽略的。
由于CDH问题可以归约为离散对数问题,只要数字签名 SSig具有存在不可伪造性且 G1中的CDH问题难以求解,TPA将拒绝接受,除非云服务器在 P=(t, U, δ, μ,Ω〈t〉)中返回正确的值。
如果云服务器使用正确的 P=(t, U, δ, μ,Ω〈t〉) 通过了验证,则我们可以找到一个知识提取器,该知识提取器能够提取所有被挑战的文件块ms1,···, msc。该方法与[3]中的方法相同。通过对相同的块 ms1,···, msc执行所提协议的审计挑战,并选择独立的系数 v1,···, vc, c,知识提取器将获得关于变量 ms1,···, msc的线性方程,这些方程是相互独立的。知识提取器可以通过求解这些线性方程来提取 ms1,···, msc。因此,我们完成了定理2的证明。
定理3 (可检测性) 。所提协议是( b a, 1−(a−b a)c)可检测的,如果存储在云服务器上的文件被划分为 a个数据块,并且存在 b个被攻击者修改或删除的坏块,同时挑战了 c个数据块。
证明:假设一个文件被划分为 a个块并存储在云服务器上,其中存在 b个被攻击者修改或删除的坏块,并对 c个块发起挑战。当且仅当被挑战的块中包含至少一个坏块时,才能发现坏块的存在。假设被挑战的块中包含 Y个坏块。被挑战的块中包含多于一个坏块的概率为 PY。因此 PY= P{Y ≥ 1} = 1 − P{Y= 0} = 1 − a− b a · a−1 − b a−1 ···· · a− c+ 1 − b 我们可以得到 PY ≥ 1 −(a−b a) c。因此,该云存储审计协议是(b n ,{5}可检测的。
5 性能分析
我们在表2中展示了计算开销的比较。我们协议的AuthenGen和ProofGen算法的开销与[16,17],中的协议相同,而SysSetup、KeyUpdate、KeyRefresh、 ProofVerify算法的开销略高。然而,当TPA和客户端都被攻破时,先前的协议无法保持安全。只要客户端和TPA不在同一刷新周期内被攻破,我们的协议就能保持安全。
周期。因此,为了获得更高的安全性,我们的协议具有更高的计算开销是可以接受的。在表2中,Exp表示在 G1中的一次指数运算,Pair表示从 G1到 G2的一次双线性配对,而Mul表示在 G1中的一次乘法运算。其他操作,例如对 Z∗ q和 G2的操作、集合操作以及哈希操作均被忽略,因为这些操作的开销可以忽略不计。如表2所示,SysSetup算法的开销在T中呈对数级增长,略高于其他三种协议,但SysSetup算法在整个协议生命周期内仅执行一次。 KeyUpdate算法的开销在 T中呈对数级增长,但这只是最坏情况下的计算开销。在一半的时间段内,它仅需要一些集合操作。 密钥刷新 算法仅需要在 G1中进行一些乘法运算。证明验证 算法相比其他协议执行了更多的配对计算。
| 协议 | Sys- 步骤 | Key- 更新 | Key- 刷新 | Auth‐ Gen | 证明‐ Gen |
证明‐ 验证 |
|---|---|---|---|---|---|---|
| The 提出的 协议 | (logT)·3 · Exp |
(logT)·3 · Exp |
(logT)·乘法 | 3 ·指数 | c·指数 | (c+1+ logT) · 指数+(2+ logT) ·双线性配对 |
| 协议 在[16] | 2 ·指数 | 4 ·指数 | − | 3 ·指数 | c·指数 | (c+1+log(T+ 2))·指数+3·双线性配对 |
| 在协议[17] | 2 ·指数 | Exp | − | 3 ·指数 | c·指数 | (c+2) · 指数+3 ·双线性配对 |
在表3中, |G1| 表示群 G1中一个元素的长度, |Z∗ q| 表示 Z∗ q中一个元素的长度。密钥更新 KeyUp‐ date 和密钥刷新 KeyRefresh 的通信开销在 T上呈对数级增长。挑战开销与 [16,17]中的协议相同。证明开销与 [16],相同,且在 T上呈对数级增长。
| 协议 | 密钥更新 | 密钥更新 | 密钥更新 | 密钥更新 | 密钥刷新 || | 密钥刷新 || | 密钥刷新 || | 密钥刷新 || | 挑战 | 挑战 | 挑战 | 证明 || | 证明 || | 证明 || | 证明 || | 证明 || | 证明 || | 证明 || | 证明 || | 证明 || |
| — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — | — |
| 所提出的协议 (logT) · | |G1| | |G1| | (logT) · | (logT) · | |G1| | c· | |Z ∗ q| | || | || | || | (logT+ 2) · | (logT+ 2) · | (logT+ 2) · | (logT+ 2) · | |G1| | |G1| | + | |Z ∗ q || | |
| 所提出的协议 (logT) · | |G1| | |G1| | | |G1| | | | || | || | || | || | (logT+ 2) · | (logT+ 2) · | (logT+ 2) · | (logT+ 2) · | |G1| | |G1| | + | |Z ∗ q || | |
| [16] 中的协议 | − | − | − | − | − | − | − | − | c· | |Z ∗ q || | (logT+ 2) · | (logT+ 2) · | (logT+ 2) · | (logT+ 2) · | |G1| || | |G1| || | + | |Z ∗ q| | |
| [16] 中的协议 | − | − | − | − | − | − | − | − | c· | |Z ∗ q || | (logT+ 2) · | (logT+ 2) · | (logT+ 2) · | (logT+ 2) · | | | | | |
| [17]中的协议 | | |G1| | |G1| | | − | − | − | − | c· | |Z ∗ | 2 · | |G1| | + | |Z ∗ | |Z ∗ | | | | | |
| | | | | | | | | | | q | q | | | q | | | | | |
6 结论
我们提出了一种抗入侵云存储审计协议,以减少密钥泄露造成的损害。只要客户端和TPA不在同一个更新周期内被攻破,即使被攻破,攻击者也无法计算出客户端的审计密钥。所提协议的安全性也通过形式化安全证明得以证实。所提协议的性能通过数值分析进行评估。
更多推荐
所有评论(0)