Cryptography
比特幣使用的secp256k1曲線中的生成點G是如何選擇的?
比特幣中使用的 secp256k1 曲線中的生成點 G 是一個已知常數:
Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 Gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8
這一點是如何確定或選擇的?我知道它需要是一個大階的點(G 就是這種情況),但除此之外,它是隨機選擇的,還是以某種方式確定性地派生的?
我們不知道。曲線(和相應的
secp256k1
生成器)由 Certicom 的人員定義和標準化。我知道人們已經詢問過它的起源,但似乎那些參與其中的人已經不在了。然而,有一個不尋常的屬性可能會暗示它是如何構造的。如果該點乘以 2 的乘法倒數(因此有效地撤消了加倍操作),則得到 X 座標為 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63 的點,這是一個不可思議的小數字(大小僅為 166 位)。也許生成器是通過對一些簡單的輸入進行散列,通過一個 160 位散列函式提供給它,以 0x3b 為前綴,將結果作為 X 座標構造點,然後將其加倍來構造的。
也就是說,據信生成器的選擇與僅使用一個生成器的方案的安全屬性無關(如 ECDSA、BIP340 Schnorr 簽名、ECDH 等)。