Signature

SIGHASH 標誌是如何編碼到簽名中的?

  • January 13, 2021

此頁面描述了 SIGHASH 標誌:

OP_CHECKSIG 從它評估的每個簽名中提取一個非堆棧參數,允許簽名者決定要簽署交易的哪些部分。由於簽名保護交易的這些部分不被修改,這讓簽名者有選擇地選擇讓其他人修改他們的交易。

但是如何從簽名中提取 SIGHASH 標誌?

SIGHASH 類型被序列化為單個字節,然後簡單地附加到 DER 編碼的簽名中。

典型的 P2PKH scriptSig 範例:

304402206e3729f021476102a06ea453cea0a26cb9c096cca641efc4229c1111ed3a96fd022037dce1456a93f53d3e868c789b1b750a48a4c1110cd5b7049779b5f4f3c8b62001 03ff1104b46b2141df1948dd0df2223720a3a471ec57404cace47063843a699a0f

上面的第二個元素是公鑰,按照SEC 1 的 Elliptic-Curve-Point-to-Octet-String Conversion序列化。第一個元素是 DER 編碼簽名,附加 0x01 以指定它是 SIGHASH_ALL(您已經找到其值)。如果您有興趣,要進一步分解簽名字元串:

30 <- a sequence
44 <- of length 0x44
 02 <- an integer
 20 <- of length 0x20
   6e3729f021476102a06ea453cea0a26cb9c096cca641efc4229c1111ed3a96fd <- r
 02 <- an integer
 20 <- of length 0x20
   37dce1456a93f53d3e868c789b1b750a48a4c1110cd5b7049779b5f4f3c8b620 <- s
01 <- SIGHASH type (not part of the DER encoding)

SIGHASH 類型也在簽名之前臨時附加到交易中,以便簽名排除其修改,有關更多詳細資訊,請參閱此答案

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