Mnemonic-Seed

BIP39 手動片語計算 - 多個校驗和如何有效?

  • February 26, 2021

需要一些幫助來理解為什麼多個校驗和適用於助記詞生成 (BIP39)。

讓我們假設一個 12 字的密碼。如果我們將 2048 個單詞列表分成 16 個組…… 16 個單詞“塊”中的 1 個單詞將是所選 11 個單詞的有效校驗和。

使用 24 個字的密碼,每 256 個字中有 1 個是正確的校驗和。

手動生成片語時…我知道 SHA-256 雜湊的 ENT / 32 位被附加到熵以生成校驗和字..但這會生成一個特定的字

所以我想我的冗長問題是……其他校驗和值背後的數學是有效的嗎?我想我真正的問題是如何將 ENT + CS 驗證為合法的?

看這個例子:

熵(128位):110100110011110011001C1001C1001C1001C1001C1001C1001C1001C1001C1001C1001C1001C11001001C1001C11001001C1001C10011001C1100100 111100100 11101100

SHA-256 散列熵 = 14 c5 8b c9 05 11 5e 08 27 49 61 1e 48 d6 04 c0 2a 70 8c 39 ad 6c dc 0c 91 2f 70 62 c3 24 71 23

SHA-256 雜湊的前 4 位 = 1(十六進制)二進制 = 0001

生成恢復片語:方仙人掌護士池分享救援準備底部受苦速度將明天

另一個有效片語(熵相同但校驗和不同):方形仙人掌護士池共享救援準備底部受苦速度將佔

Account = 13(在 BIPS39 詞表上)減去 1,因為詞索引從 0 = 12 12 開始,二進制 = 1100 十六進制 = C

C(十六進制)!= 1(十六進制)

另一個有效片語(熵相同但校驗和不同):方形仙人掌護士池共享救援準備底部受苦速度將聲學

聲學 = 17(在 BIPS39 詞表上)減去 1,因為詞索引從 0 = 16 16 開始到二進制:10000 十六進制 = 10

10(十六進制)!= 1(十六進制)

我想我也很困惑,當它們的值不等於 ENT 的 SHA-256 雜湊的前 4 位時,這些校驗和如何有效?我猜這與校驗和的驗證方式有關(並指向我原來的問題)?

您實際上並沒有用不同的校驗和編碼相同的熵。最後一個詞不僅對校驗和進行編碼,它還對原始熵的某些部分進行編碼。對於 12 字的助記符,最後一個字編碼 7 位原始熵和 4 位校驗和。

在您的範例中,原始熵的最後 7 位是1110010. 結合 的 4 位校驗和0001,對應的字是tomorrow

在您的第二個片語中,編碼熵的最後一位實際上是0000000將校驗和位更改為,1100因此您得到一個不同的單詞,account.

在您的第三個片語中,編碼熵的最後一位實際上是0000001將校驗和位更改為,0000因此您得到另一個單詞,acoustic.

所以實際上,BIP 39 助記符具有唯一的最後一個詞,因為它是原始熵與唯一校驗和的組合。更改熵位會更改校驗和,更改校驗和會使其無效。


仍然正確但不適用於此問題的原始答案。

仔細閱讀BIP 39會發現沒有多個單詞適合校驗和。相反,BIP 是如此廣泛,以至於允許無效的校驗和,並且只應被警告。

在您的範例中,第二個片語實際上是無效的。但是 BIP 39 說應該允許這種無效的片語,因此錢包軟體將允許它。校驗和被有效地忽略而不被檢查(這違背了校驗和的目的)。

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