Seed

什麼是助記詞頻率分析,為什麼我只需要 4 個字母的種子詞?

  • January 16, 2020

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 個字母,我就可以告訴你它在列表中是什麼單詞。這不是很令人印象深刻,因為我正在把你給我的話交還給你。

或者,我可以從下端開始,看看只要知道第一個字母是aor c,我就可以告訴你你的單詞在單詞列表的哪一半

第二封信沒有給我任何額外的資訊,因為它要麼是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

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