Schnorr-Signature
必要的 Schnorr 簽名非互動式質詢綁定
Schnorr 簽名的一些實現將按如下方式確定挑戰:
C=H(ķG‖X‖米)==H(rG+CX‖X‖米) $ c=H(kG \mathbin| X \mathbin| m)==H(rG+cX \mathbin| X \mathbin| m) $ , 在哪裡:
C $ c $ 是挑戰
米 $ m $ 是正在簽名的消息
X $ X $ 是簽名者的公鑰,這樣X=XG $ X=xG $
G $ G $ 是一個眾所周知的基點
X $ x $ 是簽名者的私鑰
r $ r $ 是對挑戰的響應,計算為r=ķ−CX $ r=k-cx $
ķ $ k $ 是一個均勻隨機的隨機數
但是,某些 Schnorr 簽名不綁定公鑰X $ X $ 簽名者進入挑戰雜湊。因此,C=H(ķG‖米) $ c=H(kG \mathbin| m) $ .
通過包含哪些可能的攻擊可以防止X $ X $ 在挑戰雜湊中?
請注意,簽名可以作為對進行通信(C,r) $ (c,r) $ ,或作為對(ķ,r) $ (K,r) $ 在哪裡ķ=ķG $ K=kG $ .
這是一個相當人為的場景,但假設有兩個驗證密鑰X1=X1G $ X_1=x_1G $ 和X2=X2G $ X_2=x_2G $ 屬於兩個不同的簽名者,並假設攻擊者也不知道X1 $ x_1 $ 也不X2 $ x_2 $ 但確實知道它們之間的區別,比如說X1=X2+b $ x_1=x_2+b $ . 然後,他們可以使用來自簽名者 1 的簽名來偽造來自簽名者 2 的簽名,該簽名使用未綁定方案在同一條數據上(反之亦然)。
為此,他們會採取r1 $ r_1 $ 來自簽名者 1 的簽名並將其替換為r2=r1+bC $ r_2=r_1+bc $ .