Wallet

什麼是擴展的公鑰或私鑰?

  • December 31, 2021

我的印像是擴展公鑰由公鑰+鏈碼組成,我不熟悉擴展私鑰的組成部分。

然而,情況似乎並非如此。根據pywallet

The key consists of
           * 4 byte version bytes (network key)
           * 1 byte depth:
               - 0x00 for master nodes,
               - 0x01 for level-1 descendants, ....
           * 4 byte fingerprint of the parent's key (0x00000000 if master key)
           * 4 byte child number. This is the number i in x_i = x_{par}/i,
             with x_i the key being serialized. This is encoded in MSB order.
             (0x00000000 if master key)
           * 32 bytes: the chain code
           * 33 bytes: the public key or private key data
             (0x02 + X or 0x03 + X for public keys, 0x00 + k for private keys)
             (Note that this also supports 0x04 + X + Y uncompressed points,
             but this is totally non-standard and this library won't even
             generate such data.)

它不像 publickey + 鏈碼那麼簡單。有人可以從頭到尾解構擴展密鑰嗎?根據令人驚嘆的 iancoleman 網站,網路對此也有影響,這對我來說也沒有意義,但很明顯(如上所示)它是這個公式的一部分。

擴展的公鑰只包含比公鑰和鏈碼多一點的資訊,但是公鑰和鏈碼對於密鑰派生來說是最重要的。其餘的只是有關錢包和人員密鑰的元數據。

版本字節區分 xpub、xpriv 和其他類型的密鑰。指紋辨識父級,以便錢包可以知道此密鑰的父級是什麼。子索引告訴錢包如何再次從父節點派生這個密鑰。

我不熟悉擴展私鑰的組成部分。

擴展私鑰與擴展公鑰完全相同,但不是 33 字節的公鑰數據,而是 33 字節的私鑰數據。

網路對此也有影響,這對我來說也沒有意義,但很明顯(如上所示)它是這個公式的一部分。

網路確定版本字節。這些版本字節存在於比特幣的所有其他內容中,僅用於向使用者指示密鑰用於哪個網路。這在辨識密鑰是否可能被洩露時很有用(因為它已被用於測試軟體)

有人可以從頭到尾解構擴展密鑰嗎?

讓我們xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw用作我們的 xpub。

Base58 解碼這給了我們

0488B21E013442193E8000000047FDACBD0F1097043B78C63C20C34EF4ED9A111D980047AD16282C7AE6236141035A784662A4A20A65BF6AAB9AE98A6C068A81C52E4B032C0FB5400C706CFCCC56B8B9C580

0488B21E是 BIP 32 定義的版本字節。

01意味著這個鍵在深度一

3442193E是父鍵的指紋

80000000表示鍵是索引 0h(第 0 個硬化鍵)

47FDACBD0F1097043B78C63C20C34EF4ED9A111D980047AD16282C7AE6236141是鏈碼

035A784662A4A20A65BF6AAB9AE98A6C068A81C52E4B032C0FB5400C706CFCCC56是公鑰

B8B9C580是base58校驗編碼校驗和。

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