主页 > imtoken-冷钱包 > 比特币技术---交易签名验证原理

比特币技术---交易签名验证原理

imtoken-冷钱包 2023-03-11 07:51:34

博客:

掘金:

GitHub:

出版书籍:

本文的风格采用直截了当的方法。

前提信息 私钥可以推导出公钥; 公钥可用于推导出公钥的散列; 1和2都不可逆。发送交易时——签名数据的组成

在花费一个比特币的输入时,即在花费输入时,构造交易时,签名阶段需要在输入结构体中携带签名数据体,即signature_script。 其核心结构如下:

{

比特币和股票交易技术_比特币基于什么技术_808比特币创始人颜万卫 炮制比特币风险大

"outpoint":{ "tx_hash": "", "index": 0 }, "signature_script": object, ... }

比特币和股票交易技术_比特币基于什么技术_808比特币创始人颜万卫 炮制比特币风险大

关键就在signature_script,它由几个部分组成比特币基于什么技术,从下面的源码片段可以知道。

signature_script = 其他 + 签名 + pkData

比特币技术 --- 交易的验签原理

上式右边的另一个代表比特币虚拟机的一些操作码,我们忽略它。 那么,签名私钥就是对交易进行签名的真实数据,pkData就是私钥privKey衍生出来的公钥哈希(pubkeyHash)。

发送交易时——接收方的输出组成

output 为输出,其中可以指定转账的收款人是谁,接收多少btc。 它的结构是:

比特币基于什么技术_808比特币创始人颜万卫 炮制比特币风险大_比特币和股票交易技术

{
    "value": 1,
    "pk_script": []byte
}

pk_script是一个字节数组,对应脚本字节数据。 比特币有许多不同的脚本结构:

P2PKH, P2SH, P2WSH, P2WPKH...

比特币基于什么技术_808比特币创始人颜万卫 炮制比特币风险大_比特币和股票交易技术

我们以 P2PKH 为例。 结合下面的源码截图,可以看出其字节数组结构为:

OP_DUP OP_HASH160 pubKeyHash OP_EQUALVERIFY OP_CHECKSIG

比特币技术 --- 交易的验签原理

OP_DUP OP_HASH160 这些是什么? 这些是比特币虚拟机的操作码比特币基于什么技术,OP是英文operation的缩写,操作码的本质是一个十六进制数。 如果你想更深入地了解它们,你可以买我的第二本书,里面有详细的技术分析,包括虚拟机。

上面的P2PKH结构,当虚拟机运行它时,代码执行流程如下:

OP_DUP:执行复制栈顶数据的操作,然后将数据放入栈顶; OP_HASH160:对栈顶数据执行ripemd160哈希操作。 160之前会先执行一个sha256(data); OP_EQUALVERIFY:对栈顶的两个数据进行比较操作,相等则移除; OP_CHECKSIG:执行验证签名操作,这里会用到pubKeyHash。

记住这个pubKeyHash,后面验证签名的时候会用到它,就是公钥哈希。

比特币基于什么技术_比特币和股票交易技术_808比特币创始人颜万卫 炮制比特币风险大

检查签名

以上内容已经准备好签名验证所需的所有数据。 签名验证步骤如下:

节点收到交易后,从新交易的数据中获取input结构中的signature_script(scriptSign)、tx_hash、index参数; 使用tx_hash和1中的index找到这个input对应的output(UTXO模型),设置为A ;从A中获取pk_script脚本命令和里面的pubKeyHash; 根据字节范围从signature_script中获取pkData,即pubKey(公钥); 从pubKey中推出pubKeyHash_1,比较pubKeyHash_1 == pubKeyHash; 结束签名验证。 课后回答为什么p2PKH步骤中不直接存储pubKey而是pubKeyHash?

答:隐藏收款人的公钥。

为什么以太坊的签名验证方式与比特币如此不同?

答:账户模型的不同导致了这样的结果。

程序员灯塔

转载请注明原文链接:比特币技术---交易签名验证原理