應用密碼學

secp256k1 曲線

secp256k1 是比特幣與以太坊用於金鑰與簽章的特定橢圓曲線。名稱本身就道出其血統:一條 SEC(高效密碼學標準)曲線,建構於 256 位元的質數體上,屬 Koblitz 型(那個「k」),變體 1。

它是定義在質數體 F_p(其中 p = 2^256 − 2^32 − 977)上的曲線 y^2 = x^3 + 7(即 a = 0、b = 7)。其點群具有非常接近 2^256 的大質數階 n,標準也固定了一個生成點 G。私鑰是區間 [1, n−1] 中的整數 d;公鑰是點 d·G。a = 0、p 的特殊形式以及 Koblitz 結構容許高度最佳化的運算(例如 GLV 自同態),使簽章與驗證都很快。

與 NIST P-256 曲線不同,secp256k1 的參數是以剛性、透明的方式選定,沒有無法解釋的「魔術」常數;考量到外界對某些 NIST 曲線種子可能暗藏後門的疑慮揮之不去,社群更信任它。比特幣用它做 ECDSA;自 2021 年 Taproot 升級後,同一條曲線也支援 Schnorr 簽章。以太坊地址是 64 位元組(去除前綴的未壓縮)公鑰之 keccak256 的最後 20 位元組。

私鑰不過是一個小於 n 的 256 位元數字。由於金鑰空間約為 2^256,兩位使用者各自獨立選到同一把金鑰的機率微乎其微——這正是「離線生成、毋需協調」能安全地建立錢包的根本原因。