Bitcoin-Core
Taproot - 消除關鍵路徑
我想構造一個事務輸出我想要消除的關鍵路徑,所以只執行腳本路徑。為了消除密鑰路徑,在我看來,我應該將“內部公鑰”設置為“0xFFFFFFFFFF..”,使相應的“內部私鑰”未知,因此密鑰路徑簽名是。通過這樣做,任何有興趣解鎖此輸出的人,包括我,都必須通過滿足其條件來遵循腳本路徑。如果我錯了糾正我。謝謝。
BIP 341回答了這個問題。能夠證明您選擇的內部公鑰是具有未知私鑰的點通常很重要。否則,惡意方可能會在 P2TR 地址中隱藏密鑰路徑支出,假裝沒有該內部公鑰的私鑰,但實際上擁有它。
BIP 341 還提供了有關如何避免洩露 P2TR 地址在使用時沒有可能的關鍵路徑花費這一事實的說明。如果您不關心這種隱私洩露,您可以採用建議的 H 點。
選擇具有未知離散對數的點作為內部關鍵點。這種點的一個範例是 H = lift_x(0x0250929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0),它是通過將 secp256k1 基點 G 的標準未壓縮編碼的散列作為 X 座標來構造的。
為了避免洩露密鑰路徑成本不可能的資訊,建議在 0…n-1 範圍內隨機選擇一個新的整數 r,並使用 H + rG 作為內部密鑰。可以通過向驗證者揭示 r 來證明這個內部密鑰不具有關於 G 的已知離散對數,驗證者然後可以重建內部密鑰是如何創建的。
一個密切相關的問題是關於如何授予對關鍵路徑支出而不是腳本路徑支出的訪問權限。