
签名究竟能证明什么
讨论区块链证明签名的应用边界,需要先明确证明对象:数字签名主要用于验证消息与特定密钥之间的关联,以及被签名内容是否保持一致。它能支持授权判断,但不能独立确认操作者的现实身份、签署时的真实意愿或消息描述的事实。
以太坊交易文档介绍了签名指令如何发起状态变更;OpenZeppelin 密码学文档则涵盖消息签名校验、结构化数据签名及合约账户验证。两者分别涉及执行流程与验证机制,不能把某一层的验证通过理解成所有条件均已满足。

适用范围取决于被签名的内容
签名可用于交易授权,也可用于应用中的消息认证。其效力受签名覆盖字段约束:若授权需要限定接收者、操作内容或使用场景,这些条件就需要与消息绑定,并由验证方检查。未被绑定的限制,不能仅凭签名推导出来。

EIP-712 为带类型的结构化数据定义签名方式,其域信息可包含链标识和验证合约地址,用于区分签名适用的环境。不过,结构化编码本身不会自动补齐业务权限,也不保证用户理解了操作后果。
验证通过不等于执行成功
有效签名是交易被接受的条件之一。交易还受账户状态、nonce、费用和合约执行规则等约束;已经签署的交易可能尚未广播,已经进入区块的交易也可能执行失败。判断结果应结合执行状态,而不能只看签名或交易哈希。
消息签名也不必然产生链上操作。它是否能够触发后续动作,取决于应用如何解释消息、检查授权并提交执行请求。因此,签署消息与网络确认状态变更属于不同环节。
防重放与账户类型构成重要边界
同一份有效签名可能被再次提交。域隔离有助于限制跨环境使用,而同一环境内的重复使用还需要 nonce、消息失效记录等机制;若授权包含有效期,也需要验证方实际检查。签名字节本身不宜被视为唯一的防重复标识。
普通账户可以通过 ECDSA 恢复签名地址并核对授权方;合约账户则可通过 ERC-1271 等机制表达验证结果。应用若只支持一种校验路径,就不能默认覆盖所有账户类型。
常见问题:身份、真实性与可读性
签名能证明某个人签署了吗?单靠密码学验证只能建立密钥层面的关联;将地址对应到现实个人,需要额外的身份绑定依据。密钥泄露或被误用时,有效签名也无法自行识别这些情况。
签名能证明内容真实吗?它可以验证声明的签署关系,却不能证明声明所描述的现实事件确实发生。签名有效与事实可靠需要分别判断。
把签名内容显示清楚是否就足够?可读展示有助于理解授权,但不能替代合约逻辑和权限检查。应用边界最终由签名内容、验证规则与实际执行共同决定。