Script中的ECDSA签名验证

Script中的ECDSA签名验证

这篇文章首次被发布在Medium上。

我们在Script中实现了ECDSA签名验证算法。它可以验证任意信息是否由与给定的公钥对应的私钥进行签名,而OP_CHECKSIG只能在信息是当前支出交易¹时验证签名。令人惊讶的是,这是在没有引入诸如BCH上的OP_DATASIGVERIFY(又名OP_CHECKDATASIG)的任何新操作码的情况下完成的。

椭圆曲线数字签名算法(ECDSA)

ECDSA是比特币系统中用于签名生成与验证的算法。它的验证算法如下所示。

ECDSA签名验证

算法的运行过程

我们已经使用之前发布的椭圆曲线库来实现了如下所示的算法。

首先,我们需要从以DER格式编码的签名中提取rs这两部分。由于它们是大端序,我们必须将其转换为小端序,这是在Script/sCrypt中编码数据的方式。

DER

在检索到rs后,我们只需运行标准的ECDSA验证算法。


ECDSA合约

***

注释:

[1]更准确地说,它对于sighash来验证签名。

202024日的“创世”协议升级是比特币历史上的一大里程碑,将见证BSV最大程度地回归到中本聪原先设想的协议。请访问“创世”硬分叉页面以了解更多信息。

要直接在您的收件箱接获CoinGeek.com最新消息,CoinGeek会议特别优惠以及其他内部信息,请加入我们的邮件列表

[id^="_form"]
[id^="_form"]
[id$="_submit"]
[id$="_submit"]
[^;]
[^;]
[?&]
[?&]
[^&#]
[^&#]
[(d+)]
[(d+)]
[elem.name]
[elem.name]
[+_a-z0-9-'&=]
[+_a-z0-9-'&=]
[+_a-z0-9-']
[+_a-z0-9-']
[a-z0-9-]
[a-z0-9-]
[a-z]
[a-z]
[el.name]
[el.name]
[id^="_form"]
[id^="_form"]
[id$="_submit"]
[id$="_submit"]
[^;]
[^;]
[?&]
[?&]
[^&#]
[^&#]
[(d+)]
[(d+)]
[elem.name]
[elem.name]
[+_a-z0-9-'&=]
[+_a-z0-9-'&=]
[+_a-z0-9-']
[+_a-z0-9-']
[a-z0-9-]
[a-z0-9-]
[a-z]
[a-z]
[el.name]
[el.name]