Private-Key

如果我在生成簽名時使用相同的隨機數,我的私鑰如何被洩露?

  • May 1, 2019

我知道在生成簽名時使用相同的隨機數並不是一個好習慣,但我沒有得到正確的數學。

假設我有一些由我的私鑰 Q 控制的 UTXO。假設我已經使用 nonce ‘N’ 花費了兩個 UTXO 來生成我的簽名。現在簽名的 (R,S) 組件是公開的,交易也是公開的,所以每個人都可以訪問它們。

S1 = N^(-1)*[hash(m1) + Q*R] mod p

S2 = N^(-1)*[hash(m2) + Q*R] mod p

S1 - S2 = N^(-1)*[hash(m1) - hash(m2)] mod p

即使我們知道 S1、S2、m1 和 m2,難道不是求解 N^(-1),因此 N,就等於找到離散對數的解了嗎?

讓我用不同的符號重寫您的問題,其中所有小寫值都是整數,大寫值是點。

  • 組生成器是G(一個已知常數)。
  • 私鑰為q,其對應的公鑰為Q = qG
  • nonce 是n,其對應點是R = nG
  • R的 X 座標為r
  • 雜湊函式是h(x)
  • 簽名是*(r,s),其中s計算為n -1 (h(m) + qr)*。
  • *如果r = x(s -1 (h(m)G + rQ))簽名是有效的(其中x()*代表“點的 X 座標 …”)

現在對於這兩個簽名,它認為:

  • s 1 = n -1 (h(m 1 ) + qr)
  • s 2 = n -1 (h(m 2 ) + qr)
  • s 1 - s 2 = n -1 (h(m 1 ) - h(m 2 ))
  • n = (s 1 - s 2 ) -1 (h(m 1 ) - h(m 2 ))

由於s 1s 2只是整數,因此*(s 1 - s 2 ) -1*可以使用模逆計算得到;這裡沒有涉及橢圓曲線點(這個問題很難解決)。

一旦你知道n ,你可以通過重寫第一個方程找到q :

  • ns 1 = h(m 1 ) + qr
  • ns 1 - h(m 1 ) = qr
  • q = r -1 (ns 1 - h(m 1 ))

將其代入前面的等式可以得到:

  • q = (r (s 1 - s 2 )) -1 (m 1 s 2 - m 2 s 1 )

引用自:https://bitcoin.stackexchange.com/questions/85638