
先区分数字签名与加密
“签名加密技术”容易把两种功能混为一谈。数字签名主要回答谁授权了这份数据、签名覆盖的内容是否被修改;加密主要解决内容能否被未获授权者读取。区块链使用密码学签名,并不意味着链上数据已经加密。
以太坊交易文档将交易描述为经过密码学签名的指令;MDN 的 SubtleCrypto 文档则分别列出签名、验签、加密和解密接口。这两种功能需要按实际保护目标选择,不能互相替代。

条件一:明确授权对象与验证依据
需要验证账户授权、发现内容改动时,数字签名才有明确用途。验证方必须能够依据协议,将签名与相应公钥或账户关联起来,并确定签名覆盖了哪些内容。签名本身不会自动证明签署者的现实身份,也不能证明所签内容符合事实。

在交易场景中,接收对象、金额和调用数据等关键内容需要纳入协议规定的签名范围。若系统只验证签名,却未核对签名对应的具体请求,授权含义就可能被误解。
条件二:密钥安全且实现兼容
私钥必须由有权签署的一方安全控制。私钥泄露后,攻击者也可能产生能够通过验证的签名,因此验签通过不能单独证明账户持有人真实知情。密钥生成、保存、备份及使用权限,都属于适用条件。
签署端与验证端还需要遵循一致的算法、参数、数据编码和签名格式。MDN 所介绍的 Web Crypto 提供底层密码学能力,但接口存在不代表自动兼容任意区块链协议。浏览器使用 SubtleCrypto 还受安全上下文及具体算法支持情况限制。
条件三:内容可理解,并满足业务规则
签署者需要理解自己授权的内容。十六进制调用数据可能难以直接判断,应通过可信的解析与展示呈现关键字段;清晰展示有助于识别授权范围,但不能保证合约逻辑安全。
以太坊交易文档还说明了账户交易序号、执行资源限制及费用等要素。签名验证只是交易处理的一部分;有效签名不代表交易已经被区块收录,也不代表合约执行必然成功。
常见问题:哪些需求需要额外机制
签名能隐藏数据吗?不能。涉及隐私内容时,需要另行设计加密、解密权限及密钥分发机制,并明确哪些数据会公开。
签名能防止请求被重复使用吗?不能单靠签名实现。系统需要结合序号、使用状态或其他上下文限制,判断同一授权是否仍可接受。
所有链上查询都需要签名吗?不一定。公开数据读取通常不涉及账户授权;是否需要签名,应取决于操作是否改变状态、访问权限及具体协议要求。