Address

我實際上需要驗證地址的多少個字元?

  • October 24, 2021

假設我想驗證手機上的接收地址。收件人確認地址的前 M 和後 N 個字元。攻擊者創建一個開頭有相同 M 個字元、最後有相同 N 個字元的有效地址的計算工作量有多大?

什麼是安全的 M/N?

如果收件人沒有提及字元是大寫還是小寫,可以嗎?

攻擊者創建一個開頭有相同 M 個字元、最後有相同 N 個字元的有效地址的計算工作量有多大?

使地址在視覺上彼此相似是很容易的,這裡只針對地址的開頭,但沒有特別的原因為什麼它也不能針對結尾。

18eXmgR5Svoqqa6PaYVrKvbH6hvrp5xe3A  
18eXmgR5Svoqqa6JXSMmbNaD4Cs5ThcV1P

這些 P2PKH 範例都是有效的,並且使用了共享 20 個字元的比特幣密鑰。他們需要花費數小時才能在當今的 CPU 上進行生產,這在任何攻擊場景中都不是特別嚴重的問題。

如果收件人沒有提及字元是大寫還是小寫,可以嗎?

小寫和大寫是 p2pkh 地址中的不同地址,因此它會削弱任何部分交叉驗證。對於較新的 bech32 地址,大小寫無關緊要,根本不重要。

攻擊者創建一個開頭有相同 M 個字元、最後有相同 N 個字元的有效地址的計算工作量有多大?

這取決於您的攻擊模型是什麼。

如果您擔心攻擊者將您的地址替換為在多個地方匹配的另一個有效地址,但攻擊者無法使用(因此他們只會被燒毀資金),這很容易,無論有多少字元你檢查。如果這是您關心的問題,您應該檢查所有這些,可能除了最後 6 個之外,因為它們只是校驗和字元。如果除校驗和之外的所有內容都匹配,則校驗和本身也將匹配。

如果您只關心攻擊者將地址替換為他們自己可以花費的其他地址,那就更難了。

  • 在 base58 地址中:除了第一個字元之外的每個字元都使攻擊者的難度增加了 58 倍。檢查任何 11 個字元將需要大量的計算時間(2 64.4工作)。在 22 個字元時,假設任何人在計算上都不可行(2 128.9個工作,類似於破解公鑰本身需要的工作)。

    • 如果您忽略小寫/大寫,每個字元只會使攻擊者的難度增加 29 倍。那麼 14 個字元需要 2 68.0工作,27 個字元需要 2 131.2。
  • 在 bech32(m) 地址中:除了前 4 個字元之外的每個字元都需要攻擊者多做 32 倍的工作。這里大約 13 個字元表示 2 65 個工作,26 個表示 2 130。Bech32 地址不區分大小寫。

請注意,這些計算假設攻擊者知道您將查看哪些字元,如果您總是先選擇 N 和最後選擇 M 進行比較,可能就是這種情況。如果您比較隨機的,攻擊者會更加困難,但計算將取決於所使用的確切策略。

作為參考,比特幣主網的 base58 地址以 1… (P2PKH) 或 3… (P2SH) 開頭。bech32 地址以 bc1q…(P2WPKH 或 P2WSH)或 bc1p…(P2TR)開頭。

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