Ecdsa
為什麼 r 和 s 以 N 為模?(不是 P)
正如 Peter Wuille在這裡提到的,ECDSA 簽名值 (r, s) 是模數
N
(例如驗證 ECDSA 簽名,其中u1 = z * w % N
),而比特幣中 ECDSA 的其餘功能似乎是模數**P
**。為什麼會這樣?
好問題!這裡有兩個概念。有限域 Fp,以及由 secp256k1 定義的 EC 群。
在 Fp 中,元素只是以 p 為模的數字。加法、減法、乘法和除法都是為這個有限域定義的。
然而,在 EC 組中,每個元素都是 Fp 中的一對元素,例如
(f1, f2)
. 您可以對這些對進行加減運算以得到不同的對,但加減法與 Fp 元素的加減法幾乎沒有關係(從技術上講,它在後台使用了這些操作,但不是直接加法。那會很漂亮如果(f1, f2)
+(g1, g2)
剛剛給了你,那麼無聊(f1+g1, f2+g2)
)。另請注意,由於這些對是數學組,而不是欄位,因此無法將兩對相乘。您之前可能已經看過語法
k*G
,但這只是將G
自身k
時間相加的簡寫,它k
是一個整數,而不是 secp256k1 定義的 EC 組的另一個元素。此外,如果您查看ECDSA 算法,您會發現這裡的最終元素是 (r, s),但僅僅因為它是一對並不意味著它是存在於 secp256k1 曲線上的一對!這是算法定義的一對整數 mod n(曲線階數),而不是曲線上的一個點。