
验证签名检查什么
验证签名的核心,是检查一个签名是否与指定公钥及被签数据匹配。私钥用于生成签名,验证者使用公开信息完成检查,无须取得私钥。签名将授权与具体数据联系起来:被签内容改变后,原签名通常无法继续通过验证。
这种检查证明的是密码学上的对应关系,不能直接证明签名者的现实身份,也不能判断其是否理解或自愿接受了数据表达的全部含义。

先区分密钥、公钥和地址
私钥是需要保密的签名凭据,公钥用于验证签名,地址则承担链上标识或表达接收条件的作用。地址和公钥不能直接画等号;验证过程必须遵循具体协议,确认验证所用公钥与目标地址或支出条件的关系。

签名也不等于加密。验证签名关注数据的授权与完整性,不负责隐藏内容;公开交易即使带有有效签名,其公开字段仍然可以被读取。
比特币中的验证实例
Bitcoin Developer Guides 的交易说明以传统P2PKH为例:输入引用此前的未花费输出,并提供签名和公钥。脚本先核对公钥的哈希是否符合该输出的条件,再检查签名是否匹配规定的交易数据。
这里有两个独立问题:提供的公钥是否符合支出条件,以及签名是否有效。只验证其中一项不足以完成授权检查。这一示例适用于传统P2PKH,不能直接代表所有比特币脚本类型。
以太坊账户的适用区别
ethereum.org 的账户说明区分外部账户与合约账户:外部账户由私钥控制,合约账户由代码逻辑控制。外部账户的交易签名用于核验发送方授权,账户的nonce参与防止同一交易被重复执行。
因此,讨论验签时应先明确账户类型。合约账户的授权需要结合其代码理解,不能把外部账户的密钥模型直接套用到每一个地址。
入门常见问题
为什么内容看起来相同,验证却失败?验签针对协议规定的数据表示,而非屏幕上的文字观感。被签字段、编码或数据处理规则不一致,都可能导致验证失败。理解验签前,应先弄清究竟签了哪些数据。
签名通过是否意味着交易成功?签名有效只是交易验证的一部分。节点还需要检查相关链上状态和其他规则,例如引用的输出是否已被花费、账户nonce是否符合要求。交易能否被接纳、是否已被区块收录,也不能仅凭验签结果判断。