Elliptic-Curves
如何使用確定性 ECDSA 簽署不同的消息?
橢圓JavaScript 庫實現了一個函式,該
.sign
函式在簽署相同的消息時似乎給出了相同的結果。這意味著k
參數是恆定的。這是否意味著簽署不同的消息會暴露私鑰?如果是這種情況,我怎樣才能正確地使用相同的私鑰簽署多條消息?
橢圓 說:
ECDSA 根據 RFC6979 使用確定性 k 值生成。
這意味著每次您簽署相同的消息時,您都會得到相同的隨機值。這就解釋了為什麼你看到的一樣 $ k $ 參數兩次。
但是,那 $ k $ 值生成過程將消息(或消息雜湊)作為輸入。進一步來說, $ k $ 是通過將消息(散列)與私鑰一起散列生成的。所以每一條不同的資訊都會產生不同的 $ k $ 值(除了可以忽略的雜湊衝突機率),並且相同的消息將產生相同的 $ k $ 每次簽名的價值。
對相同的消息使用相同的隨機值不會帶來安全風險(顯然,您只是得到相同的簽名)。如果您對不同的消息使用相同的隨機值,您會立即顯示私鑰,因此您注意到不應該這樣做。然而,RFC 6979 方法“確保”不同的消息以極高的機率使用不同的 ks。