Mnemonic-Seed

驗證種子碰撞

  • September 25, 2020

在研究時遇到了這篇文章,它聲稱:

這個助記符:weary weapon unseen like like like like like like like like like和這個:sister glide dude near muse sent like like like like like like都產生相同的二進制種子(這是十六進制的 this: 0x1003ca7a7000000000000000000000000)並且它們都產生相同的地址列表(以 開頭 17A2fgCpcKEbg7CbfiJwAb8sjdEzUWD2y2

4/1000 數字來自:(助記符排列數 / 二元種子數)- 1 == (1626^12 / 2^128) - 1 == 大約 4/1000。因此,每 1000 個助記符中約有 4 個對應於兩個二進制種子/兩個地址列表。

有人可以解釋/驗證這一點的真實性嗎?這是真的?只適用於12個單詞的助記詞還是適用於所有?還是根本無效?

當我繼續嘗試使用提供的12個單詞的助記符時,我發現“疲倦”在BIP39英語單詞表中甚至不是一個單詞,而是選擇單詞不是基於安全性而是為了減少閱讀中的人為錯誤並抄寫單詞。索賠是否成立?在閱讀了大量有關該主題的資訊後,這是我看到的第一個也是唯一一個提到助記符 -> 種子衝突的來源。

這篇文章(請注意,日期為 2014 年 12 月)不是指 BIP39 或任何變體,而是指 Electrum 客戶端在 2014 年 8 月之前使用的特定過時且非標準的助記算法。(作者在下面提到了 Electrum在文章中。) 這是程式碼;他們的單詞表確實包括weary.

你可以看到他們的解碼算法。每組 3 個單詞解碼為一個十六進製字元串,該字元串通常為 8 位,但在某些情況下可能為 9(的計算可能會產生一個與、 其中、x一樣大的值,並且該數字超過)。然後將這些十六進製字元串連接起來以形成要使用的種子。修改程式碼以在字元串之間插入空格可以清楚地說明發生了什麼:(n-1) * n*(n-1) * n*n*(n-1)``n = 1626``2^32

$ python mnemonic.py weary weapon unseen like like like like like like like like like
1003ca7a7 00000000 00000000 00000000 
$ python mnemonic.py sister glide dude near muse sent like like like like like like
1003ca7a 70000000 00000000 00000000 

所以第一個片語產生一個種子,它與第二個片語相同,但最後有一個額外的零。我假設在程式碼的其他地方,種子在使用之前被截斷為 32 個十六進制數字,儘管我沒有追踪到它被呼叫的位置,但可能在這裡。如果是這樣,那麼實際使用的值將是相同的。

需要明確的是,這不是任何加密散列函式中的衝突,並且沒有特別的安全隱患,只是它使種子片語的熵比它可能出現的熵要小得多。它也與任何其他軟體或任何最新版本的 Electrum 中的任何種子算法無關。

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