BBS Group Signature
群签名方案是一种允许群成员代表群匿名签名消息的方法,我们接下来介绍由 Boneh, Boyen and Shacham 在2004年提出的一个 BBS signatures 简短群签名方案 Short Group Signatures。
Complexity Assumpations
The Strong Diffle-Hellman Assumpation
G 1 , G 2 G_1,G_2 G1,G2 是阶数为 p p p 的循环群。 g 1 g_1 g1 是 G 1 G_1 G1 的生成元, g 2 g_2 g2 是 G 2 G_2 G2 的生成元。
q-Strong Diffle-Hellman Problem. 在
(
G
1
,
G
2
)
(G_1,G_2)
(G1,G2) q-SDH 问题是:给定一个
(
q
+
2
)
(q+2)
(q+2) 个元素的元组
(
g
1
,
g
2
,
g
2
γ
,
g
2
(
γ
2
)
,
.
.
.
,
g
2
(
γ
q
)
)
(g_1,g_2,g_2^\gamma,g_2^{(\gamma^2)},...,g_2^{(\gamma^q)})
(g1,g2,g2γ,g2(γ2),...,g2(γq)) 作为输入,输出
(
g
1
1
/
(
γ
+
x
)
,
x
)
(g_1^{1/(\gamma+x)},x)
(g11/(γ+x),x) 其中
x
∈
Z
p
∗
x\in Z_p^*
x∈Zp∗。算法
A
\mathcal{A}
A 在
(
G
1
,
G
2
)
(G_1,G_2)
(G1,G2) 下解决 q-SDH 问题下有优势
ϵ
\epsilon
ϵ:
P
r
[
A
(
g
1
,
g
2
,
g
2
γ
,
.
.
.
,
g
2
(
γ
q
)
)
=
(
g
1
1
γ
+
x
,
x
)
]
≥
ϵ
Pr[\mathcal{A}(g_1,g_2,g_2^\gamma,...,g_2^{(\gamma^q)})=(g_1^{\frac{1}{\gamma+x}},x)]\ge \epsilon
Pr[A(g1,g2,g2γ,...,g2(γq))=(g1γ+x1,x)]≥ϵ
这是一个困难问题,算法 A 并不知道 x , γ x,\gamma x,γ 的值,且要构造出 g 1 1 γ + x g_1^{\frac{1}{\gamma+x}} g1γ+x1,成功的概率几乎为 0 0 0。这比基本的离散对数问题更为复杂,1. x x x 并不知道,找到正确的 x x x ,需要穷举所有的群元素。2. 如果知道了 x x x,找到符合条件的 B B B,可以利用双线性配对的一些性质来求解,但同样需要穷举所有的群元素。
The Decision Linear Diffle-Hellman Assumption
Decision Linear Problem in G 1 G_1 G1. 给定 u , v , h , u a , v b , h c ∈ G 1 u,v,h,u^a,v^b,h^c \in G_1 u,v,h,ua,vb,hc∈G1 作为输入,当 a + b = c a+b=c a+b=c 时输出 yes,反之输出 no。
更准确地说,我们定义了算法
A
\mathcal{A}
A 在
G
1
G_1
G1 的决策线性问题的优势:
A
d
v
L
i
n
e
a
r
A
=
d
e
f
∣
P
r
[
A
(
u
,
v
,
h
,
u
a
,
v
b
,
h
a
+
b
)
=
y
e
s
:
u
,
v
,
h
←
G
1
,
a
,
b
←
Z
p
]
−
P
r
[
A
(
u
,
v
,
h
,
u
a
,
v
b
,
η
)
=
y
e
s
:
u
,
v
,
h
,
η
←
G
1
,
a
,
b
←
Z
p
]
∣
\mathrm{AdvLinear}_{A}\overset{\mathrm{def}}{=}\begin{vmatrix} Pr[\mathcal{A}(u,v,h,u^a,v^b,h^{a+b})=\mathrm{yes}:u,v,h\leftarrow G_1,a,b\leftarrow Z_p]\\ -Pr[\mathcal{A}(u,v,h,u^a,v^b,\eta)=\mathrm{yes}:u,v,h,\eta\leftarrow G_1,a,b\leftarrow Z_p] \end{vmatrix}
AdvLinearA=def
Pr[A(u,v,h,ua,vb,ha+b)=yes:u,v,h←G1,a,b←Zp]−Pr[A(u,v,h,ua,vb,η)=yes:u,v,h,η←G1,a,b←Zp]
Linear Encryptio
决策线性问题产生了线性加密(LE)方案,LE 是 Elgamal 加密的自然扩展。在 LE 方案中,一个用户的公钥是
3
3
3 个生成元
u
,
v
,
h
∈
G
1
u,v,h \in G_1
u,v,h∈G1。她的私钥是
x
,
y
∈
Z
p
x,y \in Z_p
x,y∈Zp,使得
u
x
=
v
y
=
h
u^x=v^y=h
ux=vy=h。为了加密一个消息
M
∈
G
1
M\in G_1
M∈G1,选择两个随机数
a
,
b
∈
Z
p
a,b\in Z_p
a,b∈Zp,输出元组
(
u
a
,
v
b
,
m
⋅
h
a
+
b
)
(u^a,v^b,m\cdot h^{a+b})
(ua,vb,m⋅ha+b)。为了从密文
(
T
1
,
T
2
,
T
3
)
(T_1,T_2,T_3)
(T1,T2,T3) 中恢复出消息
M
M
M,用户计算
M
=
T
3
T
1
x
⋅
T
2
y
M=\frac{T_3}{T_1^x\cdot T_2^y}
M=T1x⋅T2yT3
M
=
m
⋅
h
a
+
b
u
a
x
⋅
v
b
y
=
m
⋅
h
a
+
b
h
a
⋅
h
b
M=\frac{m\cdot h^{a+b}}{u^{ax}\cdot v^{by}}=\frac{m\cdot h^{a+b}}{h^a\cdot h^b}
M=uax⋅vbym⋅ha+b=ha⋅hbm⋅ha+b
A Zero-Knowledge Protocol for SDH
公开参数为 g 1 , u , v , h ∈ G 1 g_1,u,v,h \in G_1 g1,u,v,h∈G1 和 g 2 , w ∈ G 2 g_2,w \in G_2 g2,w∈G2。其中 u , v , h u,v,h u,v,h 是 G 1 G_1 G1 中的随机数, g 2 g_2 g2 是 G 2 G_2 G2 的生成元, w = g 2 γ , r ∈ Z p w=g_2^\gamma, r\in Z_p w=g2γ,r∈Zp。该协议证明其拥有一对 ( A , x ) (A,x) (A,x),其中 A ∈ G 1 A\in G_1 A∈G1 和 x ∈ Z p x\in Z_p x∈Zp,使得 A x + γ = g 1 A^{x+\gamma}=g_1 Ax+γ=g1。例如一个 pair 满足 e ( A , w g 2 x ) = e ( g 1 , g 2 ) e(A,wg_2^x)=e(g_1,g_2) e(A,wg2x)=e(g1,g2)。我们使用一个 Schnorr 的推广协议来证明素数阶群中的离散对数知识。
Protocol 1. Alice 作为证明者,选择指数
α
,
β
←
Z
p
\alpha,\beta\leftarrow Z_p
α,β←Zp,并计算一个
A
A
A 的线性加密:
T
1
←
u
α
,
T
2
←
v
β
,
T
3
←
A
h
α
+
β
T_1\leftarrow u^\alpha,T_2\leftarrow v^{\beta},T_3\leftarrow Ah^{\alpha+\beta}
T1←uα,T2←vβ,T3←Ahα+β
她同时计算两个辅助值
δ
1
←
x
α
\delta_1 \leftarrow x\alpha
δ1←xα 和
δ
2
←
x
β
∈
Z
p
\delta_2\leftarrow x\beta \in Z_p
δ2←xβ∈Zp。
Alice 和 Bob 进行值
(
α
,
β
,
x
,
δ
1
,
δ
2
)
(\alpha,\beta,x,\delta_1,\delta_2)
(α,β,x,δ1,δ2) 的知识,证明满足以下
5
5
5 个等式:
u
α
=
T
1
,
v
β
=
T
2
,
e
(
T
3
,
g
2
)
x
⋅
e
(
h
,
w
)
−
α
−
β
⋅
e
(
h
,
g
2
)
−
δ
1
−
δ
2
=
e
(
g
1
,
g
2
)
/
e
(
T
3
,
w
)
,
T
1
x
u
−
δ
1
=
1
,
T
2
x
v
−
δ
2
=
1
u^{\alpha}=T_1,v^{\beta}=T_2,e(T_3,g_2)^x\cdot e(h,w)^{-\alpha-\beta} \cdot e(h,g_2)^{-\delta_1-\delta_2}=e(g_1,g_2)/e(T_3,w),T_1^xu^{-\delta_1}=1,T_2^xv^{-\delta_2}=1
uα=T1,vβ=T2,e(T3,g2)x⋅e(h,w)−α−β⋅e(h,g2)−δ1−δ2=e(g1,g2)/e(T3,w),T1xu−δ1=1,T2xv−δ2=1
对
(
α
,
β
,
x
,
δ
1
,
δ
2
)
(\alpha,\beta,x,\delta_1,\delta_2)
(α,β,x,δ1,δ2) 的知识证明如下,Alice 选择盲因子
r
α
,
r
β
,
r
x
,
r
δ
1
,
r
δ
2
∈
Z
q
r_{\alpha},r_{\beta},r_x,r_{\delta_1},r_{\delta_2} \in Z_q
rα,rβ,rx,rδ1,rδ2∈Zq,结合这些盲因子计算
5
5
5 个值:
R
1
←
u
r
α
,
R
2
←
v
r
β
,
R
3
←
e
(
T
3
,
g
2
)
r
x
⋅
e
(
h
,
w
)
−
r
α
−
r
β
⋅
e
(
h
,
g
2
)
−
r
δ
1
−
r
δ
2
,
R
4
←
T
1
r
x
u
−
r
δ
1
,
R
5
←
T
2
r
x
v
−
r
δ
2
R_1\leftarrow u^{r_{\alpha}},R_2\leftarrow v^{r_\beta},R_3\leftarrow e(T_3,g_2)^{r_x}\cdot e(h,w)^{-r_\alpha-r_\beta} \cdot e(h,g_2)^{-r_{\delta_1}-r_{\delta_2}},R_4\leftarrow T_1^{r_x}u^{-r_{\delta_1}},R_5\leftarrow T_2^{r_x}v^{-r_{\delta_2}}
R1←urα,R2←vrβ,R3←e(T3,g2)rx⋅e(h,w)−rα−rβ⋅e(h,g2)−rδ1−rδ2,R4←T1rxu−rδ1,R5←T2rxv−rδ2
Alice 发送
(
T
1
,
T
2
,
T
3
,
R
1
,
R
2
,
R
3
,
R
4
,
R
5
)
(T_1,T_2,T_3,R_1,R_2,R_3,R_4,R_5)
(T1,T2,T3,R1,R2,R3,R4,R5) 给 Bob。Bob 选择发送一个挑战值
c
∈
Z
p
c\in Z_p
c∈Zp。Alice 计算并回送响应给 Bob:
s
α
←
r
α
+
c
α
,
s
β
←
r
β
+
c
β
,
s
x
←
r
x
+
c
x
,
s
δ
1
←
r
δ
1
+
c
δ
1
,
s
δ
2
←
r
δ
2
+
c
δ
2
s_\alpha\leftarrow r_\alpha+c\alpha,s_\beta\leftarrow r_{\beta}+c\beta,s_x\leftarrow r_x+cx,s_{\delta_1}\leftarrow r_{\delta_1}+ c\delta_1,s_{\delta_2}\leftarrow r_{\delta_2}+c\delta_2
sα←rα+cα,sβ←rβ+cβ,sx←rx+cx,sδ1←rδ1+cδ1,sδ2←rδ2+cδ2
最后,Bob 验证这五个等式:
u
s
α
=
T
1
c
⋅
R
1
,
v
s
β
=
T
2
c
⋅
R
2
u^{s_\alpha}=T_1^c\cdot R_1,v^{s\beta}=T_2^c\cdot R_2
usα=T1c⋅R1,vsβ=T2c⋅R2
e
(
T
3
,
g
2
)
s
x
⋅
e
(
h
,
w
)
−
s
α
−
s
β
⋅
e
(
h
,
g
2
)
−
s
δ
1
−
s
δ
2
=
(
e
(
g
1
,
g
2
)
/
e
(
T
3
,
w
)
c
)
⋅
R
3
e(T_3,g_2)^{s_x}\cdot e(h,w)^{-s_\alpha-s_\beta}\cdot e(h,g_2)^{-s_{\delta_1}-s_{\delta_2}}=(e(g_1,g_2)/e(T_3,w)^c)\cdot R_3
e(T3,g2)sx⋅e(h,w)−sα−sβ⋅e(h,g2)−sδ1−sδ2=(e(g1,g2)/e(T3,w)c)⋅R3
T
1
s
x
⋅
u
−
s
δ
1
=
R
4
,
T
2
s
x
⋅
v
−
s
δ
2
=
R
5
T_1^{s_x}\cdot u^{-s_{\delta_1}}=R_4,T_2^{s_x}\cdot v^{-s_{\delta_2}}=R_5
T1sx⋅u−sδ1=R4,T2sx⋅v−sδ2=R5
正确性:
e ( T 3 , g 2 ) s x ⋅ e ( h , w ) − s α − s β ⋅ e ( h , g 2 ) − s δ 1 − s δ 2 = e ( T 3 , g 2 ) r x + c x ⋅ e ( h , w ) − r α − r β − c α − c β ⋅ e ( h , g 2 ) − r δ 1 − r δ 2 − c x α − c x β = e ( T 3 , g 2 x ) c ⋅ e ( h − α − β , w g 2 x ) c ⋅ ( e ( T 3 , g 2 ) r x ⋅ e ( h , w ) − r α − r β ⋅ e ( h , g 2 ) − r δ 1 − r δ 2 ) = e ( T 3 h − α − β , w g 2 x ) c ⋅ e ( T 3 , w ) − c ⋅ ( R 3 ) = ( e ( A , w g 2 x ) e ( T 3 , w ) ) c ⋅ R 3 = ( e ( g 1 , g 2 ) e ( T 3 , w ) ) c ⋅ R 3 e(T_3,g_2)^{s_x}\cdot e(h,w)^{-s_\alpha-s_\beta}\cdot e(h,g_2)^{-s_{\delta_1}-s_{\delta_2}}\\ =e(T_3,g_2)^{r_x+cx}\cdot e(h,w)^{-r_\alpha-r_{\beta}-c\alpha-c\beta}\cdot e(h,g_2)^{-r_{\delta_1}-r_{\delta_2}-cx\alpha-cx\beta} \\ =e(T_3,g_2^x)^c\cdot e(h^{-\alpha-\beta},wg_2^x)^c\cdot(e(T_3,g_2)^{r_x}\cdot e(h,w)^{-r_{\alpha}-r_\beta}\cdot e(h,g_2)^{-r\delta_1-r\delta_2})\\ =e(T_3h^{-\alpha-\beta},wg_2^x)^c\cdot e(T_3,w)^{-c}\cdot(R_3)=(\frac{e(A,wg_2^x)}{e(T_3,w)})^c\cdot R_3=(\frac{e(g_1,g_2)}{e(T_3,w)})^c\cdot R_3 e(T3,g2)sx⋅e(h,w)−sα−sβ⋅e(h,g2)−sδ1−sδ2=e(T3,g2)rx+cx⋅e(h,w)−rα−rβ−cα−cβ⋅e(h,g2)−rδ1−rδ2−cxα−cxβ=e(T3,g2x)c⋅e(h−α−β,wg2x)c⋅(e(T3,g2)rx⋅e(h,w)−rα−rβ⋅e(h,g2)−rδ1−rδ2)=e(T3h−α−β,wg2x)c⋅e(T3,w)−c⋅(R3)=(e(T3,w)e(A,wg2x))c⋅R3=(e(T3,w)e(g1,g2))c⋅R3
Short Group Signature from SDH
KeyGen ( n ) (n) (n)
-
n n n 是群成员的大小, g 2 g_2 g2 是 G 2 G_2 G2 的生成元, g 1 ← ψ ( g 2 ) g_1\leftarrow \psi(g_2) g1←ψ(g2) 是群 G 1 G_1 G1 的生成元。选择 h ← G 1 { 1 G 1 } h\leftarrow G_1\{1_{G_1}\} h←G1{1G1}(表示 h h h 是 G 1 G_1 G1 中除了单位元的任意元素)和 ξ 1 , ξ 2 ← Z p ∗ \xi_1,\xi_2 \leftarrow Z_p^* ξ1,ξ2←Zp∗,设置 u , v ∈ G 1 u,v \in G_1 u,v∈G1 使得 u ξ 1 = v ξ 2 = h u^{\xi_1}=v^{\xi_2}=h uξ1=vξ2=h。选择 γ ← Z p ∗ \gamma \leftarrow Z_p^* γ←Zp∗ ,计算 w = g 2 γ w=g_2^\gamma w=g2γ。
-
使用 γ \gamma γ,为每个用户 i , 1 ≤ i ≤ n i,1\le i \le n i,1≤i≤n 生成一个 SDH 元组 ( A i , x i ) (A_i,x_i) (Ai,xi):选择 x i ← Z p ∗ x_i\leftarrow Z_p^* xi←Zp∗,并设置 A i ← g 1 1 / ( γ + x i ) ∈ G 1 A_i\leftarrow g_1^{1/(\gamma+x_i)}\in G_1 Ai←g11/(γ+xi)∈G1。
-
群公钥为 g p k = ( g 1 , g 2 , h , u , v , w ) gpk=(g_1,g_2,h,u,v,w) gpk=(g1,g2,h,u,v,w),群管理员的私钥为 ( ξ 1 , ξ 2 ) (\xi_1,\xi_2) (ξ1,ξ2),每个用户的私钥为一个元组 g s k [ i ] = ( A i , x i ) gsk[i]=(A_i,x_i) gsk[i]=(Ai,xi)。
Sign ( g p k , g s k [ i ] , M ) (gpk,gsk[i],M) (gpk,gsk[i],M)
给定群公钥 g p k = ( g 1 , g 2 , h , u , v , w ) gpk=(g_1,g_2,h,u,v,w) gpk=(g1,g2,h,u,v,w),一个用户的私钥 g s k [ i ] = ( A i , x i ) gsk[i]=(A_i,x_i) gsk[i]=(Ai,xi),和一个消息 M ∈ { 0 , 1 } ∗ M\in \{0,1\}^* M∈{0,1}∗,计算签名如下:
- 通过 protocol 1,计算值 T 1 , T 2 , T 3 , R 1 , R 2 , R 3 , R 4 , R 5 T_1,T_2,T_3,R_1,R_2,R_3,R_4,R_5 T1,T2,T3,R1,R2,R3,R4,R5
- 计算挑战值 c c c: c ← H ( M , T 1 , T 2 , T 3 , R 1 , R 2 , R 3 , R 4 , R 5 ) ∈ Z p c\leftarrow H(M,T_1,T_2,T_3,R_1,R_2,R_3,R_4,R_5)\in Z_p c←H(M,T1,T2,T3,R1,R2,R3,R4,R5)∈Zp
- 使用 c 构造出响应值 s α , s β , s x , s δ 1 , s δ 2 s_\alpha,s_\beta,s_x,s_{\delta_1},s_{\delta_2} sα,sβ,sx,sδ1,sδ2
- 输出签名 σ \sigma σ, σ ← ( T 1 , T 2 , T 3 , c , s α , s β , s x , s δ 1 , s δ 2 ) \sigma\leftarrow (T_1,T_2,T_3,c,s_\alpha,s_\beta,s_x,s_{\delta_1},s_{\delta_2}) σ←(T1,T2,T3,c,sα,sβ,sx,sδ1,sδ2)
Verify ( g p k , M , σ ) (gpk,M,\sigma) (gpk,M,σ)
给定群公钥 g p k = ( g 1 , g 2 , h , u , v , w ) gpk=(g_1,g_2,h,u,v,w) gpk=(g1,g2,h,u,v,w),一个消息 M M M,和一个群签名 σ \sigma σ,验证 σ \sigma σ 是一个合法签名:
- 使用 protocol 1,重新推导出
R
1
,
R
2
,
R
3
,
R
4
,
R
5
R_1,R_2,R_3,R_4,R_5
R1,R2,R3,R4,R5 如下:
R 1 ~ ← u s α ⋅ T 1 − c , R 2 ~ ← v s β ⋅ T 2 − c , R 3 ~ ← e ( T 3 , g 2 ) s x ⋅ e ( h , w ) − s α − s β ⋅ e ( h , g 2 ) − s δ 1 − s δ 2 , R 4 ← T 1 r x u − r δ 1 ⋅ ( e ( T 3 , w ) / e ( g 1 , g 2 ) ) c , R 5 ~ ← T 2 s x v − s δ 2 \tilde{R_1}\leftarrow u^{s_{\alpha}}\cdot T_1^{-c},\tilde{R_2}\leftarrow v^{s_\beta}\cdot T_2^{-c},\tilde{R_3}\leftarrow e(T_3,g_2)^{s_x}\cdot e(h,w)^{-s_\alpha-s_\beta} \cdot e(h,g_2)^{-s_{\delta_1}-s_{\delta_2}},R_4\leftarrow T_1^{r_x}u^{-r_{\delta_1}}\cdot (e(T_3,w)/e(g_1,g_2))^c,\tilde{R_5}\leftarrow T_2^{s_x}v^{-s_{\delta_2}} R1~←usα⋅T1−c,R2~←vsβ⋅T2−c,R3~←e(T3,g2)sx⋅e(h,w)−sα−sβ⋅e(h,g2)−sδ1−sδ2,R4←T1rxu−rδ1⋅(e(T3,w)/e(g1,g2))c,R5~←T2sxv−sδ2 - 检查挑战值
c
c
c,验证成功,则签名验证完成:
c = ? H ( M , T 1 , T 2 , T 3 , R 1 ~ , R 2 ~ , R 3 ~ , R 4 ~ , R 5 ~ ) c\overset{?}{=}H(M,T_1,T_2,T_3,\tilde{R_1},\tilde{R_2},\tilde{R_3},\tilde{R_4},\tilde{R_5}) c=?H(M,T1,T2,T3,R1~,R2~,R3~,R4~,R5~)
Open ( g p k , g m s k , M , σ ) (gpk,gmsk,M,\sigma) (gpk,gmsk,M,σ)
该算法用于追踪签名具体是哪个用户,输入一个群公钥 g p k = ( g 1 , g 2 , h , u , v , w ) gpk=(g_1,g_2,h,u,v,w) gpk=(g1,g2,h,u,v,w) 以及相应群管理员的私钥 g m s k = ( ξ 1 , ξ 2 ) gmsk=(\xi_1,\xi_2) gmsk=(ξ1,ξ2),消息 M M M 和签名 σ = ( T 1 , T 2 , T 3 , c , s α , s β , s x , s δ 1 , s δ 2 ) \sigma=(T_1,T_2,T_3,c,s_\alpha,s_\beta,s_x,s_{\delta_1},s_{\delta_2}) σ=(T1,T2,T3,c,sα,sβ,sx,sδ1,sδ2)。追踪过程为:
- 验证 σ \sigma σ 是 M M M 上的有效签名
- 将 ( T 1 , T 2 , T 3 ) (T_1,T_2,T_3) (T1,T2,T3) 视为线性加密,通过计算 A ← T 3 T 1 ξ 1 ⋅ T 2 ξ 2 A\leftarrow \frac{T_3}{T_1^{\xi_1}\cdot T_2^{\xi_2}} A←T1ξ1⋅T2ξ2T3