Wallet

AES-256 密鑰/IV 對儲存在 wallet.dat 文件的什麼位置?

  • December 17, 2021

我創建了一個加密的比特幣文件。我知道密碼,並且在十六進制轉儲中看到了 mkey。我想知道 AES 密鑰/IV 對在 wallet.dat 文件中的位置?

需要注意的重要一點是,wallet.dat 文件沒有完全加密,只有私鑰加密。每個私鑰也有自己的 IV,而不是整個錢封包件的 IV。

記錄的值組件mkey包含加密的 AES 密鑰、鹽、推導方法、推導迭代次數和其他推導參數。這將採用以下形式:

<encrypted AES key length> <encrypted AES key bytes> <salt length> <salt bytes> <32-bit int derivation method> <32-bit int number of derivations> <other parameters length> <other parameters bytes>

長度使用比特幣的緊湊大小無符號整數格式進行編碼。

例如,這是mkey來自錢包的記錄:

3051608a94fc01faba1d49d4bda9e25ea46757e5c131f47a67d0f1873a9e02481db575e08a1ad20958caf6c4c69529deb7082ce050702dd2bc0700000000bcb8040000

加密的 AES 密鑰的長度為30. 加密的 AES 密鑰是51608a94fc01faba1d49d4bda9e25ea46757e5c131f47a67d0f1873a9e02481db575e08a1ad20958caf6c4c69529deb7. 鹽的長度是08,鹽是2ce050702dd2bc07。推導方法為00000000,迭代次數為bcb80400。其他參數的長度為00,因此其他參數沒有剩餘字節。

為了獲得用於錢包私鑰的實際 AES 密鑰,錢包的密碼用於構造用於加密 AES 密鑰的密鑰。唯一的推導方法(由記錄00000000中的表示mkey)將密碼片語與鹽連接起來,並使用 SHA512 對其進行雜湊處理。散列的次數取決於儲存的迭代參數。該散列的前 32 個字節是用於加密 AES 密鑰的密鑰。接下來的 16 個字節是它的 IV。剩餘的 16 個字節被丟棄。

該計算密鑰用於解密用於實際私鑰的 AES 密鑰。這些私鑰的 IV 是密鑰公鑰的 SHA256 的前 16 個字節。

我想比特幣核心原始碼可能是 wallet.dat 文件佈局的一個很好的指南。您可能需要找到創建(或最後寫入)wallet.dat 文件的特定版本的比特幣核心的來源。

還有<https://en.bitcoin.it/wiki/Wallet>可以為您提供各種資源。

該文件的格式為 Berkeley DB。可以操作錢封包件的工具包括 pywallet。

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