什麼是助記詞頻率分析,為什麼我只需要 4 個字母的種子詞?
Cryptosteel 只允許儲存我的助記種子中每個單詞的前 4 個字母,FAQ 告訴我原因:
[…] 您只需要組合每個單詞的前 4 個字母。這 4 個字母是獨一無二的,足以恢復句子和整個比特幣錢包。我們進行了頻率分析並確定了創建 Cryptosteel 所需的最小字母集。
什麼是助記頻率分析?為什麼我只需要前 4 個字母?
我只在 GreenAddress 的 Greenbits Android 錢包中使用助記符種子。但是,它使用 24 或 27 個單詞的階段,而不是 12 個。我試圖僅從前 4 個字母中恢復我的種子,但錢包抱怨其中一些不是真正的單詞。
我假設 GreenAddress 使用的東西與 BIP39 種子不同,前 4 個字母規則不適用於所有種子,對嗎?
這裡有多個問題。
首先,一些背景資訊。BIP39 是一個包含單詞列表的標準。
英文版可以在https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt找到
什麼是助記頻率分析?
這是他們的一種奇特方式,他們說他們計算出他們需要儲存的最小字母數,以唯一地辨識單詞列表中的單詞。
我將在此處作為範例對一個很小的單詞列表(這些單詞在 BIP39 中)進行分析。
想像一下這是我的單詞表:
abandon
,ability
,crane
,crash
.它在整個列表中只有 4 個單詞,因此分析非常簡單。
現在,最長的詞是“放棄”和“能力”,各有 7 個。
注意到這一點,我現在可以說,只要我知道單詞列表中任何單詞的前 7 個字母,我就可以告訴你它在列表中是什麼單詞。這不是很令人印象深刻,因為我正在把你給我的話交還給你。
或者,我可以從下端開始,看看只要知道第一個字母是
a
orc
,我就可以告訴你你的單詞在單詞列表的哪一半。第二封信沒有給我任何額外的資訊,因為它要麼是
ab
-cr
這些是唯一的選擇。第 3 個字母讓我能夠區分aba ndon 和abi lity ,但沒有告訴我以 . 開頭的單詞
cra
。然而,第 4 個字母讓我能夠完全且唯一地區分單詞列表中的每個單詞。
1 個字母的頻率
- a = 2
- c = 2
2 個字母的頻率
- 從 = 2
- 鉻 = 2
3 個字母頻率
- aba = 1
- 幫助 = 1
- 克拉= 2
4 個字母頻率
- aban = 1
- 使用 = 1
- 缺口 = 1
- 明天 = 1
相關xkcd:https ://what-if.xkcd.com/34/
為什麼我只需要前 4 個字母?
因為 cryptosteel 對完整的BIP39 單詞表(不僅僅是我的玩具 4 字長列表)進行的分析也得到了相同的結果——從列表中檢索任何唯一單詞不需要超過 4 個字母。
我只在 GreenAddress 的 Greenbits Android 錢包中使用助記符種子。但是,它使用 24 或 27 個單詞階段,而不是 12 個。我試圖僅從前 4 個字母中恢復我的種子,但錢包抱怨其中一些不是真正的單詞。我假設 GreenAddress 使用的東西與 BIP39 種子不同,前 4 個字母規則不適用於所有種子,對嗎?
“前 4 個字母”規則並不適用於所有種子,這是正確的。它特定於 BIP39 中使用的單詞列表,因此它適用於使用相同單詞列表的種子,以及使用非常相似列表的可能種子,但根本不適用於完全不同的列表。此外,並非所有 BIP39 單詞列表都是英文的,因此“前 4 個字母”規則可能不適用於 BIP39 中的其他語言(可能對研究很感興趣)。
在沒有事先了解 GreenAddress 的詳細資訊的情況下,您沒有提供足夠的資訊讓我們知道 GreenAddress 對其種子做了什麼。
我們不能僅從片語的長度(12、24 或 27)知道 GreenAddress 是否實現了 BIP39。他們的常見問題解答提到了 BIP32(高畫質錢包),但沒有提到 BIP39(種子的特定詞表),所以這也沒有定論。
假設它們確實支持 BIP39,那麼您看到的錯誤消息仍然是合理的。這只是意味著該軟體被程式為僅接受與單詞列表中的單詞的 100% 匹配,而不是部分匹配,即使該部分匹配是唯一的。
一些錢包會在您鍵入時自動完成 BIP39 單詞以解決此問題(或接受該單詞的 4 個字母版本),但您始終可以手動查找任何不方便的 BIP39 兼容錢包為你。
例如,如果您的 Cryptosteel 中
enve
儲存了字母,您可以參考我上面連結的單詞列表來查找單詞envelope
。