你如何推導出 secp256k1 曲線上的內同態的 lambda 和 beta 值?
你可以在已故的 Hal Finney 的這個bitcointalk 文章中看到一些背景知識。
Beta 和 lambda 是 secp256k1 曲線上的值,其中:
λ ^ 3 (mod N) = 1
β ^ 3 (mod P) = 1
如此處所示,在十六進制中,N 和 P 是:
N = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
P = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
lambda 和 beta 的實際值很容易驗證,它們是:
λ = 5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72
β = 7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee
我的問題是,你如何得出這個?有人可以逐步告訴我如何找出這些值嗎?
通過一些逆向工程,我想我能夠看到 Hal 是如何獲得這些結果的。
首先,費馬小定理的一個眾所周知的結果是,如果
p
是素數並且g
是域 的生成器Z/pZ
,那麼:g ^ (p - 1) = 1
注意,不要將此抽像生成器
g
與 secp256k1 組的生成器混淆G
。現在,鑑於上面的等式,這並不是一個很大的飛躍:(g ^ ((p - 1)/3)^3 = g ^ (p - 1) = 1
因此,我們可以通過首先找到 and ( 並且是原始問題中給出的參數) 的生成器
λ
,然後將它們分別提升到and冪來找到 and。您可以檢查兩者和都可以被3整除。β``Z/NZ``Z/PZ``N``P``(N-1)/3``(P-1)/3``N-1``P-1
Hal 使用的生成器似乎
λ
是 3,而 forβ
是 2。我不確定他為什麼選擇這些,還有很多其他好的生成器可供選擇。這可能是在反複試驗的基礎上。使用 Sage 數學筆記本,我能夠為
λ
和生成相同的值β
。