天天看點

盲簽名 blind signature1. 引言2. 基于RSA的盲簽名3. 基于BLS-signature的盲簽名參考資料

1. 引言

前序部落格有:

  • Coconut:可selective disclosure credentials的門限發行簽名機制
  • ECDSA VS Schnorr signature VS BLS signature
  • 密碼學算法——RSA

盲簽名(blind signature)為:

一種數字簽名的方式,在消息内容被簽名之前,對于簽名者來說消息内容是不可見的。

類比例子:對檔案簽名就是通過在信封裡放一張複寫紙,簽名者在信封上簽名時,他的簽名便透過複寫紙簽到檔案上。

盲簽名除具有普通數字簽名特征之外,還額外具有如下特征:

  • 1)簽名者對其所簽署的消息是不可見的,即簽名者不知道其所簽署消息的具體内容。
  • 2)簽名消息不可追蹤,即當簽名消息被公開時,簽名者無法知道其哪次簽署了該消息。

盲簽名的基本流程為:

盲簽名 blind signature1. 引言2. 基于RSA的盲簽名3. 基于BLS-signature的盲簽名參考資料

實作盲簽名的方案主要有:

  • 基于RSA的盲簽名
  • 基于BLS-signature的盲簽名

2. 基于RSA的盲簽名

基本背景參看:

  • 密碼學算法——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的盲簽名

基本背景參看:

  • ECDSA VS Schnorr signature VS BLS signature
    盲簽名 blind signature1. 引言2. 基于RSA的盲簽名3. 基于BLS-signature的盲簽名參考資料

參考資料

[1] Which blind signature schemes exist, and how do they compare?

[2] 維基百科 Blind signature

[3] 盲簽名 blind signature 簡介

繼續閱讀