Security

檢查加密貨幣地址的第一個和最後一個字元?

  • June 25, 2018

當確認在網站/應用程序上輸入的地址是我期望的地址時,我經常檢查第一個和最後 3-4 個字元以查看它們是否匹配。

這種做法危險嗎?攻擊者能否生成一個開頭和結尾匹配但中間不同的地址?

當確認在網站/應用程序上輸入的地址與我預期的不符時,我經常檢查第一個和最後 3-4 個字元以查看它們是否匹配。

這是一個很好的做法,它將幫助保護您免受諸如劫持剪貼板數據之類的攻擊,粘貼攻擊者的地址而不是您的預期收件人地址。

相關資訊:比特幣地址是base58check 編碼的,因此地址的最後幾個字元是確定性地生成的,使用地址的開頭作為輸入。僅更改地址開頭(或結尾)的一個字元將使校驗和無效。因此,僅更改地址的一個字元的攻擊將不起作用(即使這種攻擊沒有竊取資金,攻擊者也可能迫使您燒毀資金)。

如果攻擊者能夠找到直接向您提供惡意地址的方法,那麼檢查數字將無用。但為了您的問題,我們將忽略這些情況,只考慮攻擊者創建“複製貓”地址的難易程度,以阻止對合法支付地址的任何快速引用。

生成比特幣地址的成本非常低,因此攻擊者可以很容易地生成很多很多地址。這些地址中只有一小部分與所需的輸出相似,並且您驗證的每個額外字元都會使攻擊者創建山寨地址的成本增加 58 倍(因為在 base58check 地址編碼中使用了 58 個字元)。所以我們看到,通過驗證足夠多的字元,攻擊在計算上變得不可行,因為攻擊者在找到匹配的地址之前必須檢查數量驚人的地址。

以數字為例:在精通比特幣:第 4 章接近尾聲時,Andreas 強調虛地址可能很危險,因為攻擊者可以創建一個同樣以相同虛字元開頭的地址。然後攻擊者可以用他們的地址替換合法的地址,並且由於它是一個虛地址,這種替換可能比平常不那麼明顯(即,使用者看到地址的開頭匹配,並且繼續而不檢查結尾)。

攻擊者能否生成一個開頭和結尾匹配但中間不同的地址?

如果您驗證了足夠多的字元,那麼攻擊者可能無法在攻擊向量的時間限制內生成山寨地址。在創建(並攔截)支付地址之前,攻擊者將無法開始暴力破解地址,然後一旦使用者送出付款,時間就會用完。在許多現實世界的情況下,這個時間段可能只有幾分鐘(或幾小時)長。使用 Andreas 書中的數字,我們可以看到,檢查地址開頭和結尾的 4 個字元應該足以阻止任何只有不到 1 小時的時間來生成模仿地址的攻擊者。

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