為什麼 bip32 指紋用於 bip174 psbt?
指紋在 bip174 psbt 規範中被廣泛使用。這樣做是為了加快簽名者的解析速度,以便他
可以觀察該輸出的公鑰的主指紋是否屬於它自己(引自 BIP174)。
BIP32 將指紋定義為公鑰的 hash160 的前 4 個字節。它還說
請注意,父節點的指紋僅作為軟體中檢測父節點和子節點的快速方法,軟體必須願意處理衝突。在內部,可以使用完整的 160 位標識符。
為什麼為 psbt 選擇指紋而不是完整雜湊?對於 4 個字節的數據,衝突並不少見,在這種情況下,在 psbt 事務解析中添加緩解似乎不必要地複雜。
還有一個問題是,如果鏈碼改變而公鑰沒有改變,指紋將保持不變。如果是這種情況,兩個相同的公鑰之間的指紋將是相同的,但每個都會導致不同的派生子密鑰。這為碰撞檢測留下了更多的工作,甚至可能破壞使用指紋進行快速帳戶所有權檢查的好處。
為什麼為 psbt 選擇指紋而不是完整雜湊?對於 4 個字節的數據,衝突並不少見,在這種情況下,在 psbt 事務解析中添加緩解似乎不必要地複雜。
指紋衝突仍然需要在單個 PSBT 中有數千個簽名者才能真正成為問題。當您考慮情況時,碰撞的可能性並不大。
還有一個實際問題。您無法從硬體錢包中獲取完整的 pubkey hash160。沒有包含此數據的現有標準,也沒有導出它的現有 API。在某些設備中,您可以獲取主公鑰並自行對其進行雜湊處理,但並非所有設備都支持獲取該密鑰。指紋更容易獲得,只需獲取密鑰的 xpub
m/0h
並從中提取父指紋。還有一個問題是,如果鏈碼改變而公鑰沒有改變,指紋將保持不變。如果是這種情況,兩個相同的公鑰之間的指紋將是相同的,但每個都會導致不同的派生子密鑰。這為碰撞檢測留下了更多的工作,甚至可能破壞使用指紋進行快速帳戶所有權檢查的好處。
除非您故意弄亂鏈程式碼,否則我看不出這怎麼可能,而且我不明白您為什麼會這樣。
鏈碼是通過使用 HMAC-SHA512 對 BIP 32 種子進行散列並取最後 256 位而得出的。前 256 位成為主私鑰。因此,您將不得不以某種方式碰撞前 256 位(因此擁有主私鑰的私有部分)。但這是極不可能的,類似於正常的私鑰衝突。唯一可能擁有相同公鑰但鏈碼不同的情況是,如果您直接修改鏈碼本身,但我認為沒有任何人這樣做,如果他們這樣做,他們真的只會給自己帶來不便。