Public-Key

橢圓曲線和“虛榮”公鑰

  • June 26, 2018

我想找到一種算法來獲取一個私鑰/公鑰對,其中公鑰的一個座標具有一些特定的前綴(例如:20 個前導零)。在 secp256k1 案例(比特幣曲線)中,G. Maxwell 找到了一個帶有座標的公鑰

x = 00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63

(見https://bitcointalk.org/index.php?topic=90982.msg13789635#msg13789635)。

在那種情況下,22 個零意味著 88 位,他聲稱也找到了私鑰。明顯地 $ 2^{88} $ 隨機嘗試在計算上是不可行的,那麼我認為應該使用生日悖論(以減少從 $ 2^{88} $ 至 $ 2^{44} $ )。但我不明白如何將 Pollard Rho 算法(經典的基於生日悖論的算法)應用於這個特定任務。有任何想法嗎?

編輯1

在沒有私鑰的情況下,僅查找具有任意多個前導零的公鑰非常簡單,例如:

x = 0000000000000000000000000000000000000000000000000000000000000001

y = 4218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee

是 secp256k1 曲線的有效點的座標,因為它們滿足方程 $ y^2 = x^3 + 7 $ 反對 $ p $

這就是為什麼我很確定 G.Maxwell 也有私鑰(否則他的公鑰沒有什麼特別的)

現在我知道如果我生成了 $ 2^{44} $ 隨機點,我會找到“部分”碰撞,即我會找到幾個點 $ P_1 $ , $ P_2 $ 和 $ x_{P_1} $ 和 $ x_{P_2} $ 共享前 88 位。我如何使用這些資訊來找到一個點 $ P_3 $ 有 88 個前導零位?

編輯2

很奇怪:好像需要 $ 2^{88} $ 查找具有特定 88 位前綴的任何公鑰的私鑰的步驟,

但它只需要 $ 2^{128} $ 使用 Pollard Rho 算法查找單個特定公鑰(具有特定 256 位“前綴”)的私鑰的步驟(參見http://andrea.corbellini.name/2015/06/08/elliptic-curve-cryptography -break-security-and-a-comparison-with-rsa/https://blog.coinfabrik.com/wp-content/uploads/2016/06/ECDSA-Security-in-Bitcoin-and-Ethereum-a-研究-Survey.pdf )

然後找到具有特定 m 位前綴的任何公鑰的私鑰,使用 $ m> n/2 $ , Pollard Rho 是最好的鏡頭 $ m\leq n/2 $ fgrieu方法是最好的。

Maxwell 的虛榮公鑰是如何選擇 secp256k1 的生成器的結果;正如麥克斯韋本人所解釋的那樣

由於某種原因,生成器 $ G $ 是點的兩倍:

x = 0x00000000000000000000003b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63, 
y = 0xc0c686408d517dfd67c2367651380d00d126e4229631fd03f8ff35eef1a61e3c

這正是麥克斯韋的虛榮公鑰。它的私鑰0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a1是 $ 1/2 $ ,即的倒數 $ 2 $ 以曲線階為模 $ n $ . 這也等於 $ (n+1)/2 $ .

最大的問題是:為什麼選擇這樣的 secp256k1 生成器?我不知道。但請注意,不難找到具有很多前導零的生成器。

引用自:https://crypto.stackexchange.com/questions/60239