Private-Key
如果我在生成簽名時使用相同的隨機數,我的私鑰如何被洩露?
我知道在生成簽名時使用相同的隨機數並不是一個好習慣,但我沒有得到正確的數學。
假設我有一些由我的私鑰 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 1和s 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 )