Sanders, O. (2020). Efficient Redactable Signature and Application to Anonymous Credentials. In: Kiayias, A., Kohlweiss, M., Wallden, P., Zikas, V. (eds) Public-Key Cryptography – PKC 2020. PKC 2020. Lecture Notes in Computer Science(), vol 12111. Springer, Cham. https://doi.org/10.1007/978-3-030-45388-6_22
可编校签名
Introduction
Syntax
Short Redactable Signatures
前置文献:Short Randomizable Signatures的PS签名
p
k
:
=
(
X
,
Y
1
,
.
.
.
,
Y
r
)
=
(
g
x
,
g
y
1
,
.
.
.
,
g
y
r
)
,
s
k
:
=
(
x
,
y
1
,
.
.
.
,
y
r
)
,
g
∈
G
2
pk:=(X,Y_1,...,Y_r)=(g^x,g^{y_1},...,g^{y_r}),sk:=(x,y_1,...,y_r),g\in\mathbb{G}_2
pk:=(X,Y1,...,Yr)=(gx,gy1,...,gyr),sk:=(x,y1,...,yr),g∈G2
P
S
−
S
i
g
n
(
s
k
,
m
1
,
.
.
.
,
m
r
)
→
σ
:
=
(
σ
~
1
,
σ
~
2
)
=
(
g
~
,
g
~
x
+
∑
j
=
1
r
y
j
⋅
m
j
)
,
g
~
∈
G
1
∗
PS-Sign(sk,m_1,...,m_r)\rightarrow\sigma:=(\widetilde{\sigma}_1,\widetilde{\sigma}_2)=(\widetilde{g},\widetilde{g}^{x+\sum_{j=1}^r y_j\cdot m_j}),\widetilde{g}\in\mathbb{G}_1^*
PS−Sign(sk,m1,...,mr)→σ:=(σ
1,σ
2)=(g
,g
x+∑j=1ryj⋅mj),g
∈G1∗
P
S
−
V
e
r
i
f
y
(
p
k
,
(
m
1
,
.
.
.
,
m
r
)
,
σ
)
→
0
/
1
PS-Verify(pk,(m_1,...,m_r),\sigma)\rightarrow 0/1
PS−Verify(pk,(m1,...,mr),σ)→0/1. 验证
σ
~
1
≠
1
G
1
,
\widetilde{\sigma}_1\neq1_{\mathbb{G}_1},
σ
1=1G1,
e
(
X
⋅
∏
i
=
1
n
Y
i
m
i
,
σ
~
1
)
=
e
(
g
,
σ
~
2
)
e(X\cdot \prod_{i=1}^n Y_i^{m_i},\widetilde{\sigma}_1)=e(g,\widetilde{\sigma}_2)
e(X⋅∏i=1nYimi,σ
1)=e(g,σ
2)
这个签名验证时必须使用所有的信息整体验证,无法实现部分验证。
修改: σ 1 : = ∏ i ∈ I ˉ Y i m i \sigma_1:=\prod_{i\in\bar{\mathcal{I}}}Y_i^{m_i} σ1:=∏i∈IˉYimi
验证转换为:
e
(
X
⋅
σ
1
∏
i
∈
I
Y
i
m
i
,
σ
~
1
)
=
e
(
g
,
σ
~
2
)
e(X\cdot \sigma_1\prod_{i\in\mathcal{I}} Y_i^{m_i},\widetilde{\sigma}_1)=e(g,\widetilde{\sigma}_2)
e(X⋅σ1∏i∈IYimi,σ
1)=e(g,σ
2)
安全性缺陷
不幸的是,由此产生的方案显然是不安全的。不诚实的用户在可以在
σ
1
\sigma_1
σ1中隐藏已披露消息的某些部分来欺骗验证者:
令
σ
1
:
=
Y
1
r
∏
i
=
2
n
Y
i
m
i
\sigma_1:=Y_1^r\prod_{i=2}^nY_i^{m_i}
σ1:=Y1r∏i=2nYimi,并构造一个对
m
1
−
r
m_1-r
m1−r的签名,对于任意
r
∈
Z
p
r\in\mathbb{Z}_p
r∈Zp,有
e
(
X
⋅
σ
1
⋅
Y
1
m
1
−
r
,
σ
~
1
)
=
e
(
X
⋅
∏
i
=
1
n
Y
i
m
i
,
σ
~
1
)
=
e
(
g
,
σ
~
2
)
\begin{aligned} e(X\cdot \sigma_1\cdot Y_1^{m_1-r},\widetilde{\sigma}_1)&=e(X\cdot \prod_{i=1}^nY_i^{m_i},\widetilde{\sigma}_1)\\ &= e(g,\widetilde{\sigma}_2) \end{aligned}
e(X⋅σ1⋅Y1m1−r,σ
1)=e(X⋅i=1∏nYimi,σ
1)=e(g,σ
2)
σ
1
∉
G
1
\sigma_1\notin\mathbb{G}_1
σ1∈/G1,为了安全性,需要证明它只包含不在
I
\mathcal{I}
I中的元素的累积。解决这个问题最简单的方法(在大多数匿名凭证构造中使用)是证明未公开信息的知识。正如我们已经解释过的,这导致成本至少与
I
ˉ
\bar{\mathcal{I}}
Iˉ的规模成线性关系。
解决
如果
σ
\sigma
σ是一个已经诚实地为
I
\mathcal{I}
I派生的签名,则
e
(
σ
1
,
∏
i
∈
I
Y
~
i
)
→
e
(
g
,
g
~
)
f
(
y
1
,
.
.
.
,
y
n
)
e(\sigma_1,\prod_{i\in\mathcal{I}}\widetilde{Y}_i)\rightarrow e(g,\widetilde{g})^{f(y_1,...,y_n)}
e(σ1,∏i∈IY
i)→e(g,g
)f(y1,...,yn),其中的单项是这种形式:
y
i
⋅
y
j
,
i
≠
j
y_i\cdot y_j,i\neq j
yi⋅yj,i=j。相反,如果有人试图在
σ
1
\sigma_1
σ1中隐藏一些已经公开的信息,
f
f
f中就会包含某个形式如
y
i
2
y_i^2
yi2的单项。
这两种形式是很容易被区分开的,通过将元素 Z i , j = g y i ⋅ y j , i ≠ j Z_{i,j}=g^{y_i\cdot y_j},i\neq j Zi,j=gyi⋅yj,i=j和公钥相加,合法的形式可很容易地重构 f f f,另一种则不能:诚实的用户可计算 σ 2 ← ∏ i ∈ I , j ∈ I ˉ Z i , j m j \sigma_2\leftarrow \prod_{i\in\mathcal{I},j\in\bar{\mathcal{I}}}Z_{i,j}^{m_j} σ2←∏i∈I,j∈IˉZi,jmj,并证明 σ 1 \sigma_1 σ1满足验证等式2: e ( σ 1 , ∏ i ∈ I Y ~ i ) = e ( σ 2 , g ~ ) e(\sigma_1,\prod_{i\in\mathcal{I}}\widetilde{Y}_i)=e(\sigma_2,\widetilde{g}) e(σ1,∏i∈IY i)=e(σ2,g )
scheme
Sign生成对
(
m
1
,
.
.
.
,
m
n
)
(m_1,...,m_n)
(m1,...,mn)的总体聚合签名
Derive从总体签名中派生出部分元素
I
\mathcal{I}
I的签名
- σ 1 ′ = ∏ j ∈ I ˉ Y j m j = g ∑ j ∈ I ˉ y j ⋅ m j \sigma_1'=\prod_{j\in\bar{\mathcal{I}}}Y_j^{m_j}=g^{\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j} σ1′=∏j∈IˉYjmj=g∑j∈Iˉyj⋅mj
- σ 2 ′ = ∏ j ∈ I ˉ ( ∏ i ∈ I g y i ) y j ⋅ m j = ( g ∑ i ∈ I y i ) ∑ j ∈ I ˉ y j ⋅ m j = ( g ∑ j ∈ I ˉ y j ⋅ m j ) ∑ i ∈ I y i = g f \sigma_2'=\prod_{j\in\bar{\mathcal{I}}}(\prod_{i\in\mathcal{I}}g^{y_i})^{y_j\cdot m_j}=(g^{\sum_{i\in\mathcal{I}} y_i})^{\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j}=(g^{\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j})^{\sum_{i\in\mathcal{I}} y_i}=g^f σ2′=∏j∈Iˉ(∏i∈Igyi)yj⋅mj=(g∑i∈Iyi)∑j∈Iˉyj⋅mj=(g∑j∈Iˉyj⋅mj)∑i∈Iyi=gf
验证部分签名时,只需要关于
i
∈
I
i\in\mathcal{I}
i∈I的信息:
-
第一个条件是验证部分签名 i ∈ I i\in\mathcal{I} i∈I的
e ( g x ⋅ g ∑ j ∈ I ˉ y j ⋅ m j g ∑ i ∈ I y i ⋅ m i , σ ~ 1 ) = e ( g x + ∑ i = 1 n y i ⋅ m i , σ ~ 1 ) = e ( g , σ ~ 2 ) e(g^x\cdot g^{\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j}g^{\sum_{i\in\mathcal{I}}y_i\cdot m_i},\widetilde{\sigma}_1)=e(g^{x+\sum_{i=1}^n y_i\cdot m_i},\widetilde{\sigma}_1)=e(g,\widetilde{\sigma}_2) e(gx⋅g∑j∈Iˉyj⋅mjg∑i∈Iyi⋅mi,σ 1)=e(gx+∑i=1nyi⋅mi,σ 1)=e(g,σ 2) -
第二个条件针对上文提出的安全性风险,验证当 σ 1 \sigma_1 σ1中不包含 I \mathcal{I} I中成分时,才能够很容易地恢复出 f f f
e ( g ∑ j ∈ I ˉ y j ⋅ m j , g ~ ∑ i ∈ I y i ) = e ( ( g ∑ j ∈ I ˉ y j ⋅ m j ) ∑ i ∈ I y i , g ~ ) = e ( σ 2 , g ~ ) e(g^{\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j},\widetilde{g}^{\sum_{i\in\mathcal{I}}y_i})=e((g^{\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j})^{\sum_{i\in\mathcal{I}}y_i},\widetilde{g})=e(\sigma_2,\widetilde{g}) e(g∑j∈Iˉyj⋅mj,g ∑i∈Iyi)=e((g∑j∈Iˉyj⋅mj)∑i∈Iyi,g )=e(σ2,g )
注意其中 f ( y 1 , . . . , y n ) = ( ∑ j ∈ I ˉ y j ⋅ m j ) ⋅ ( ∑ i ∈ I y i ) f(y_1,...,y_n)=(\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j)\cdot (\sum_{i\in\mathcal{I}}y_i) f(y1,...,yn)=(∑j∈Iˉyj⋅mj)⋅(∑i∈Iyi)
注意:验证的计算效率不依赖于 I ˉ \bar{\mathcal{I}} Iˉ的规模(仅与要验证的集合规模 ∣ I ∣ |\mathcal{I}| ∣I∣有关)
Unlinkability
这个属性表示:将派生的签名
σ
I
\sigma_{\mathcal{I}}
σI链接回原本的签名
σ
\sigma
σ是困难的。表示即使敌手已经生成了公钥
p
k
pk
pk,派生签名
σ
I
\sigma_{\mathcal{I}}
σI也不会泄露关于
{
m
i
}
i
∈
I
ˉ
\{m_i\}_{i\in\bar{\mathcal{I}}}
{mi}i∈Iˉ的任何信息。
实现Unlinkability的两个技巧:
- 在 σ 1 \sigma_1 σ1中加入任何非 Y i r , i ∈ I Y_i^r,i\in\mathcal{I} Yir,i∈I形式的元素(因为验证条件2, σ 1 \sigma_1 σ1中不能包含任何 I \mathcal{I} I中的元素成分)
- 利用PS签名的顺序聚合能力
具体地说,我们将随机消息t的签名聚合到原始签名的虚拟公钥下,然后我们将t包含在编校消息的集合中。
- σ ~ 1 ′ = σ ~ 1 r \widetilde{\sigma}_1'=\widetilde{\sigma}_1^r σ 1′=σ 1r
-
σ
~
2
′
=
(
σ
~
1
x
+
∑
i
=
1
n
y
i
⋅
m
i
)
r
⋅
σ
~
1
r
⋅
t
=
(
σ
~
1
x
+
t
+
∑
i
=
1
n
y
i
⋅
m
i
)
r
\widetilde{\sigma}_2'=(\widetilde{\sigma}_1^{x+\sum_{i=1}^n y_i\cdot m_i})^r\cdot \widetilde{\sigma}_1^{r\cdot t}=(\widetilde{\sigma}_1^{x+t+\sum_{i=1}^n y_i\cdot m_i})^r
σ
2′=(σ
1x+∑i=1nyi⋅mi)r⋅σ
1r⋅t=(σ
1x+t+∑i=1nyi⋅mi)r
(分析:这组替换本质上是顺序聚合了一个新的签名, r r r是随机数, t t t相当于使用的dummy secret key) -
σ
1
′
=
g
t
+
∑
j
∈
I
ˉ
y
j
⋅
m
j
\sigma_1'=g^{t+\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j}
σ1′=gt+∑j∈Iˉyj⋅mj
(分析:因为 t t t不是这里想要获得的 I \mathcal{I} I的一部分,所以对于聚合后的总签名, i ∉ I i\notin\mathcal{I} i∈/I也包括 t t t在内) -
σ
2
′
=
∏
i
∈
I
g
y
i
⋅
t
∏
j
∈
I
ˉ
(
∏
i
∈
I
g
y
i
)
y
j
⋅
m
j
=
(
g
t
+
∑
j
∈
I
ˉ
y
j
⋅
m
j
)
∑
i
∈
I
y
i
=
g
f
\sigma_2'=\prod_{i\in\mathcal{I}}g^{y_i\cdot t}\prod_{j\in\bar{\mathcal{I}}}(\prod_{i\in\mathcal{I}}g^{y_i})^{y_j\cdot m_j}=(g^{t+\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j})^{\sum_{i\in\mathcal{I}} y_i}=g^f
σ2′=∏i∈Igyi⋅t∏j∈Iˉ(∏i∈Igyi)yj⋅mj=(gt+∑j∈Iˉyj⋅mj)∑i∈Iyi=gf
(分析:同理)
总之,利用 r , t r,t r,t给未公开的 i ∈ I ˉ i\in\bar{\mathcal{I}} i∈Iˉ增加了随机性
原本的验证过程仍然成立:
- e ( g x ⋅ g t + ∑ j ∈ I ˉ y j ⋅ m j g ∑ i ∈ I y i ⋅ m i , σ ~ 1 r ) = e ( g x + t + ∑ i = 1 n y i ⋅ m i , σ ~ 1 r ) = e ( g , σ ~ 2 ) e(g^x\cdot g^{t+\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j}g^{\sum_{i\in\mathcal{I}}y_i\cdot m_i},\widetilde{\sigma}_1^r)=e(g^{x+t+\sum_{i=1}^n y_i\cdot m_i},\widetilde{\sigma}_1^r)=e(g,\widetilde{\sigma}_2) e(gx⋅gt+∑j∈Iˉyj⋅mjg∑i∈Iyi⋅mi,σ 1r)=e(gx+t+∑i=1nyi⋅mi,σ 1r)=e(g,σ 2)
-
e
(
g
t
+
∑
j
∈
I
ˉ
y
j
⋅
m
j
,
g
~
∑
i
∈
I
y
i
)
=
e
(
(
g
t
+
∑
j
∈
I
ˉ
y
j
⋅
m
j
)
∑
i
∈
I
y
i
,
g
~
)
=
e
(
σ
2
,
g
~
)
e(g^{t+\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j},\widetilde{g}^{\sum_{i\in\mathcal{I}}y_i})=e((g^{t+\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j})^{\sum_{i\in\mathcal{I}}y_i},\widetilde{g})=e(\sigma_2,\widetilde{g})
e(gt+∑j∈Iˉyj⋅mj,g
∑i∈Iyi)=e((gt+∑j∈Iˉyj⋅mj)∑i∈Iyi,g
)=e(σ2,g
)
注意其中 f ( y 1 , . . . , y n ) = ( t + ∑ j ∈ I ˉ y j ⋅ m j ) ⋅ ( ∑ i ∈ I y i ) f(y_1,...,y_n)=(t+\sum_{j\in\bar{\mathcal{I}}}y_j\cdot m_j)\cdot (\sum_{i\in\mathcal{I}}y_i) f(y1,...,yn)=(t+∑j∈Iˉyj⋅mj)⋅(∑i∈Iyi)
效率:具有不可链接性的签名,比原签名多了2次 G 1 \mathbb{G}_1 G1,3次 G 2 \mathbb{G}_2 G2的指数计算
Anonymous Credentials
匿名证书(也称为基于属性的证书)通常包含任何允许某些组织对用户属性颁发证书的系统,这样的系统可以:(1)用户随后可以证明其属性是经过认证的,(2)用户在显示其证书时显示的元素不能与特定的签发相链接(除非显示的属性允许这样做)。
注意:用户运行Obtain,组织方运行Issue,二者交互,最终输出凭证
σ
\sigma
σ
用户运行Show,验证者运行Verify,二者交互。Show允许用户证明他属性的一个子集
{
m
i
}
i
∈
I
\{m_i\}_{i\in\mathcal{I}}
{mi}i∈I已通过认证
Construction
- 用户可以在不透露 u s k usk usk的情况下得到 u s k usk usk和属性集 { m i } i = 1 n \{m_i\}_{i=1}^n {mi}i=1n上的可编校签名 σ \sigma σ。这样的签名 σ \sigma σ就充当该用户的凭证。
- 为了表示对部分属性 { m i } i ∈ I \{m_i\}_{i\in \mathcal{I}} {mi}i∈I的凭证,用户本质上是在 σ \sigma σ和 { u s k } ∪ { m i } i ∈ I \{usk\}\cup\{m_i\}_{i\in \mathcal{I}} {usk}∪{mi}i∈I上运行Derive算法并证明 u s k usk usk的知识
具体构建如下
- 为了获得一组属性 { m i } i = 1 n \{m_i\}_{i=1}^n {mi}i=1n上的匿名凭证,用户首先发送自己的公钥 u p k upk upk以及对 u s k usk usk的知识证明,例如使用Schnorr协议.
- 如果证明是正确的,组织方随机选择
r
←
Z
p
r\leftarrow\mathbb{Z}_p
r←Zp,并返回
σ
=
(
σ
~
1
,
σ
~
2
)
=
(
g
~
r
,
u
p
k
r
⋅
y
0
⋅
g
~
r
(
x
+
∑
i
=
1
n
y
i
⋅
m
i
)
)
\sigma=(\widetilde{\sigma}_1,\widetilde{\sigma}_2)=(\widetilde{g}^r,{\rm upk}^{r\cdot y_0}\cdot \widetilde{g}^{r(x+\sum_{i=1}^n y_i\cdot m_i)})
σ=(σ
1,σ
2)=(g
r,upkr⋅y0⋅g
r(x+∑i=1nyi⋅mi))给用户
(直观地说,用户先向组织方证明自己确实是私钥 u s k usk usk的主人但不能泄露 u s k usk usk,验证通过后组织方用用户的公钥和自己的私钥生成对所有属性的凭证)
(注意 σ ~ 2 \widetilde{\sigma}_2 σ 2中第一组分量可整理成与第二组一致的形式 u p k r ⋅ y 0 = g ~ r ( y 0 ⋅ u s k ) {\rm upk}^{r\cdot y_0}=\widetilde{g}^{r(y_0\cdot{\rm usk}) } upkr⋅y0=g r(y0⋅usk),可以看出这里其实是用 u s k {\rm usk} usk作为" m 0 m_0 m0",并引入一个随机性 r r r。如上所述,这是一个 u s k usk usk和属性集 { m i } i = 1 n \{m_i\}_{i=1}^n {mi}i=1n上的签名)
前面user的操作似曾相识呀!就是基本等同于对不可链接性的操作,用一组随机的 t , r t,r t,r聚合了一个新的凭证(这个 r r r和issue阶段的 r r r不是同一个)。唯一不同之处在于,关于 i i i的范围加入了 0 0 0,所以在 σ 2 ′ \sigma_2' σ2′中对应的部分有变化 - B = e ( g x ⋅ g t ⋅ ∏ j ∈ [ 1 , n ] \ I Y j m j ∏ i ∈ I Y i m i , ( σ ~ 1 ′ ) − 1 ) = e ( g x + t + ∑ j = 1 n y j ⋅ m j , ( σ ~ 1 ′ ) − 1 ) B=e(g^x\cdot g^t\cdot\prod_{j\in[1,n]\backslash\mathcal{I}}Y_j^{m_j}\prod_{i\in\mathcal{I}}Y_i^{m_i},(\widetilde{\sigma}_1')^{-1})=e(g^{x+t+\sum_{j=1}^n y_j\cdot m_j},(\widetilde{\sigma}_1')^{-1}) B=e(gx⋅gt⋅∏j∈[1,n]\IYjmj∏i∈IYimi,(σ 1′)−1)=e(gx+t+∑j=1nyj⋅mj,(σ 1′)−1)
- 验证条件1的作用类似于verify的条件1,即验证
I
\mathcal{I}
I的签名
R H S = [ B ⋅ e ( g , σ ~ 2 r ⋅ ( σ ~ 1 ′ ) t ) ] c = [ e ( g , ( σ ~ 1 ′ ) − ( x + t + ∑ j = 1 n y j ⋅ m j ) ) ⋅ e ( g , ( σ ~ 1 ′ ) u s k ⋅ y 0 ⋅ ( σ ~ 1 ′ ) x + ∑ i = 1 n y i ⋅ m i ⋅ ( σ ~ 1 ′ ) t ) ] c ( 抵 消 ) = e ( g , σ ~ 1 ′ ) c ⋅ u s k ⋅ y 0 = e ( g y 0 , σ ~ 1 ′ ) s − k ( 去 盲 ) = e ( Y 0 s , σ ~ 1 ′ ) ⋅ C − 1 = L H S \begin{aligned} RHS&=[B\cdot e(g,\widetilde{\sigma}_2^r\cdot (\widetilde{\sigma}_1')^t)]^c\\ &=[e(g,(\widetilde{\sigma}_1')^{-(x+t+\sum_{j=1}^n y_j\cdot m_j)})\cdot e(g, (\widetilde{\sigma}_1')^{{\rm usk}\cdot y_0}\cdot (\widetilde{\sigma}_1')^{x+\sum_{i=1}^n y_i\cdot m_i}\cdot (\widetilde{\sigma}_1')^t)]^c\\ (抵消)&=e(g, \widetilde{\sigma}_1')^{c\cdot{\rm usk}\cdot y_0}=e(g^{y_0}, \widetilde{\sigma}_1')^{s-k}\\ (去盲)&=e(Y_0^s, \widetilde{\sigma}_1')\cdot C^{-1}=LHS\\ \end{aligned} RHS(抵消)(去盲)=[B⋅e(g,σ 2r⋅(σ 1′)t)]c=[e(g,(σ 1′)−(x+t+∑j=1nyj⋅mj))⋅e(g,(σ 1′)usk⋅y0⋅(σ 1′)x+∑i=1nyi⋅mi⋅(σ 1′)t)]c=e(g,σ 1′)c⋅usk⋅y0=e(gy0,σ 1′)s−k=e(Y0s,σ 1′)⋅C−1=LHS
分析:(1) B B B其实是verify中验证条件1的左边部分的-1次幂,而 e ( g , σ ~ 2 ′ ) e(g,\widetilde{\sigma}_2') e(g,σ 2′)是它对应的右边部分的形式,所以二者是可以相互抵消的。而又由于 B B B中涉及到的 σ ~ 1 ′ , σ 1 ′ \widetilde{\sigma}_1',\sigma_1' σ 1′,σ1′所认证的范围仅限于 { m i } i ∈ I \{m_i\}_{i\in\mathcal{I}} {mi}i∈I(和外面聚合的随机 r , t r,t r,t),而右边的 σ ~ 2 ′ \widetilde{\sigma}_2' σ 2′中则还包括了对 u s k usk usk的认证,所以 B B B能抵消部分而剩下 u s k usk usk的项。
到这里其实条件1已经验证了 { m i } i ∈ I \{m_i\}_{i\in\mathcal{I}} {mi}i∈I的认证,但还要认证用户的 u s k usk usk。
(2) c c c是组织方的挑战,为了不泄露 u s k usk usk,不能直接发送 c ⋅ u s k c\cdot usk c⋅usk, k k k的作用就是盲化。而验证的时候要去盲,所以用 C C C相当于 k k k的一个承诺发送给验证方。 - 验证条件2类似于verify的条件2,即为了安全性,确保
σ
1
′
\sigma_1'
σ1′中不含有
I
\mathcal{I}
I中成分
R H S = e ( ( ∏ i ∈ I 0 Y i ) t ⋅ ∏ i ∈ I 0 , j ∈ [ 1 , n ] \ I Z i , j m j , g ~ ) = e ( ( ∏ i ∈ I 0 Y i ) t ⋅ ∏ j ∈ [ 1 , n ] \ I ( ∏ i ∈ I 0 Y i ) y j ⋅ m j , g ~ ) = e ( ( g ∑ i ∈ I 0 y i ) t + ∑ j ∈ [ 1 , n ] \ I y j ⋅ m j , g ~ ) = e ( ( g ) t + ∑ j ∈ [ 1 , n ] \ I y j ⋅ m j , g ~ ∑ i ∈ I 0 y i ) = e ( σ 1 ′ , ∏ i ∈ I 0 Y ~ i ) = L H S \begin{aligned} RHS&=e((\prod_{i\in\mathcal{I}_0}Y_i)^t\cdot \prod_{i\in\mathcal{I}_0,j\in[1,n]\backslash\mathcal{I}}Z_{i,j}^{m_j},\widetilde{g})\\ &=e((\prod_{i\in\mathcal{I}_0}Y_i)^t\cdot \prod_{j\in[1,n]\backslash\mathcal{I}}(\prod_{i\in\mathcal{I}_0}Y_i)^{y_j\cdot m_j},\widetilde{g})\\ &=e((g^{\sum_{i\in\mathcal{I}_0}y_i})^{t+\sum_{j\in[1,n]\backslash\mathcal{I}}y_j\cdot m_j},\widetilde{g})\\ &=e((g)^{t+\sum_{j\in[1,n]\backslash\mathcal{I}}y_j\cdot m_j},\widetilde{g}^{\sum_{i\in\mathcal{I}_0}y_i})\\ &=e(\sigma_1',\prod_{i\in\mathcal{I}_0}\widetilde{Y}_i)=LHS \end{aligned} RHS=e((i∈I0∏Yi)t⋅i∈I0,j∈[1,n]\I∏Zi,jmj,g )=e((i∈I0∏Yi)t⋅j∈[1,n]\I∏(i∈I0∏Yi)yj⋅mj,g )=e((g∑i∈I0yi)t+∑j∈[1,n]\Iyj⋅mj,g )=e((g)t+∑j∈[1,n]\Iyj⋅mj,g ∑i∈I0yi)=e(σ1′,i∈I0∏Y i)=LHS
与verify中唯一不同在于 i ∈ I 0 i\in\mathcal{I}_0 i∈I0,确保 σ 1 ′ \sigma_1' σ1′中不含有 I \mathcal{I} I中成分及与 u s k usk usk有关的成分.