CL-签名
《Signature Schemes and Anonymous Credentials from Bilinear Maps》
https://link.springer.com/chapter/10.1007/978-3-540-28628-8_4
A Simple Signature Scheme
Key Generation
初始化产生 ( q , G , G , g , g , e ) (q,G,\mathrm{G},g,\mathrm{g},e) (q,G,G,g,g,e)。它后续选择 x → Z q , y → Z q x \rightarrow Z_q, y \rightarrow Z_q x→Zq,y→Zq ,设置 s k = ( x , y ) , p k = ( q , G , G , g , g , e , X , Y ) sk=(x,y), pk=(q,G,\mathrm{G},g,\mathrm{g},e,X,Y) sk=(x,y),pk=(q,G,G,g,g,e,X,Y),其中 X = g x , Y = g y X=g^x, Y=g^y X=gx,Y=gy。
Signature
输入消息
m
m
m,私钥
(
x
,
y
)
(x,y)
(x,y),公钥
p
k
=
(
q
,
G
,
G
,
g
,
g
,
e
,
X
,
Y
)
pk=(q,G,\mathrm{G},g,\mathrm{g},e,X,Y)
pk=(q,G,G,g,g,e,X,Y),选择一个随机数
a
∈
G
a\in G
a∈G,输出签名
σ
\sigma
σ:
σ
=
(
a
,
a
y
,
a
x
+
m
x
y
)
\sigma=(a,a^y,a^{x+mxy})
σ=(a,ay,ax+mxy)
Verification
输入公钥
p
k
=
(
q
,
G
,
G
,
g
,
g
,
e
,
X
,
Y
)
pk=(q,G,\mathrm{G},g,\mathrm{g},e,X,Y)
pk=(q,G,G,g,g,e,X,Y),消息
m
m
m,签名
σ
=
(
a
,
b
,
c
)
\sigma=(a,b,c)
σ=(a,b,c),验证:
e
(
a
,
Y
)
=
?
e
(
g
,
b
)
;
e
(
X
,
a
)
⋅
e
(
X
,
b
)
m
=
?
e
(
g
,
c
)
e(a,Y)\overset{?}{=}e(g,b); \quad e(X,a)\cdot e(X,b)^m \overset{?}{=}e(g,c)
e(a,Y)=?e(g,b);e(X,a)⋅e(X,b)m=?e(g,c)
Signature on multiple messages
Key Generation
我们首先创建私钥
s
k
sk
sk,公钥
p
k
pk
pk,其中私钥
s
k
=
(
x
,
y
,
z
i
)
sk=(x,y,z_i)
sk=(x,y,zi),
i
i
i 表示有多少个消息。公钥
p
k
=
(
G
,
G
T
,
X
,
Y
,
Z
i
,
W
i
)
pk=(G,G_T,X,Y,Z_i,W_i)
pk=(G,GT,X,Y,Zi,Wi),其中
g
g
g 是
G
1
G_1
G1 的一个生成元。
X
=
g
x
,
Y
=
g
y
,
Z
i
=
g
z
i
,
W
i
=
Y
z
i
X=g^x,Y=g^y,Z_i=g^{z_i},W_i=Y^{z_i}
X=gx,Y=gy,Zi=gzi,Wi=Yzi
Signature Generation
选择一个随机数
α
\alpha
α,用于隐藏某些值,后续我们将产生签名值
(
a
,
b
,
c
,
A
,
B
)
(a,b,c,A,B)
(a,b,c,A,B),其中:
a
=
g
α
,
b
=
a
y
,
c
=
a
x
C
o
m
α
x
y
,
A
i
=
a
z
i
,
B
i
=
A
i
y
a=g^\alpha,b=a^y,c=a^xCom^{\alpha xy},A_i=a^{z_i},B_i=A_i^y
a=gα,b=ay,c=axComαxy,Ai=azi,Bi=Aiy
C
o
m
=
∏
i
=
1
s
Z
i
m
i
Com=\prod_{i=1}^{s}Z_i^{m_i}
Com=∏i=1sZimi,
s
s
s 是签名消息
m
i
m_i
mi 的总数,为了让签名者能够对一个未知消息产生签名,可以将消息的承诺发送给签名者,签名者可以利用这个承诺生成签名。
Verfication
我们要验证签名
(
a
,
b
,
c
,
A
,
B
)
(a,b,c,A,B)
(a,b,c,A,B),需要验证:
e
(
a
,
Z
i
)
=
?
e
(
g
,
A
i
)
;
e
(
a
,
Y
)
=
?
e
(
g
,
b
)
;
e
(
A
i
,
Y
)
=
?
e
(
g
,
B
i
)
;
e
(
g
,
c
)
=
?
e
(
X
,
a
)
∏
i
=
1
s
e
(
X
,
B
i
m
i
)
e(a,Z_i)\overset{?}{=} e(g,A_i);\quad e(a,Y)\overset{?}{=}e(g,b);\quad e(A_i,Y)\overset{?}{=}e(g,B_i);\quad e(g,c)\overset{?}{=}e(X,a)\prod_{i=1}^{s}e(X,B_i^{m_i})
e(a,Zi)=?e(g,Ai);e(a,Y)=?e(g,b);e(Ai,Y)=?e(g,Bi);e(g,c)=?e(X,a)i=1∏se(X,Bimi)
其中
e
(
g
,
c
)
=
?
e
(
X
,
a
)
∏
i
=
1
s
e
(
X
,
B
i
m
i
)
e(g,c)\overset{?}{=}e(X,a)\prod_{i=1}^{s}e(X,B_i^{m_i})
e(g,c)=?e(X,a)∏i=1se(X,Bimi) 的正确性如下:
e ( g , g α x ⋅ ( ∏ i = 1 s g z i m i ) α x y ) = e ( g x , g α ) ∏ i = 1 s e ( g x , g α z i y m i ) ⇒ e ( g , g ) α x + α x y ∑ i = 1 s z i m i = e ( g , g ) α x e ( g , g ) x α y ∑ i = 1 s z i m i e(g,g^{\alpha x}\cdot(\prod_{i=1}^{s}g^{z_im_i})^{\alpha xy})=e(g^x,g^\alpha)\prod_{i=1}^{s}e(g^x,g^{\alpha z_i y m_i})\Rightarrow e(g,g)^{\alpha x+\alpha xy\sum_{i=1}^{s}z_im_i}=e(g,g)^{\alpha x}e(g,g)^{x\alpha y \sum_{i=1}^{s}z_im_i} e(g,gαx⋅(i=1∏sgzimi)αxy)=e(gx,gα)i=1∏se(gx,gαziymi)⇒e(g,g)αx+αxy∑i=1szimi=e(g,g)αxe(g,g)xαy∑i=1szimi
LRSW Assumption
CL 签名的安全性依赖于 LRSW 假设。我们使得
X
,
Y
∈
G
,
X
=
g
x
,
Y
=
g
y
,
O
X
,
Y
(
⋅
)
X,Y\in G, X=g^x, Y=g^y,O_{X,Y}(\cdot)
X,Y∈G,X=gx,Y=gy,OX,Y(⋅) 是一个 oracle,输入一个值
m
∈
Z
q
m\in Z_q
m∈Zq,输出一个元组
A
=
(
a
,
a
y
,
a
x
+
m
x
y
)
A=(a,a^y,a^{x+mxy})
A=(a,ay,ax+mxy),
a
a
a 是一个随机数。然后对于所有多项式时间的敌手
A
\mathcal{A}
A,
v
(
k
)
v(k)
v(k) 是一个可以忽略的概率函数:
P
r
[
(
q
,
G
,
G
,
g
,
g
,
e
)
]
←
S
e
t
u
p
(
1
k
)
;
x
←
Z
q
;
y
←
Z
q
;
X
=
g
x
;
Y
=
g
y
;
(
m
,
a
,
b
,
c
)
←
A
O
X
,
Y
(
q
,
G
,
G
,
g
,
g
,
e
,
X
,
Y
)
:
m
∉
Q
∧
m
∈
Z
q
∧
m
≠
0
∧
a
∈
G
∧
b
=
a
y
∧
c
=
a
x
+
m
x
y
]
=
v
(
k
)
Pr[(q,G,\mathrm{G},g,\mathrm{g},e)]\leftarrow Setup(1^k);x \leftarrow Z_q;y \leftarrow Z_q;X=g^x;Y=g^y;\\ (m,a,b,c)\leftarrow \mathcal{A}^{O_{X,Y}}(q,G,\mathrm{G},g,\mathrm{g},e,X,Y):m \notin Q \wedge m\in Z_q \\ \wedge m\ne 0 \wedge a\in G \wedge b=a^y \wedge c=a^{x+mxy}]=v(k)
Pr[(q,G,G,g,g,e)]←Setup(1k);x←Zq;y←Zq;X=gx;Y=gy;(m,a,b,c)←AOX,Y(q,G,G,g,g,e,X,Y):m∈/Q∧m∈Zq∧m=0∧a∈G∧b=ay∧c=ax+mxy]=v(k)
其中
Q
Q
Q 是敌手
A
\mathcal{A}
A 对 oracle
O
X
,
Y
(
⋅
)
O_{X,Y}(\cdot)
OX,Y(⋅) 所做的查询集合(确保
A
\mathcal{A}
A 不能对同一个值
m
m
m 重复查询 oracle)。