Efficient Group Proof of Storage With Malicious-Member Distinction and Revocation 学习笔记
Efficient Group Proof of Storage With Malicious-Member Distinction and Revocation 学习笔记
引言部分
近些年,云计算技术蓬勃发展,不论是科技企业或是科研院所,云计算的应用场景越来越多,其中最基础和应用最广泛的云服务就是云存储,也就是网盘服务。 的数据的保护至关重要,总结来说,就是要解决云存储中的数据完整性的校验、用户身份的认证、恶意用户判别及销毁等问题。
为了解决数据完整性校验的问题,出现了一系列的 存储数据验证(POS,Proof of Storage) 方案。在一些实际应用中,会遇到这样一种情况,即多个用户共同管理一组数据或对这组数据作验证操作。以现在很多互联网公司为例,大多是一些交易数据或浏览历史数据,随着通信技术和网络技术的不断发展,这些数据正在爆炸式增长当中,一旦这些数据被破坏,这些企业将遭受巨大的损失。为了解决这一问题,很多互联网企业选择将数据的服务交给更加专业的团队来管理,由这些专业的团队来进行日常 的数据完整性和保密性的检查工作。这些专业的数据管理团队可以看作是共享同一组数据的用户群组,而群组的管理员可以由群组各用户的回复(应答)中得出数据是否跟刚刚生成时一样原封未动。
如果在用户组中存在恶意用户,则这个恶意的用户的权限应当被撤销。在现实生活中,恶意的用户可能存在与云服务器共谋以伪造有效数据证明的情况。因此,若存在不同的用户返回的验证结果不同的情况,就需要判断出谁是不诚实的用户,并将其权限撤销。
可公开验证的安全方案可以有效的避免这个问题,因为每个人都可以对数据的完整性进行验证。但是,大多可公开验证方案使用的是双线性对或第三方验证的方式来实现公开验证,这也导致了方案的低效。
因此,文章提出了一种高效的POS方案来解决实际应用中的安全需求:
1、在用户群组应用中保证数据完整性
2、区分恶意用户
3、撤销恶意用户
4、抵抗选择公开信息攻击(Resist selective opening attacks)
5、支持数据去重
基础知识
1、同态MACS(HOMOMORPHIC MACS)
2、交叉验证码(Cross Authentication Codes)
3、可重用函数(复用函数)reusable commitment function(COM)
p
=
2
p
′
+
1
,
q
=
2
q
′
+
1
N
=
p
q
g
是
阶
为
p
′
q
′
的
循
环
子
群
的
生
成
元
G
p
是
素
数
阶
为
q
的
群
随
机
选
取
一
个
G
q
中
的
元
素
h
计
算
l
o
g
g
h
m
o
d
q
是
困
难
的
选
取
R
S
A
加
解
密
密
钥
e
和
d
,
满
足
e
d
=
1
m
o
d
ϕ
(
N
)
C
O
M
(
M
)
=
(
g
M
h
H
(
I
D
)
)
e
m
o
d
N
p = 2p' + 1, q = 2q' + 1\\ N = pq\\ g是阶为p'q'的循环子群的生成元\\ G_p是素数阶为q的群\\ 随机选取一个G_q中的元素h\\ 计算log_gh \ mod \ q是困难的\\ 选取RSA加解密密钥e和d,满足ed=1\ mod\ \phi(N)\\ COM(M)=(g^Mh^{H(ID)})^emod\ N
p=2p′+1,q=2q′+1N=pqg是阶为p′q′的循环子群的生成元Gp是素数阶为q的群随机选取一个Gq中的元素h计算loggh mod q是困难的选取RSA加解密密钥e和d,满足ed=1 mod ϕ(N)COM(M)=(gMhH(ID))emod N
4、离散对数问题DL
5、伪随机函数PRF(Pseudo-Random Function)
具体构造
首先,将文件分为
n
n
n个大块chunk,
F
i
l
e
=
{
m
<
1
>
,
m
<
2
>
,
.
.
.
.
.
.
,
m
<
n
>
}
File=\{m_{<1>},m_{<2>},......,m_{<n>}\}
File={m<1>,m<2>,......,m<n>},每个大块又分为
L
L
L个数据块,
m
<
i
>
=
{
m
i
,
1
,
m
i
,
2
,
.
.
.
.
.
.
,
m
i
,
L
}
m_{<i>}=\{m_{i,1},m_{i,2},......,m_{i,L}\}
m<i>={mi,1,mi,2,......,mi,L},在这里,对应
m
<
i
>
m_{<i>}
m<i>的验证函数值(Commitement )和标签(tag)则表示为
C
O
M
i
COM_i
COMi和
T
<
i
>
T_{<i>}
T<i>。
取
p
=
2
p
′
+
1
p=2p'+1
p=2p′+1和
q
=
2
q
′
+
1
q=2q'+1
q=2q′+1,并且
N
=
p
q
N =pq
N=pq,作为RSA模数,取
g
g
g为阶为
p
′
q
′
p'q'
p′q′的循环子群的生成元,
F
F
F是大小为
2
λ
2^\lambda
2λ的有限域,取密钥空间为
κ
=
F
3
\kappa=F^3
κ=F3,取标签空间为
χ
=
F
L
⋃
{
⊥
}
\chi=F^L\bigcup\{\perp\}
χ=FL⋃{⊥}。
取
H
H
H为一个哈希函数,
f
f
f为一个伪随机数发生器,
π
\pi
π为一个伪随机变换:
H
:
{
0
,
1
}
l
o
g
2
(
n
)
→
{
0
,
1
}
l
o
g
2
(
n
)
f
:
{
0
,
1
}
×
{
0
,
1
}
l
o
g
2
(
n
)
→
{
0
,
1
}
λ
π
:
{
0
,
1
}
×
{
0
,
1
}
l
o
g
2
(
n
)
→
{
0
,
1
}
l
o
g
2
(
n
)
H:\{0,1\}^{log_2(n)}\rightarrow\{0,1\}^{log_2(n)} \\f:\{0,1\}\times\{0,1\}^{log_2(n)}\rightarrow\{0,1\}^\lambda \\\pi:\{0,1\}\times\{0,1\}^{log_2(n)}\rightarrow\{0,1\}^{log_2(n)}
H:{0,1}log2(n)→{0,1}log2(n)f:{0,1}×{0,1}log2(n)→{0,1}λπ:{0,1}×{0,1}log2(n)→{0,1}log2(n)
密钥生成算法(
K
e
y
G
e
n
(
1
λ
)
→
(
m
s
k
,
m
p
k
,
s
k
l
)
KeyGen(1^\lambda)\rightarrow(msk,mpk,sk_l)
KeyGen(1λ)→(msk,mpk,skl)):取e和d满足
e
d
=
1
m
o
d
p
′
q
′
ed=1\ mod\ p'q'
ed=1 mod p′q′,给定安全参数
λ
\lambda
λ输出
m
s
k
=
(
p
,
q
,
e
)
,
m
p
k
=
(
d
,
N
,
g
,
h
)
msk=(p,q,e),mpk=(d,N,g,h)
msk=(p,q,e),mpk=(d,N,g,h)和私钥
s
k
l
=
(
a
l
,
b
l
,
c
l
)
∈
κ
,
1
≤
l
≤
L
sk_l=(a_l,b_l,c_l)\isin\kappa,1\leq l\leq L
skl=(al,bl,cl)∈κ,1≤l≤L。
预验证生成算法(
P
r
e
G
e
n
(
{
s
k
l
}
l
=
1
L
,
m
s
k
,
m
<
i
>
)
→
(
T
<
i
>
,
C
O
M
i
)
PreGen(\{sk_l\}^L_{l=1},msk,m_{<i>})\rightarrow(T_{<i>},COM_i)
PreGen({skl}l=1L,msk,m<i>)→(T<i>,COMi)):对任意i,
1
≤
i
≤
n
1\leq i\leq n
1≤i≤n,计算每一个大块
m
<
i
>
m_{<i>}
m<i>的验证标签:
[
1
,
c
1
,
c
1
2
⋯
c
1
L
−
1
1
,
c
2
,
c
2
2
⋯
c
2
L
−
1
⋮
⋱
⋮
1
,
c
L
,
c
L
2
⋯
c
L
L
−
1
]
⋅
[
m
i
,
1
m
i
,
2
⋮
m
i
,
L
]
+
[
f
b
1
(
i
)
f
b
2
(
i
)
⋮
f
b
L
(
i
)
]
=
[
1
,
a
1
,
a
1
2
⋯
a
1
L
−
1
1
,
a
2
,
a
2
2
⋯
a
2
L
−
1
⋮
⋱
⋮
1
,
a
L
,
a
L
2
⋯
a
L
L
−
1
]
⋅
[
T
i
,
1
T
i
,
2
⋮
T
i
,
L
]
\begin{bmatrix} 1,c_1,c_1^2 & \cdots & c_1^{L-1} \\ 1,c_2,c_2^2 & \cdots & c_2^{L-1} \\ \vdots & \ddots & \vdots \\ 1,c_L,c_L^2 & \cdots & c_L^{L-1} \end{bmatrix}\centerdot \begin{bmatrix} m_{i,1}\\ m_{i,2}\\ \vdots\\ m_{i,L}\\ \end{bmatrix}+ \begin{bmatrix} f_{b_1}(i)\\ f_{b_2}(i)\\ \vdots\\ f_{b_L}(i)\\ \end{bmatrix}\\= \begin{bmatrix} 1,a_1,a_1^2 & \cdots & a_1^{L-1} \\ 1,a_2,a_2^2 & \cdots & a_2^{L-1} \\ \vdots & \ddots & \vdots \\ 1,a_L,a_L^2 & \cdots & a_L^{L-1} \end{bmatrix}\centerdot \begin{bmatrix} T_{i,1}\\ T_{i,2}\\ \vdots\\ T_{i,L}\\ \end{bmatrix}\\
⎣⎢⎢⎢⎡1,c1,c121,c2,c22⋮1,cL,cL2⋯⋯⋱⋯c1L−1c2L−1⋮cLL−1⎦⎥⎥⎥⎤⋅⎣⎢⎢⎢⎡mi,1mi,2⋮mi,L⎦⎥⎥⎥⎤+⎣⎢⎢⎢⎡fb1(i)fb2(i)⋮fbL(i)⎦⎥⎥⎥⎤=⎣⎢⎢⎢⎡1,a1,a121,a2,a22⋮1,aL,aL2⋯⋯⋱⋯a1L−1a2L−1⋮aLL−1⎦⎥⎥⎥⎤⋅⎣⎢⎢⎢⎡Ti,1Ti,2⋮Ti,L⎦⎥⎥⎥⎤
在上面的公式中,数据标签
T
<
i
>
T_{<i>}
T<i>可以由解L个未知数的线性方程得到结果,得到
T
<
i
>
T_{<i>}
T<i>后,计算每个大数据块
m
<
i
>
m_{<i>}
m<i>的
C
O
M
i
=
(
g
m
<
i
>
h
H
(
i
)
)
m
o
d
N
COM_i=(g^{m_{<i>}}h^{H(i)})\ mod\ N
COMi=(gm<i>hH(i)) mod N,而后输出
(
m
<
i
>
,
T
<
i
>
,
C
O
M
i
)
(m_{<i>},T_{<i>},COM_i)
(m<i>,T<i>,COMi)。
证明生成算法(
P
r
o
o
f
G
e
n
(
{
m
<
i
>
}
1
≤
i
≤
n
,
{
T
<
i
>
}
1
≤
i
≤
n
,
c
h
a
l
)
→
ρ
ProofGen(\{m_{<i>}\}_{1\leq i\leq n},\{T_{<i>}\}_{1\leq i\leq n},chal)\rightarrow\rho
ProofGen({m<i>}1≤i≤n,{T<i>}1≤i≤n,chal)→ρ):
c
h
a
l
=
(
c
,
k
1
,
k
2
)
chal=(c,k_1,k_2)
chal=(c,k1,k2),c代表挑战大块的数量,
k
1
,
k
2
k_1,k_2
k1,k2则是新随机挑选的两个随机数,对于每一个
1
≤
z
≤
c
1\leq z\leq c
1≤z≤c,计算出
i
z
=
π
k
1
(
z
)
i_z=\pi_{k_1}(z)
iz=πk1(z)代表样本数据块(block)的索引(下标),同时计算出
v
z
=
f
k
2
(
z
)
v_z=f_{k_2}(z)
vz=fk2(z)代表相应的系数,而后计算下列公式:
{
τ
1
=
v
1
T
i
1
,
1
+
v
2
T
i
2
,
1
+
⋯
+
v
c
T
i
c
,
1
τ
2
=
v
1
T
i
1
,
2
+
v
2
T
i
2
,
2
+
⋯
+
v
c
T
i
c
,
2
⋮
τ
L
=
v
1
T
i
1
,
L
+
v
2
T
i
2
,
L
+
⋯
+
v
c
T
i
c
,
L
a
n
d
{
ω
1
=
v
1
m
i
1
,
1
+
v
2
m
i
2
,
1
+
⋯
+
v
c
m
i
c
,
1
ω
2
=
v
1
m
i
1
,
2
+
v
2
m
i
2
,
2
+
⋯
+
v
c
m
i
c
,
2
⋮
ω
L
=
v
1
m
i
1
,
L
+
v
2
m
i
2
,
L
+
⋯
+
v
c
m
i
c
,
L
输
出
向
量
τ
=
(
τ
1
,
τ
2
,
…
,
τ
L
)
和
ω
=
(
ω
1
,
ω
2
,
…
,
ω
L
)
\begin{dcases} \tau_1=v_1T_{i_1,1}+v_2T_{i_2,1}+\cdots+v_cT_{i_c,1}\\ \tau_2=v_1T_{i_1,2}+v_2T_{i_2,2}+\cdots+v_cT_{i_c,2}\\ \vdots\\ \tau_L=v_1T_{i_1,L}+v_2T_{i_2,L}+\cdots+v_cT_{i_c,L}\\ \end{dcases}\\ and\\ \begin{dcases} \omega_1=v_1m_{i_1,1}+v_2m_{i_2,1}+\cdots+v_cm_{i_c,1}\\ \omega_2=v_1m_{i_1,2}+v_2m_{i_2,2}+\cdots+v_cm_{i_c,2}\\ \vdots\\ \omega_L=v_1m_{i_1,L}+v_2m_{i_2,L}+\cdots+v_cm_{i_c,L}\\ \end{dcases}\\ 输出向量\boldsymbol{\tau}=(\tau_1,\tau_2,\dots,\tau_L)和\boldsymbol{\omega}=(\omega_1,\omega_2,\dots,\omega_L)
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧τ1=v1Ti1,1+v2Ti2,1+⋯+vcTic,1τ2=v1Ti1,2+v2Ti2,2+⋯+vcTic,2⋮τL=v1Ti1,L+v2Ti2,L+⋯+vcTic,Land⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧ω1=v1mi1,1+v2mi2,1+⋯+vcmic,1ω2=v1mi1,2+v2mi2,2+⋯+vcmic,2⋮ωL=v1mi1,L+v2mi2,L+⋯+vcmic,L输出向量τ=(τ1,τ2,…,τL)和ω=(ω1,ω2,…,ωL)
证明验证算法(
V
e
r
i
f
P
r
o
o
f
(
ρ
,
c
h
a
l
,
s
k
l
)
→
{
0
,
1
}
VerifProof(\rho,chal,sk_l)\rightarrow\{0,1\}
VerifProof(ρ,chal,skl)→{0,1}):
s
k
l
=
(
a
l
,
b
l
,
c
l
)
sk_l=(a_l,b_l,c_l)
skl=(al,bl,cl),
c
h
a
l
=
(
c
,
k
1
,
k
2
)
chal=(c,k_1,k_2)
chal=(c,k1,k2),计算
i
z
=
π
k
1
(
z
)
i_z=\pi_{k_1}(z)
iz=πk1(z)和
v
z
=
f
k
2
(
z
)
v_z=f_{k_2}(z)
vz=fk2(z),计算
τ
=
τ
1
+
a
l
1
τ
2
+
⋯
+
a
l
L
−
1
τ
L
\tau=\tau_1+a_l^1\tau_2+\dots+a_l^{L-1}\tau_L
τ=τ1+al1τ2+⋯+alL−1τL和
ω
=
ω
1
+
c
l
1
ω
2
+
⋯
+
c
l
L
−
1
ω
L
\omega=\omega_1+c_l^1\omega_2+\dots+c_l^{L-1}\omega_L
ω=ω1+cl1ω2+⋯+clL−1ωL和
σ
=
v
1
f
b
l
(
i
1
)
+
⋯
+
v
c
f
b
l
(
i
c
)
\sigma=v_1f_{b_l}(i_1)+\dots+v_cf_{b_l}(i_c)
σ=v1fbl(i1)+⋯+vcfbl(ic)。如果
τ
=
σ
+
ω
\tau=\sigma+\omega
τ=σ+ω,则输出1,否则输出0。
到此可能是大家对方案最困惑的地方(PS:至少对我是如此),其实不难,只需把数据代入进去,经过一些看上去很繁琐的计算,验证一下,就可以得到答案了,不过关键点是要结合着预验证生成算法中的公式同时计算。在这里难的就是挑战的不一 定是全部的数据块,但其实如果细心分析的话,就算不是所有的块,哪怕只是抽一个数据大块,公式也是能对得上的,也就是说,挑战了几个数据大块,就对应着预验证生成算法中的几行。
验证COM算法:这个只是一个RSA加解密运算, 在此不列。
论文其它内容请自行查看,有论文的安全性分析和证明,方案正确性证明,以及方案的效率分析等。