Private-Key
為什麼我不能反轉 secp256k1 的公鑰點以確定私鑰?
我知道公鑰
q
是通過點加g
(一些 secp256 k1 常數)u
時間生成的,這u
是一個很大的數字(私鑰)。這個過程可以在下圖中簡化。因此公式如下
q=u*j
但是為什麼我不能使用下面的這張圖,並通過跟隨切線回到原始點來追溯公鑰點到私鑰點。我確信我可以在desmos-graphing或使用一些非常簡單的線性代數的東西中做到這一點。
橢圓曲線
secp256k1
是在有限域 Z p上定義的。所有座標均為 256 位整數,所有點加法和座標均需取模p
。橢圓曲線的大數字空間和不連續性質使得在您假設時直接執行分解是不可行的。
如果您天真地實現此
G * G * G...* G
方法,您將不得不執行大量操作,直到獲得您的公鑰。例如,如果你的公鑰是 2^128,你需要自己加G
2^128 次,這在計算上是不可行的。但是,有一種更優化的算法,稱為 Double and Add,它使用 O(n) Double and Add step 計算公鑰,其中n
是您的私鑰的位長度。然而,據我們所知,沒有確定性多項式時間算法可以反其道而行之。如果你再次天真,你會
G
在上面的例子中從你的公鑰中減去 2^128 次,直到你只剩下G
. 再次,不可行。有一個更好的算法,但仍然是次指數的,平均需要 2^128 次操作才能在 secp256k1 中成功(技術上是 O(srqt(n)),其中n
是曲線階數)。簡短的錨鍊是:是的,您可以反轉它,但是對於加密安全密鑰,您需要一個 WHILE 直到您成功。