Ecdsa

如何計算壓縮 G 點的座標?

  • November 19, 2020

我真的無法理解這個 ECDSA 的事情……到目前為止,我知道它用於通過讓私鑰簽署其對交易的簽名來驗證交易。我已經來到 ECDSA 的數學部分,但我找不到任何對新手友好的資源或詳細解釋所有內容。我查看了 secp256k1 的數據表以及不同變數的所有推薦值。在數據表中有 G 點,它有壓縮和未壓縮兩種形式,但我只是不明白如何計算出 X 和 Y 值、實際座標、基點的位置?

有沒有人有任何解釋得很好的指南或關於它背後的數學如何工作的東西?這是星期四到期的一項非常重要的任務。

提前致謝。

實際上,十六進制的壓縮形式是02 + X_coordinateY 座標是偶數,或者03 + X_coordinateY 座標是奇數;與未壓縮的形式相比是04 + X_coordinate + Y_coordinate.

因此,要從壓縮形式中檢索座標,只需通過曲線方程計算 Y 座標Y^2 = X^3 + a*X + b,就會有兩個 Y 值,然後通過前綴02or選擇正確的一個03

您將獲得該點的實際座標。

以下是對@James 的回答的補充,其中包含一些簡單的比特幣瀏覽器數學範例,以方便理解:

G = 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798

k = 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD(私鑰)

K = G*k

其中 0 < k < 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

使用 secp256k1 橢圓曲線數學計算壓縮公鑰 (K):

% bx ec-multiply 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

03f028892bad7ed57d2fb57bf33081d5cfcf6f9ed3d3d7f159c2e2fff579dc341a

由於 G 對於 secp256k1 是固定的,因此可以使用以下方法簡單地計算壓縮公鑰:

% bx ec-to-public 1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD 03f028892bad7ed57d2fb57bf33081d5cfcf6f9ed3d3d7f159c2e2fff579dc341a

以下資訊應提供額外的低級見解。請注意下面的範例,如果定義了橢圓曲線加法,則可以定義橢圓曲線乘法:

G + G = 2*G

% bx ec-add 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 0000000000000000000000000000000000000000000000000000000000000001 02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5

G + G + G = 3*G

% bx ec-add 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 0000000000000000000000000000000000000000000000000000000000000002 02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9

2 G + 2 G = 4*G

% bx ec-add 02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5 0000000000000000000000000000000000000000000000000000000000000002 02e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13

4 G + 4 G = 8 * G

% bx ec-add 02e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13 0000000000000000000000000000000000000000000000000000000000000004 022f01e5e15cca351daff3843fb70f3c2f0a1bdd05e5af888a67784ef3e10a2a01

可以對 256 位私鑰 (k) 整數進行因式分解,並重複應用上述加法運算以創建查找表以快速計算橢圓曲線乘法運算:

% bx ec-multiply 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 0000000000000000000000000000000000000000000000000000000000000001 0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798

% bx ec-multiply 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 0000000000000000000000000000000000000000000000000000000000000002 02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5

% bx ec-multiply 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 0000000000000000000000000000000000000000000000000000000000000003 02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9

% bx ec-multiply 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 0000000000000000000000000000000000000000000000000000000000000004 02e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13

% bx ec-multiply 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 0000000000000000000000000000000000000000000000000000000000000008 022f01e5e15cca351daff3843fb70f3c2f0a1bdd05e5af888a67784ef3e10a2a01

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