BIP39 手動片語計算 - 多個校驗和如何有效?
需要一些幫助來理解為什麼多個校驗和適用於助記詞生成 (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 說應該允許這種無效的片語,因此錢包軟體將允許它。校驗和被有效地忽略而不被檢查(這違背了校驗和的目的)。