Ethereum-Wallet-Dapp

壓縮和未壓縮的公鑰有什麼區別?

  • July 14, 2021

我在ethers.js文件中看到有一個壓縮和未壓縮的公鑰

$$ 1 $$乙太坊密鑰對。這個壓縮的公鑰是僅由ethers.js使用還是許多庫使用的通用算法?此壓縮中使用什麼算法? 請參閱下面的 Ethersjs 文件部分(以創建派生)

$$ 1 $$. // 公鑰(壓縮) computeAddress(“0x0376698beebe8ee5c74d8cc50ab84ac301ee8f10af6f28d0ffd6adf4d6d3b9b762”); // ‘0x0Ac1dF02185025F65202660F8167210A80dD5086’

// 公鑰(未壓縮) computeAddress(" 0x0476698beebe8ee5c74d8cc50ab84ac301ee8f10af6f28d0ffd6adf4d6d3b9b762d46ca56d3dad2ce13213a6f42278dabbb53259f2d92681ea6a0b98197a719)be // ‘0x0Ac1dF02185025F65202660F8167210A80dD5086’

$$ 1 $$ https://docs.ethers.io/v5/api/utils/address/

壓縮和未壓縮的公鑰與橢圓曲線的細節相差甚遠。讓我試著給你解釋一下!

為了從私鑰中找到公鑰,乙太坊協議使用與比特幣相同的橢圓曲線,即Secp256k1。您可以在我提供的圖片上看到實數空間上的這條曲線。 Secp256k1 橢圓曲線

使用的方程是 y^2 = x^3 + 3,因此對於一個 x,將有 2 個對應的 y 座標,您也可以在圖像上看到 (y1 < 0, y2 > 0)。

因此,將有兩對 (x, y1) 和 (x, y2) 作為公鑰。選擇了正對,我們得到了一個未壓縮的公鑰作為 x 和 y2 的串聯。

這種格式較早被錢包使用,但隨著區塊鏈開始增長,需要壓縮公鑰。這就是為什麼決定為公鑰創建一種壓縮格式,通過刪除 y 座標可以減少兩倍的記憶體空間(因為它可以通過將 x 座標傳遞給 y^2 = x^3 來計算+ 3 方程)。所以現在只有 x 座標作為公鑰加上一個前綴來定義 y 應該是負數還是正數。如果您仔細查看壓縮和未壓縮的公鑰,您實際上可以發現它們以前綴 03(對於負 y 壓縮公鑰)和 04(對於未壓縮的公鑰)開頭。但除此之外,壓縮文件是未壓縮文件的開始。

現在錢包主要嘗試使用壓縮的公鑰,但它們也保留了與使用未壓縮的舊錢包的向後兼容性。

您可以在此處更詳細地了解它。雖然這是一本與比特幣相關的書,但它的這一部分也應該與乙太坊密鑰相關!

引用自:https://ethereum.stackexchange.com/questions/103482