区块链/等级 VII · 演进/7.1 以太坊:世界计算机/课程 4
显式签名:UTXO与代币授权
用于支出的签名,以及比其更持久的权限
材料支持 PSBT 的硬件钱包访问 Etherscan 或类似的区块浏览器Revoke.cash 界面
好奇
- 为什么在你与某个智能合约交互多年之后,它仍能转移你的代币?
- 签署交易与授予长期授权在结构上有什么区别?
- 文件格式是如何在签名之前让比特币交易的所有输入和输出都可见的?
探索
- 在 EVM 网络上,ERC-20 标准负责管理代币的转移。若要将代币从外部钱包转移到合约中,持有者必须先调用 `approve` 函数,从而授权合约代表其花费一定数量的该代币。这一授权信息会被记录在合约的状态中,并持续有效,直到被撤销或用完为止。即使交易已完成,为去中心化交易所授予了 10,000 个代币的授权的用户仍保留着该权限。
- EIP-2612 引入了 `permit`,允许用户签署一条链下消息来设置这笔授权额度,而无需立即提交交易。该签名在被使用或超过截止时间之前始终有效,并授予同样的花费权限。一旦授权额度存在,无论用户此后是否再与该合约交互,控制获授权花费者地址的人都可以调用 `transferFrom` 将额度耗尽。
- 钱包盗取工具(Drainer)正是利用了这种架构。钓鱼网站诱骗用户为恶意地址签署无限额度的 `approve` 或 `permit`。一旦签署,攻击者便持有一项可随意转移代币的持续权限。撤销这些授权需要额外的交易和 Gas 费,增加了操作阻力。结果是,一个签名就可能造成永久性的漏洞;除非用户主动使用 Revoke.cash 或 Etherscan 等工具检查自己的有效授权,否则根本察觉不到。
- 比特币的 UTXO 模型运作方式不同。它不存在持续有效的权限。每笔交易都会明确花费特定的未花费交易输出(UTXO)来创建新的输出。签名授权的是将特定的币从特定地址转移到特定目的地,之后不会留下任何残余权限。如果用户签署了一笔向交易所发送1 BTC的交易,该签名无法在日后被重复使用来再发送1 BTC。
- BIP-174 定义了部分签名比特币交易(PSBT)格式。签名之前,PSBT 包含所有输入和输出,使软件或硬件钱包能够准确显示花费的是什么、资金流向何处。用户可以看到完整的交易结构——输入、输出和手续费——并对这份特定数据进行签名;使用默认签名类型时,签名承诺的是整笔交易。由于不会创建任何隐藏权限,恶意签名只能转移该笔交易中指定的币,无法为未来的转账留下后门。
- 这种权衡在于可组合性。EVM 的授权机制支持复杂的多步骤交互,合约可以在多个操作中代表用户管理代币余额。比特币的显式模型要求每一次转移都单独签名,因而无法以同样灵活的方式将权限委托给智能合约。用户通过透明性和不存在持续权限获得了安全性,但牺牲了自动化、持续性代理行为的便利。
关键事实
- ERC-20的`approve`功能允许合约获得授权,代表持有者花费代币,该授权会一直有效,直至被撤销。
- EIP-2612 允许通过链下签名设置代币授权额度,而无需立即执行交易。
- 钱包盗取工具会利用无限或被遗忘的授权权限,从受损的钱包中窃取代币。
- 比特币交易会消耗特定的未花费输出,并创建新的输出;不会生成任何永久性的权限。
- BIP-174(PSBT)允许用户在签名之前查看比特币交易的所有输入和输出信息。
- EVM 的可组合性依赖于持续有效的授权额度,而比特币的安全性依赖于显式的一次性签名。
练习 九、六、三、一
9收集列出去中心化金融或加密货币领域中需要用户签名的9种常见操作。并说明哪些操作会创建持续有效的权限,哪些只是单次转账操作。
6归类根据每次签名之后留下了什么,将这9种操作分为6组。
3提炼将这6组归纳为3个核心原因,说明与一次性转账相比,持续有效的权限为何会带来独特的安全风险。
1凝结用一句话说明:在每种模型中,签名授权了什么,以及该授权是否会持续有效、如何持续。
事实核查
日期、数字及数据均依据下方列出的已发表资料进行核实。