Cryptography

你如何推導出 secp256k1 曲線上的內同態的 lambda 和 beta 值?

  • October 29, 2015

你可以在已故的 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

我的問題是,你如何得出這個?有人可以逐步告訴我如何找出這些值嗎?

還發佈到 Cryptography Stack Exchange

通過一些逆向工程,我想我能夠看到 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 數學筆記本,我能夠為λ和生成相同的值β

在此處輸入圖像描述

引用自:https://bitcoin.stackexchange.com/questions/35814