Schnorr签名序列化

Schnorr签名的序列化包括两个值,kG 和 s。值 kG 是比特币椭圆曲线(称为 secp256k1)上的一个点,通常由两个32字节的坐标表示,例如 (x, y)。然而,只需要 x 坐标,因此只包含该值。当您在比特币的Schnorr签名中看到 kG 时,请注意它只是该点的 x 坐标。

值 s 是一个标量(意思是用来乘以其他数字的数字)。对于比特币的 secp256k1 曲线,它的长度永远不会超过32字节。

虽然 kG 和 s 可能有时是可以用较少于32字节表示的值,但它们很少会比32字节小得多,因此它们被序列化为两个32字节的值(即小于32字节的值具有前导零)。它们按照 kG 然后是 s 的顺序进行序列化,生成确切的64字节。

Taproot软分叉,也称为v1隔离见证,将Schnorr签名引入了比特币,并且截至目前,这是比特币中使用Schnorr签名的唯一方式。当与taproot keypath或scriptpath spending一起使用时,64字节的Schnorr签名被认为使用默认的签名哈希(sighash),即SIGHASH_ALL。如果使用了替代的sighash,或者如果花费者想要浪费空间来显式指定SIGHASH_ALL,那么将在签名后附加一个额外的字节,指定签名哈希,使签名成为65字节。 正

如我们将看到的那样,无论是64字节还是65字节,都比描述在“ECDSA签名序列化(DER)”中的序列化效率要高得多。

Last updated