Taproot

BIP-118 SIGHASH_ANYPREVOUT 的公鑰

  • July 27, 2022

我正在閱讀引入新簽名模式 SIGHASH_ANYPREVOUT 的 BIP-118 規範。在bip 規範中,地址的長度為 33 字節或 1 字節。在這兩種情況下,公鑰都以 0x01 開頭。如果它有 33 字節長度,那麼我們刪除 0x01 前綴並使用剩餘的 32 字節,大概作為主根公鑰。

我無法理解的是我們如何使用 1 字節的公鑰。在 BIP 的規範中,據說在這種情況下,“使用 BIP 341 中定義的 32 字節的主根內部密鑰 p”。這是什麼意思?這個字節是否像在主根中那樣通過一些關鍵調整轉換為公鑰?我認為我缺少一些邏輯。我對比特幣有點陌生,通常,BIP 提案是為已經非常熟悉的人閱讀而編寫的。

0x01 字節公鑰的使用將在後面的BIP118中討論:

因為OP_0在堆棧上留下了一個空向量,所以它不會滿足 BIP 342 對未知公鑰類型的規則。因此,使用其中一個OP_1..OP_16OP_1NEGATE作為引用主根內部密鑰的一種方式很方便。為了使事情盡可能簡單,我們使用其中的第一個,並添加相同的字節作為前綴,以允許顯式指定密鑰的 ANYPREVOUT 簽名。

BIP342在這裡定義了未知的公鑰類型。公鑰必須不為零才能被視為未定義的公鑰。

如果公鑰大小不為零且不是 32 字節,則公鑰是未知的公鑰類型,並且不應用實際的簽名驗證。在簽名操作碼的腳本執行期間,它們的行為與已知的公鑰類型完全相同,只是簽名驗證被認為是成功的。

未知的公鑰類型允許通過軟分叉添加新的簽名驗證規則。軟分叉可以添加實際的簽名驗證,該驗證要麼通過,要麼使腳本失敗並立即終止。這樣,可以添加新的 SIGHASH 模式,以及帶有 NOINPUT 標記的公鑰和一個公鑰常量,該公鑰常量被主根內部密鑰替換以進行簽名驗證。

Taproot 內部密鑰是未調整的公鑰(Taproot 調整前)。

這個字節是否像在主根中那樣通過一些關鍵調整轉換為公鑰?

不,因為引用說它用於引用 Taproot 內部密鑰。該字節不會轉換為公鑰。

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