这篇文章首次被发布在Medium上。
我们在Script中实现了ECDSA签名验证算法。它可以验证任意信息是否由与给定的公钥对应的私钥进行签名,而OP_CHECKSIG只能在信息是当前支出交易¹时验证签名。令人惊讶的是,这是在没有引入诸如BCH上的OP_DATASIGVERIFY(又名OP_CHECKDATASIG)的任何新操作码的情况下完成的。
椭圆曲线数字签名算法(ECDSA)
ECDSA是比特币系统中用于签名生成与验证的算法。它的验证算法如下所示。
[caption id="attachment_475154" align="alignnone" width="700"] ECDSA签名验证[/caption]算法的运行过程
我们已经使用之前发布的椭圆曲线库来实现了如下所示的算法。
首先,我们需要从以DER格式编码的签名中提取r和s这两部分。由于它们是大端序,我们必须将其转换为小端序,这是在Script/sCrypt中编码数据的方式。
[caption id="attachment_475158" align="alignnone" width="700"] DER[/caption]在检索到r和s后,我们只需运行标准的ECDSA验证算法。
***
注释:
[1]更准确地说,它对于sighash来验证签名。