Wallet

為什麼相同的 12 個單詞會在 Electrum 錢封包件中產生不同的種子?

  • September 1, 2021

我正在查看一個 Electrum 錢封包件(如果重要,來自 Windows 的 Electrum 1.9.6)試圖了解其中包含哪些資訊,但我最初無法弄清楚私鑰的確切儲存位置(或者即使它們可能儲存在其他文件中)。我猜 default_wallet 文件中的“種子”欄位包含足夠的資訊,用於生成私鑰、公鑰和 12 字助記符。到目前為止我是對的嗎?

為了進行更多實驗,我想看看使用相同的 12 字助記符的 2 個錢封包件是否相同。毫不奇怪,當我沒有加密錢包時,相同的助記詞似乎會導致相同的錢封包件。但是,我也嘗試使用相同的密碼加密每個錢包,令我驚訝的是,這些文件在“種子”欄位中具有不同的值。這讓我感到驚訝,所以我想知道這是否是預期的行為,為什麼​​會發生這種情況?

這實際上是一個很好的問題。讓我們來看看發生了什麼。首先,Electrum 對您的助記詞進行雜湊處理以生成種子。種子確實包含生成主公鑰和主密鑰所需的所有資訊,首先用於生成公鑰序列(地址),第二個用於從公鑰派生密鑰(實際上是稍微複雜一些)。然後,Electrum 保存錢封包件,其中包含種子和實際使用的密鑰,整個密鑰對序列,除非它命中 5 個連續未使用的地址。它可以以加密或加密的方式儲存它. 在第一種情況下,文件中的種子值和私鑰看起來總是一樣的。然而,在第二種情況下,他們不會。為什麼?Electrum 文件說:

Electrum 使用 AES-256-CBC 加密錢包中的種子和私鑰。

這是什麼意思?AES-256 只是一種分組密碼。它需要一個數據塊(在這種情況下為 128 位)和一個密鑰塊(256 位)並輸出 128 位的加密數據。但這不是Electrum 所做的。*實際上,沒有人使用這樣的分組密碼,也沒有人應該使用。相反,使用所謂的模式。*在我們的例子中,它是密碼塊連結 (CBC) 模式。Electrum 首先生成一個隨機初始化向量 (IV),將其與前 128 位輸入混合(通過異或運算),並在此混合塊上使用 AES-256 生成第一個加密塊。對於任何後續塊,它都做同樣的事情,除了它需要前一個加密塊與明文塊混合而不是 IV。IV 與文件一起保存。最後,這就是為什麼您總是在文件中使用不同的種子值到達的原因,即使使用相同的密碼(這導致 AES-256-CBC 加密 [1] 的密鑰相同)——每次使用不同的 IV。

[1] 也可能不是這種情況,因為密鑰派生函式很可能用於從您的密碼片語中傳遞一個密鑰,在這種情況下,在對密碼片語進行散列之前將額外的隨機鹽值添加到密碼片語並一起保存,類似於四。

種子是確定性地派生所有地址的關鍵。加密是為了保護種子<https://electrum.org/faq.html#wallet-encryption>

<https://electrum.org/faq.html#seed>

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