区块链深度学习系列|椭圆曲线数字签名(ECDSA)的应用
Comunion 是一个基于区块链的组织形式 (DAO) 与创业互助网络,为超级个体提供面向数字时代的全新商业基础设施和价值转化机制,致力于让劳动价值 像 资本一样自由流通、交易和积累。
本系列内容包含:基本概念及原理、密码学、共识算法、钱包及节点原理、挖矿原理及实现。
区块链中哪些地方使用了ECDSA?
通过前面系列的区块链原理和技术,大家应该都熟悉交易是如何在区块链系统或者在比特币、以太坊系统里面开展的。
在进行交易的环节当中,有一个很重要的消息,那就是需要进行签名。
也就是说一笔交易至少涉及到三项内容:付款人、收款人、付款金额。
例如,张三给李四付款的时候,张三付款人,李四是收款人,付款金额假设是5个 Token。
当张三准备好这笔交易之后,需要发给全网,当其他人看到这笔交易的时候,他们需要去认证这笔交易是否由张三发起的,这个环节中就使用到了数字签名技术。
交易签名如何运用ECDSA?
以特币为例,具体流程如下图所示。

交易的模块分为:交易输入和交易输出,一笔交易由多个输入或者多个输出组成。
交易输入代表付款信息,交易输出代表收款信息。当然里面还会有付款金额,付款金额的字段是在交易输出里面显示的。
这种交易类型和我们正常理解的交易是非常类似的,其资金的流向是从交易输入流向交易输出,即从付款人流向收款人。
图的右边有一个虚线的框,里面的 ScriptSig 是一个脚本签名,这个字段属于交易输入。同理,ScriptPubKey属于交易输出。脚本里面包含一些数据和操作码来支持这个脚本语言的运行。
ScriptSig 和 ScriptPubKey 可以直观的用中文解释为:解锁脚本和锁定脚本。
为什么 ScriptSig 又叫解锁脚本呢?是因为 ScriptSig 在之前相关连接的交易输出里面 锁定了一些资金。
如果张三要花费之前已有的 Token,也就是要花费一个未花费的交易输出,那么其需要在另一笔交易里面 构造一笔交易输入,在这个交易输入里面 会设置签名字段和公钥,以此证明张三有资格花费 未花费的交易输出。
这种情况叫做解锁脚本,即把之前已有的资金打开进行使用。
这个过程中,解锁脚本里面有两个字段数据,<sig> 和 <PubK>(PubKey的简写)。这两个字段分别代表:签名和公钥。两者由使用者提供,用以解决阻碍。
锁定脚本里面也有一些字段和操作码:DUP 是复制操作码;HASH160 是哈希操作码;<PubkHash> 是字段;EQUALVRTIFY 是验证操作码;CHECKSIG 也是验证操作码。
其整体意思是:执行复制——进行哈希——执行字段——验证是否相等——校验签名是否正确。
在验证签名的环节,就会调用ECDSA里面的验签算法。
如何使用ECDSA
我们知道了签名在交易里面的具体使用位置,那么 ScriptSig 和 ScriptPubKey 这两个脚本语言,是如何执行,以及在执行的过程当中如何使用 ECDSA 呢?

如上图所示,这里会将两个脚本语言进行堆栈处理,即所有字段和操作码全部罗列在右边,解锁脚本里面有2个,锁定脚本里面有5个。
第一步,将第一个字段 <sig> 解锁,置于堆栈的底部;
第二步,向右移动一格,将 <PubK> 解锁推送至堆栈顶部,置于 <sig> 的上面;
第三步,DUP 是复制操作码,它会将刚刚解锁脚本里面的 <PubK> (公钥)进行复制,此时会有两个 <PubK>,结果被推送至堆栈顶部;

第四步,HASH160 将复制的公钥进行哈希,使之变成 <PubKHash>, 公钥哈希;
第五步,EQUALVRTIFY 操作码将 PubKHash 和用户的 PubKHash 对比,如果一致,则都被移除,然后继续执行(这里是为了对公钥进行认证,来表明公钥或者地址是否相同);
如果第五步匹配的话,继续执行第六步——验证签名,这里就用到了 ECDSA,也是交易中很关键的一步。
在图中会看到,在执行最后一个操作码的时候,堆栈里面有两个字段。
此时 CHECKSIG 操作码会核查签名 <sig> 是否与公钥的 <sig> 匹配,如果匹配,则会在顶部显示 TRUE,如果不匹配会显示 FLOSE。
如果返回值是TRUE 的话,此时发送者也表明了其对发送 Token 的所有权和使用权。
以上就是椭圆曲线数字签名(ECDSA)在区块链中的主要应用位置和场景。

币安网
欧易OKX
HTX
Coinbase
大门
Bitget
Bybit
K网(Kraken)
双子星(Gemini)
Upbit
泰达币
以太坊
比特币
Solana
USD Coin
瑞波币
币安币
First Digital USD
狗狗币
OFFICIAL TRUMP