Security

證明 xpub 匹配 xprv?

  • August 7, 2019

我正在研究一個紙質錢包系統,我使用離線筆記型電腦生成高畫質 xpub/xprv。我用手記下xprv。我使用手機通過 QR 碼擷取 xpub,以傳輸到線上完整節點。

一種潛在的攻擊向量是用攻擊者控制的地址替換接收地址。為了解決這個問題,我計劃將 xpub 列印為二維碼,偶爾使用離線筆記型電腦(沒有狀態),掃描它並生成一批新的接收地址,然後我可以手動驗證與創建的地址是否匹配全節點。

但是由於列印的 xpub 二維碼在到達紙張之前必須經過幾台不可信(即線上)的電腦,我如何確定它在傳輸過程中沒有被篡改?

問題:如果我生成單個接收地址(例如 m/0/0),向該地址發送少量 BTC,使用線上節點創建 PSBT 提款,然後在離線節點上使用 xprv 成功簽名,是這足以證明xpub是真實的嗎?

換句話說,攻擊者可以修改 xpub 以使 m/0/0 匹配我的 xprv,但(例如)m/0/1 匹配攻擊者的 xprv 是否可行?(如果可行,我如何驗證列印的 xpub 與所有可能地址的 xprv 匹配?)

不,這是不可能的,因為它需要對HMAC-SHA512函式進行逆向工程或找到將生成相同密鑰的雙重衝突。密鑰是擴展密鑰的xpub編碼形式,基本上是賬戶級別的公鑰和鏈碼的串聯。您將此擴展鍵與索引號(0 表示接收,1 表示更改)一起包含在HMAC-SHA512函式中以獲取子擴展鍵。這個子擴展鍵將與索引號一起再次輸入HMAC-SHA512函式(現在這將按順序遞增以生成地址數,如 0、1、2…)以顯示地址。

現在要實現您提到的情況,攻擊者必須以xpriv這樣一種方式創建一個,xpub當通過 SHA512 函式兩次(具有相同的索引號)時,對應的地址將生成與您相同的第一個地址,但在您之後不同增加索引號。這意味著,攻擊者必須找到兩次沖突才能獲得相同的首地址。這是不可能的壯舉。

但是由於列印的 xpub 二維碼在到達紙張之前必須經過幾台不可信(即線上)的電腦,我如何確定它在傳輸過程中沒有被篡改?

當您將此類擴展密鑰導入 Web 伺服器或線上應用程序時,您應該生成一些地址並檢查它們是否與您在隔離設備上生成的地址匹配,以查看服務/伺服器在導入時沒有受到損害xpub

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