比特幣客戶端如何加密wallet.dat文件?
用於加密 wallet.dat 文件的算法是什麼?
詳細解釋可以在應用程序的 README 中找到:https ://github.com/bitcoin/bitcoin/blob/6b8a5ab622e5c9386c872036646bf94da983b190/doc/README
簡而言之:
- 使用 EVP 將密碼片語轉換為密鑰/iv 對,具有動態輪數
- 此密鑰/iv 對用於加密隨機生成的主密鑰,使用 AES-256-CBC
- 然後使用該主密鑰對錢包密鑰的秘密部分進行加密,再次使用 AES-256-CBC
Pieter 的回答涵蓋了技術細節,因此我不再贅述。我要補充一點,使用者應該記住,比特幣核心錢包或任何加密強加密系統的最弱點是密碼。系統將密碼片語轉換為 AES-256 密鑰,並且該密碼派生密鑰用於加密隨機生成的主錢包密鑰。除非 PRNG 受損或有缺陷,否則無法暴力破解主錢包密鑰,但攻擊者可以嘗試暴力破解密碼片語本身。
客戶端通過使用鹽(隨機數)和多輪散列來增加針對這種攻擊的強化嘗試。鹽可以防止預計算攻擊,因為具有不同鹽的相同密碼會產生不同的密鑰。使用多輪散列可以減緩蠻力攻擊,因為攻擊者還需要對每個嘗試的密碼執行多輪。
客戶端使用動態密鑰強化。這意味著輪數會根據客戶端的計算能力而有所不同(以使加密或解密的時間保持在 1 秒以下)。您的硬體計算能力越強,執行的輪次就越多,暴力破解密碼就越困難。當您更改密碼時,客戶端將根據您目前硬體的計算能力調整動態輪數。通過定期更新密碼,您可以確保密碼派生密鑰符合摩爾定律。
通過使用鹽和鍵拉伸來硬化鍵只能到此為止。如果您的密碼是“p@ssw0rd!” 或其他一些已知的常用密碼,暴力破解錢包仍然是微不足道的。為了說明為什麼讓我們假設攻擊者擁有每秒可以嘗試 100M 雜湊的硬體,而您的錢包正在使用 100,000 輪雜湊。這意味著攻擊者硬體(100M 雜湊)每秒可以嘗試 1,000 個密碼。所以錢包確實減慢了攻擊者的速度,但如果密碼很弱,那麼它就不能減慢它的速度。有數以千萬計的密碼公開可用的先前洩露/被盜/被黑客入侵的密碼列表。如果沒有密鑰延伸,攻擊者可以在不到一秒的時間內嘗試所有可能的已知密碼。關鍵拉伸將其減慢到幾個小時。另一方面,假設您的密碼未知且足夠強大,以至於使用單個雜湊平均需要一天的時間來暴力破解。使用 100,000 發子彈,可將時間延長至數百年。