盲签名 blind signature
Posted mutourend
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了盲签名 blind signature相关的知识,希望对你有一定的参考价值。
1. 引言
前序博客有:
- Coconut:可selective disclosure credentials的门限发行签名机制
- ECDSA VS Schnorr signature VS BLS signature
- 密码学算法——RSA
盲签名(blind signature)为:
一种数字签名的方式,在消息内容被签名之前,对于签名者来说消息内容是不可见的。
类比例子:对文件签名就是通过在信封里放一张复写纸,签名者在信封上签名时,他的签名便透过复写纸签到文件上。
盲签名除具有普通数字签名特征之外,还额外具有如下特征:
- 1)签名者对其所签署的消息是不可见的,即签名者不知道其所签署消息的具体内容。
- 2)签名消息不可追踪,即当签名消息被公开时,签名者无法知道其哪次签署了该消息。
盲签名的基本流程为:
实现盲签名的方案主要有:
- 基于RSA的盲签名
- 基于BLS-signature的盲签名
2. 基于RSA的盲签名
基本背景参看:
(
e
,
n
)
(e,n)
(e,n)为公钥,
d
d
d为私钥,其中
e
d
≡
(
p
−
1
)
(
q
−
1
)
m
o
d
n
ed\\equiv (p-1)(q-1)\\mod n
ed≡(p−1)(q−1)modn。
m
∈
[
0
,
n
−
1
]
m\\in[0,n-1]
m∈[0,n−1]为待签名消息。
为让签名者不知道所签名的消息
m
m
m,需引入一个参数
r
r
r(仅用户可知),使得
g
c
d
(
r
,
n
)
=
1
gcd(r,n)=1
gcd(r,n)=1。
基于RSA的盲签名流程为:
- 1)用户blinding消息: m ′ ≡ m r e ( m o d n ) m'\\equiv mr^e(\\mod n) m′≡mre(modn)
- 2)签名者对已盲化的消息进行签名: s ′ ≡ ( m ′ ) d ( m o d n ) s'\\equiv(m')^d(\\mod n) s′≡(m′)d(modn)
- 3)用户收到签名后进行unblinding操作: s ≡ s ′ ⋅ r − 1 ( m o d n ) s\\equiv s'\\cdot r^{-1}(\\mod n) s≡s′⋅r−1(modn)
- 4)任何人,采用公钥 ( e , n ) (e,n) (e,n),可对 m m m和 s s s验签: s e ≡ m e d ( m o d n ) = m ( m o d n ) s^e\\equiv m^{ed}(\\mod n)=m(\\mod n) se≡med(modn)=m(modn)。
基于RSA的盲签名方案有效的原因是:
r
e
d
≡
r
(
m
o
d
n
)
r^{ed}\\equiv r(\\mod n)
red≡r(modn)
s
≡
s
′
⋅
r
−
1
≡
(
m
′
)
d
r
−
1
≡
m
d
r
e
d
r
−
1
≡
m
d
r
r
−
1
≡
m
d
(
m
o
d
n
)
s\\equiv s'\\cdot r^{-1}\\equiv (m')^dr^{-1}\\equiv m^dr^{ed}r^{-1}\\equiv m^drr^{-1}\\equiv m^d(\\mod n)
s≡s′⋅r−1≡(m′)dr−1≡mdredr−1≡mdrr−1≡md(modn)
基于RSA的盲签名存在的一个问题是:
通过RSA blinding attack,可能可利用盲签名将一个消息解密为另一消息。
因为盲签的过程等价为使用签名者使用私钥
d
d
d解密的过程,攻击者可提供已 经签名者公钥加密的消息
m
′
=
m
e
m'=m^e
m′=me,具体流程为:
- 1)攻击者blinding消息: m ′ ′ ≡ m ′ r e ( m o d n ) ≡ ( m e ( m o d n ) ⋅ r e ) ( m o d n ) = ( m r ) e ( m o d n ) m''\\equiv m'r^e(\\mod n)\\equiv (m^e(\\mod n)\\cdot r^e)(\\mod n)=(mr)^e(\\mod n) m′′≡m′re(modn)≡(me(modn)⋅re)(modn)=(mr)e(modn)
- 2)签名者签名: s ′ ≡ ( m ′ ′ ) d ( m o d n ) ≡ ( ( m r ) e ( m o d n ) ) d ( m o d n ) ≡ ( m r ) e d ( m o d n ) ≡ m ⋅ r ( m o d n ) s'\\equiv (m'')^d(\\mod n)\\equiv ((mr)^e(\\mod n))^d(\\mod n)\\equiv (mr)^{ed}(\\mod n)\\equiv m\\cdot r (\\mod n) s′≡(m′′)d(modn)≡((mr)e(modn))d(modn)≡(mr)ed(modn)≡m⋅r(modn)
- 3)攻击者unblinding: s ≡ s ′ ⋅ r − 1 ( m o d n ) ≡ m ( m o d n ) ≠ m ′ s\\equiv s'\\cdot r^{-1}(\\mod n)\\equiv m(\\mod n)\\neq m' s≡s′⋅r−1(modn)≡m(modn)=m′。本来发送给签名者的加密消息 m m m应只有签名者通过私钥获知,而此时攻击者借助盲签名,获知了相应的加密消息 m m m。
3. 基于BLS-signature的盲签名
基本背景参看:
参考资料
[1] Which blind signature schemes exist, and how do they compare?
[2] 维基百科 Blind signature
[3] 盲签名 blind signature 简介
以上是关于盲签名 blind signature的主要内容,如果未能解决你的问题,请参考以下文章
Chaum 盲签名,在 JavaScript 中使用盲法并在 Java 中进行验证
Blind SSRF vulnerabilities:盲SSRF漏洞实例
Lab: Blind SQL injection with time delays and information retrieval:时间延迟盲注和信息检索两个靶场复盘
sqli-labs less10 GET - Blind - Time based. - Double quotes (基于时间的双引号盲注)
sqli-labs less41 GET -Blind based -Intiger -Stacked(GET型基于盲注的堆叠查询整型注入)