本文章深入探讨了硬件钱包在交易签名中的安全性,并强调用户在签署任何信息或交易时必须仔细验证显示的关键信息。通过理解EIP-712标准和校验数据,用户能够有效避免诈骗和安全漏洞,保障数字资产安全。
了解在你进行签名之前,你的硬件钱包必须显示的内容。验证消息和交易中的关键信息以避免诈骗,因为安全性始于你自己。
在区块链安全领域,硬件钱包仍然是防止未经授权访问数字资产的最强大防御之一。然而,正如最近几起高调的安全漏洞所示,它们的安全性不仅仅依赖于设备本身——它取决于 用户在这些设备上签名时验证交易的能力。
在最近的一段视频中,Cyfrin 的首席执行官和安全研究员 Patrick Collins 解释了每个硬件钱包用户应该知道的内容:签名时必须在屏幕上显示的必要细节。
了解这些提示可能意味着保护你的资产和成为黑客受害者之间的差异。
最近的 $14亿美元的Bybit黑客事件 清楚地提醒了我们项目的风险。即使使用多签名钱包设置,要求三人分别批准,交易所仍然被一个复杂的攻击破坏,该攻击欺骗了签署者。屏幕上接口显示了清晰、合法的交易细节。但 实际上发送到硬件钱包的数据包含了隐藏的恶意指令。
这个漏洞强调了区块链安全中的一个基本法则:绝不要仅根据屏幕上看到的内容签名交易。始终验证你的硬件钱包被要求批准的实际操作。
注意: 尽管消息和交易在钱包界面中的外观可能类似,但它们的用途不同。消息 是链外签名,用于事务如 Safe 批准,而 交易触发实际的链上操作。两者都需要仔细验证但出于不同的原因。
大多数现代区块链签名遵循EIP-712标准,它将消息数据组织为结构化的人类可读格式。当你签名一条消息时,该过程涉及三个组成部分:
域:识别上下文,通常是请求签名的应用或服务。
类型:定义消息中使用的结构和数据类型。
消息:包含被签名的实际值,与定义的类型相匹配。
EIP-712 数据需要的三样东西;来源:YouTube视频:你在硬件钱包上签署的是什么?
这三个组件,域、类型和消息,一起哈希产生最终摘要。该摘要即为你的私钥实际签署的内容。在 Safe 多重签名钱包的情况下,此摘要称为 Safe交易 哈希,或 SafeTxHash。
SafeTxHash 的构造方式;来源:YouTube视频:你在硬件钱包上签署的是什么?
在签名消息时,硬件钱包应提供 足够的信息 以验证所签名的内容。以下任何一种信息都是可以接受的,但有些验证起来更容易:
理想:最终摘要或 SafeTxHash
良好:单独的消息哈希和域哈希
可接受但繁琐:整个数据结构
验证签名需要什么?;来源:YouTube视频:你在硬件钱包上签署的是什么?
例如,Ledger Flex 显示了域哈希和消息哈希以及以可读格式显示的完整数据结构。
来源:YouTube视频:你在硬件钱包上签署的是什么?
对于需要验证签名数据的用户,尤其是在多签名设置(如Safe)中,有几种工具可以帮助:
在 Safe{Wallet} 验证交易数据;来源:Safe
来源:Cyfrin 的 safe-tx-hashes GitHub 库
当你发送交易时,你不仅是在确认身份——你正在授权在区块链上执行实际指令。这使得calldata在检查和理解时至关重要。
交易签名引入了 与简单消息签名相比独特的一组验证挑战。虽然两者都涉及加密签名,但它们的用途不同。
在某些系统中,如 Safe 多重签名,签署消息是多步过程的一部分,最终会产生链上交易。在其他系统中,例如登录应用程序或签署链外投票,消息签名从未被跟随链上交易。
至少,硬件钱包必须显示:
网络信息: 你正在与之交互的区块链(例如,以太坊主网、Arbitrum 等),以确保你处于正确的网络上。
网络费用: 执行交易的总成本,通常以 ETH 或区块链的原生代币表示。
Gas 参数: 包括 gas 限额和 gas 价格;这些控制交易可以使用多少计算以及处理速度。
Nonce : 一个唯一数字,用于保持交易顺序并防止重放攻击。
Calldata:你的交易将执行的低级指令,检查功能调用、参数以及潜在的风险标志,例如 DelegateCall
。
理想情况下,钱包还应 解码 calldata 为人类可读的格式。然而,由于解码并不总是完美,一些安全研究人员可能更喜欢同时接入 解码后的和原始版本。
来源:YouTube视频:你在硬件钱包上签署的是什么?
来源:YouTube视频:你在硬件钱包上签署的是什么?
鉴于最近的Bybit交易所黑客事件,这些指导显得更加紧迫。尽管使用了多签名设置,Bybit的签名者批准了一个包含多个风险标志的恶意交易,这些风险标志本可以通过适当的硬件钱包验证发现:
目标地址 指向一个在几天前才创建的未经验证的智能合约。
一个操作参数设为 1
, indicating a DelegateCall
,这是一个风险较高且有时会被滥用的函数。
输入数据 被设计成看起来合法,同时悄悄执行恶意代码。
如果签名者在他们的硬件钱包上查看完整的 calldata,并知道应该注意哪些内容,他们可能会在损害发生之前 发现这些异常。
根据这些信息,针对硬件钱包用户(特别是那些管理资产的用户)出现了几个 最佳实践:
始终验证签名数据:在签署消息时(例如,在 Safe 多签名中),确认域、类型和消息哈希(或 SafeTxHash)与你的预期匹配。
彻底检查 calldata:对于交易,检查原始 calldata。了解该功能的作用、调用对象和使用的参数。
使用独立验证工具:不要仅依赖你的计算机屏幕。使用可信工具或浏览器来解码和验证交易细节。
了解该注意什么:了解足够的常见以太坊操作(如 DelegateCall、代币转账和合约创建),以便识别出异常。
选择合适的硬件钱包:使用能够清晰显示所有相关细节的设备:目标地址、网络、gas 费用和原始 calldata。对于那些同时提供解码摘要并允许你切换视图的钱包,附加得分。
在 签署消息 时,你的硬件钱包必须提供足够的细节以验证你到底批准了什么。至少,它应显示:
理想情况下,它应显示最终的 SafeTxHash 或 域哈希和消息哈希 组件,为你提供额外的保障。
在 签名交易 时,要求更为深入。你的硬件钱包应显示:
最 安全的钱包解码 calldata 为清晰的人类可读动作。但对于希望保持完全控制和透明度的高级用户,访问 原始 calldata 仍至关重要。
由于复杂的攻击持续针对主要协议,这些验证能力是基本的安全要求。理解 该注意什么以及如何验证 你钱包显示的信息可能是安全与妥协之间的差别。
在这个基础上,你可能想了解如何使用 Cyfrin 的 safe-tx-hashes 来 验证 calldata。
对于那些希望提升其区块链安全技能的人,Cyfrin 的 安全与审计课程 提供了识别和防止此类攻击的全面培训。
外面小心,始终验证你的交易。
- 原文链接: cyfrin.io/blog/hardware-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!