David Pointcheval, Olivier Sanders. Short Randomizable Signatures.https://link.springer.com/chapter/10.1007/978-3-319-29485-8_7
Short Randomizable Signatures
Bilinear Groups
文献Galbraith, S.D., Paterson, K.G., Smart, N.P.: Pairings for cryptographers. Discrete Appl. Math. 156(16), 3113–3121 (2008) 定义了3种类型的双线性配对:
- type 1: G 1 = G 2 \mathbb{G_1=G_2} G1=G2
- type 2: G 1 ≠ G 2 \mathbb{G_1\neq G_2} G1=G2,但存在一个有效同态 ϕ : G 2 → G 1 \phi:\mathbb{G_2\rightarrow G_1} ϕ:G2→G1,反方向则不存在
- type 3: G 1 ≠ G 2 \mathbb{G_1\neq G_2} G1=G2,在任何方向都不存在 G 1 \mathbb{G_1} G1和 G 2 \mathbb{G_2} G2间的有效可计算的同态
这个文章中涉及的方案全部是基于type 3的配对,使用type 1或者type 2会导致签名方案完全不安全
A Single-Message Signature Scheme
A Multi-message Signature Scheme
A Sequential Aggregate Signature
用一种滚雪球的方式生成多消息签名,注意1)每个消息的签名公钥须不同 2)验证时整体查验所有签名
假设某用户发布了一个对r-零向量的签名 ( 0 , . . . , 0 ) : ( g , X ) = ( g , g x ) ∈ G 1 2 (0,...,0):(g,X)=(g,g^x)\in\mathbb{G}_1^2 (0,...,0):(g,X)=(g,gx)∈G12,这个签名虽然不能帮助敌手伪造非0向量的签名,但可以使标量 x x x不能再用作签名私钥:可签名一个向量 ( m 1 , . . . , m r ) (m_1,...,m_r) (m1,...,mr),随机数 t ← Z p t\leftarrow\mathbb{Z}_p t←Zp,计算签名 ( g t , ( X ) t ⋅ ( g t ) ∑ y j ⋅ m j ) (g^t,(X)^t\cdot(g^t)^{\sum y_j\cdot m_j}) (gt,(X)t⋅(gt)∑yj⋅mj)
- 每个签署人 j j j(从 1 1 1到 r r r)生成自己的签名密钥和验证密钥 ( y j , Y ~ j ) (y_j, \widetilde{Y}_j) (yj,Y j),但使用公共参数中的相同元素 X X X。
- 为了签署消息 m 1 ∈ Z p ∗ m_1\in\mathbb{Z}_p^* m1∈Zp∗,随机选择 t 1 ∈ Z p t_1\in\mathbb{Z}_p t1∈Zp,输出签名 ( σ 1 , σ 2 ) ← ( g t 1 , ( X ) t 1 ⋅ ( g t 1 ) y 1 ⋅ m 1 ) (\sigma_1,\sigma_2)\leftarrow(g^{t_1},(X)^{t_1}\cdot(g^{t_1})^{y_1\cdot m_1}) (σ1,σ2)←(gt1,(X)t1⋅(gt1)y1⋅m1)
- 后续的签名者2可以在
m
2
m_2
m2上生成聚合签名:随机选择
t
2
t_2
t2,签名
(
σ
1
′
,
σ
2
′
)
←
(
σ
1
t
2
,
(
σ
2
⋅
σ
1
y
2
⋅
m
2
)
t
2
)
(\sigma_1',\sigma_2')\leftarrow(\sigma_1^{t_2},(\sigma_2\cdot\sigma_1^{y_2\cdot m_2})^{t_2})
(σ1′,σ2′)←(σ1t2,(σ2⋅σ1y2⋅m2)t2)
( σ 1 t 2 , ( σ 2 ⋅ σ 1 y 2 ⋅ m 2 ) t 2 ) = ( g t 1 ⋅ t 2 , ( ( g x ) t 1 ⋅ ( g t 1 ) y 1 ⋅ m 1 ⋅ ( g t 1 ) y 2 ⋅ m 2 ) t 2 ) = ( g t 1 ⋅ t 2 , ( g t 1 ⋅ t 2 ) x + y 1 ⋅ m 1 + y 2 ⋅ m 2 ) (\sigma_1^{t_2},(\sigma_2\cdot\sigma_1^{y_2\cdot m_2})^{t_2})=(g^{t_1\cdot t_2},((g^x)^{t_1}\cdot(g^{t_1})^{y_1\cdot m_1}\cdot(g^{t_1})^{y_2\cdot m_2})^{t_2})=(g^{t_1\cdot t_2},(g^{t_1\cdot t_2})^{x+y_1\cdot m_1+y_2\cdot m_2}) (σ1t2,(σ2⋅σ1y2⋅m2)t2)=(gt1⋅t2,((gx)t1⋅(gt1)y1⋅m1⋅(gt1)y2⋅m2)t2)=(gt1⋅t2,(gt1⋅t2)x+y1⋅m1+y2⋅m2)
r
=
0
r=0
r=0,是第一个签名
r
>
0
r>0
r>0,如果前置签名无法通过验证,停止
m
=
0
m=0
m=0,如果被签名的消息是0,停止
如果当前签名公钥是前置签名公钥之一,停止
如果能通过所有停止条件且不是第一个签名,按照上文原理生成新的聚合签名(如果这个签名还有后置签名,那它的公钥
p
k
pk
pk和
m
m
m都被加入到
m
i
,
p
k
i
m_i,pk_i
mi,pki集的末位中)
验证原理等同于Multi-message Signature
Useful Features
Signing Committed Messages
许多密码学原语需要获得committed (or transformed) values上的签名。
例如:在一些group签名中,用户不能直接把
m
m
m发给组管理器,而是发送一个公共值
g
m
g^m
gm。并用这个值开启一个协议生成
m
m
m的签名。
协议场景:将
g
m
g^m
gm提交给签名者并证明
m
m
m的知识,如果证明有效,返回签名
σ
=
(
σ
1
,
σ
2
)
←
(
g
u
,
(
g
x
⋅
(
g
m
)
y
)
u
)
,
u
←
Z
p
\sigma=(\sigma_1,\sigma_2)\leftarrow(g^u,(g^x\cdot(g^m)^y)^u),u\leftarrow\mathbb{Z}_p
σ=(σ1,σ2)←(gu,(gx⋅(gm)y)u),u←Zp。但
g
m
g^m
gm在某些场景中(比如anonymous credentials)安全性不够,有时需要对消息的Pedersen Commitment进行签名
C
=
g
0
t
⋅
g
1
m
1
.
.
.
g
r
m
r
C=g_0^t\cdot g_1^{m_1}...g_r^{m_r}
C=g0t⋅g1m1...grmr,协议如下:
A Single-Message Protocol
(
g
u
,
(
X
C
)
u
)
=
(
g
u
,
(
g
x
g
t
g
y
⋅
m
)
u
)
=
(
g
u
,
(
g
u
)
x
+
y
⋅
m
(
g
u
)
t
)
(g^u,(XC)^u)=(g^u,(g^xg^tg^{y\cdot m})^u)=(g^u,(g^u)^{x+y\cdot m}(g^u)^t)
(gu,(XC)u)=(gu,(gxgtgy⋅m)u)=(gu,(gu)x+y⋅m(gu)t),用
(
σ
1
′
)
t
=
g
u
⋅
t
(\sigma_1')^t=g^{u\cdot t}
(σ1′)t=gu⋅t可消去与
t
t
t分量,使签名去盲化,变成
m
m
m的签名
A Multi-message Protocol
(
g
u
,
(
X
C
)
u
)
=
(
g
u
,
(
g
x
g
t
∏
i
=
1
r
g
y
i
⋅
m
i
)
u
)
=
(
g
u
,
(
g
u
)
x
+
∑
i
=
1
r
y
i
⋅
m
i
(
g
u
)
t
)
(g^u,(XC)^u)=(g^u,(g^xg^t\prod_{i=1}^rg^{y_i\cdot m_i})^u)=(g^u,(g^u)^{x+\sum_{i=1}^ry_i\cdot m_i}(g^u)^t)
(gu,(XC)u)=(gu,(gxgt∏i=1rgyi⋅mi)u)=(gu,(gu)x+∑i=1ryi⋅mi(gu)t),同理可去盲化得到
(
m
1
,
.
.
.
,
m
r
)
(m_1,...,m_r)
(m1,...,mr)的签名
Proving Knowledge of a Signature
如果仍然考虑匿名凭证的例子,那么前面的协议已经解决了它们的发布问题。然而,一旦用户获得了证书,他还必须能够使用它来证明其属性是经过认证的,同时保持匿名。通常采用文献(Camenisch, J.L., Lysyanskaya, A.: Signature schemes and anonymous credentials from bilinear maps. In: Franklin, M. (ed.) CRYPTO 2004. )的框架,故需要一种有效的方法证明签名的知识。
为了证明对消息
m
m
m的签名
σ
=
(
σ
1
,
σ
2
)
\sigma=(\sigma_1,\sigma_2)
σ=(σ1,σ2)的知识,用户将在虚拟公钥
g
~
\widetilde{g}
g
下聚合对某个随机消息
t
t
t的签名,生成的签名
σ
′
\sigma'
σ′在消息块
(
m
,
t
)
(m,t)
(m,t)上有效且不会泄露
m
m
m的信息。