区块链 · 数字资产知识 · 行业资讯
文章库关于本站

风险识别

区块链 验证签名入门需要了解什么:基础概念与适用范围

摘要

验证签名用于检查签名、公钥与被签署数据是否匹配,是区块链交易授权检查的一部分。理解私钥、公钥、哈希和签名覆盖范围,再区分比特币的输出解锁与以太坊的账户交易,有助于厘清验签成功、交易有效和执行成功之间的关系。

盾牌保护透明数据核心的原创概念插画

验证签名检查什么

验证签名的核心,是判断某个签名是否与指定公钥及被签署的数据相匹配。私钥用于产生签名,公钥用于验证;验证者不需要取得私钥。签名为交易授权提供密码学依据,但不能单独证明签署者的现实身份,也不能证明其理解了交易内容。

入门还需要区分哈希与签名。哈希把数据转换为摘要;签名则把密钥控制能力与特定数据关联起来。交易哈希可以用于识别交易,仅有交易哈希并不能证明交易获得了授权。

比特币:理解输出的解锁条件

Bitcoin Developer Guides 的交易说明以传统 P2PKH 为例:输入引用先前的交易输出,并提供签名与公钥。验证时,脚本先检查公钥哈希是否符合该输出的条件,再检查签名是否匹配应签署的交易数据。

这里有两个独立问题:提供的公钥是否符合授权条件,以及签名是否对相应数据有效。只通过其中一项不足以完成解锁。这一例子适用于理解 P2PKH,不能把它的字段位置和脚本结构套用于所有比特币交易类型。

以太坊:理解账户授权与交易字段

ethereum.org 的交易说明将交易描述为经过密码学签名的指令。对于普通外部账户交易,签名用于验证发送方授权;交易还包含 nonce、接收方、金额、输入数据和费用相关字段。不同交易类型具有不同的编码规则。

理解这类验签时,需要把交易字段、编码格式和签名联系起来。面向人的展示信息与实际编码数据属于不同层次,验证过程必须以协议规定的数据为准。合约调用还需要解释输入数据,才能理解签名所授权的操作。

适用条件:明确签名覆盖的数据

验签双方必须遵循相同的数据构造、摘要和签名规则。字段含义相同,并不意味着不同编码得到的字节相同。入门时应先确定链、交易类型和签名规则,再讨论如何验证。

签名保护的是规则规定的覆盖范围。被覆盖的数据发生变化,会使原签名无法通过相应验证;不能据此笼统断言,任何签名都保护交易中的所有字段。

常见问题:验签通过是否代表交易成功

验签通过只是交易验证的一部分。比特币还需要检查被引用输出等条件;以太坊还涉及账户 nonce、余额及执行所需资源。授权检查通过,不等于交易已经进入区块,也不等于合约执行一定成功。

排查验签失败时,应分别核对公钥或发送方、签名格式、交易类型以及待签署数据。把授权验证、交易有效性检查和执行结果分开理解,才能准确判断问题发生在哪一层。

← 返回全部文章

延伸阅读 · 相关栏目

安全防护钱包与账户风险识别信息核验