当前位置:首页 > 安全技巧 > 正文内容

如何用硬件钱包签名DeFi交易?

使用技巧1个月前 (06-03)安全技巧35

硬件钱包在大多数人手里只做一件事:存币,转出,再存币。用到DeFi上,很多人第一反应是"硬件钱包不是不能连合约吗",然后继续用热钱包每天签授权、签质押、签跨链桥,热钱包里趴着几十万U的LP。硬件钱包不是不能交互DeFi,而是需要你比用热钱包多做一个动作——看清楚设备屏幕上显示的内容,再决定按不按确认。这个动作能挡住绝大多数盗币攻击,但前提是你知道屏幕上的数据在说什么,以及DeFi交易和普通转账在签名逻辑上有什么不同。

各大交易所:欧易官网  币安官网  芝麻Gate

DeFi签名和转账签名的本质区别:不是"转多少钱",而是"调用哪个合约的哪个函数"

普通转账签的是"从A地址转X个ETH到B地址",数据结构简单,硬件钱包屏幕上能完整展示收款地址、金额、网络,一眼看清楚。DeFi交互签的是"调用合约C的函数F,传入参数A、B、C,支付Gas费",屏幕显示的不是"转账100USDT",而是一串十六进制数据或者一段经过解析的函数描述。硬件钱包能不能解析这段数据、解析得对不对、你有没有能力判断这段数据是否安全,三个问题叠加,难度比转账高了一个量级。而且DeFi交易通常是多步组合,添加流动性要同时做两个授权和一个添加动作,每一步都需要单独签名,整个过程下来可能要在硬件钱包上按三四次确认键,每次看到的内容都不一样。中间任何一次签名被恶意替换,结果就是池子里的两种币同时被转走。

连接方式:用MetaMask当桥,硬件只管签名,蓝牙和二维码同样能用

硬件钱包 DeFi 连接流程示意图

硬件钱包自己不跑DApp前端,也不能直接打开Uniswap网页,它需要和浏览器钱包搭配——MetaMask、Rabby等支持硬件钱包连接的插件充当中间层,负责和合约交互、构建交易数据,然后把未签名的交易发送给硬件钱包,硬件钱包负责签名,签完发回给插件广播。Ledger系列打开Ledger Live确保固件最新,在Ledger的以太坊App里打开"允许合约数据"开关,然后用USB连接电脑,在MetaMask里选"连接硬件钱包"选Ledger选地址。OneKey操作更简单,OneKey桌面App直接内置了浏览器钱包,用USB连上硬件设备后无需额外插件。蓝牙和二维码连接同样可以签DeFi交易,只要能稳定传输交易数据就行,Keystone的二维码签名在复杂交易时可能需要来回扫几次耗时比USB长但安全性一致。连接建立之后所有操作在浏览器前端完成,打开Uniswap选交易对输入金额点确认,交易弹窗弹出后硬件钱包屏幕会亮起显示交易详情,此时需要对比屏幕内容和你预期的是否一致,确认后再签名。

最关键的设置:盲签名不关,你的硬件钱包等于裸奔

硬件钱包处理智能合约交互时能不能把交易数据解析成人类可读的文字,取决于一个关键设置——盲签名是否开启。盲签名是指硬件钱包在无法解析交易数据的情况下直接对原始十六进制数据签名,屏幕显示的不是"授权USDT给0x..."而是一串0x095ea7b3...的数据,除非你能肉眼验证这段十六进制数据否则盲签等于闭着眼睛签。绝大多数钓鱼正是利用了用户开启盲签名后不看屏幕的习惯。Ledger的以太坊App默认允许盲签名需要在设置里手动关闭,关闭后遇到无法解析的合约调用设备直接拒绝签名并提示"Blind signing disabled"。这个开关挡住了所有未经验证的交易但也可能挡住正常的DeFi交互,比如你用的是比较新的协议Ledger的解析库还没跟上合法交易也会被拒。折中方案是平时关着遇到必须签名但解析不了的情况先确认合约和交易内容临时开一次签完立刻关掉。OneKey和Keystone对EVM交易的解析支持比较好大部分主流DeFi协议的函数调用都能直接翻译成人话显示在屏幕上,但遇到少见的自定义合约函数时依然可能退回到盲签模式。所以无论用什么硬件钱包,养成确认屏幕的习惯比任何设置都重要。

常见DeFi操作的签名类型:授权签名最危险,看到Unlimited直接拒绝

DeFi 签名类型与风险警示示意图

授权签名是最常见也最危险的一种,它在做任何需要合约动用你代币的操作之前必须完成,比如在Uniswap上第一次交易某个代币、在Aave上存入抵押品、在跨链桥锁定资产。硬件钱包屏幕会显示Approve函数跟着一个合约地址和一个授权额度,授权额度如果是无限屏幕上显示的数值会是一个天文数字或者直接用Unlimited标注。看到Unlimited出现在屏幕上,拒绝签名,回去把授权额度改成本次交易需要的精确数量重新签名。这一个小动作能防止恶意合约在日后榨干你所有授权过的代币。添加流动性、质押、存入这类操作通常是depositstakeaddLiquidity函数,屏幕会显示存入的代币种类和数量,但有些复杂操作不能完整显示所有参数,比如Curve的稳定池存入可能只显示存入的代币之一第二个代币的参数被折叠在data字段里,这种情况下如果你不确定交易内容先用小额测试或者在Etherscan上用模拟功能看一遍交易预期结果。取出和解除质押通常是withdrawunstake函数风险比存入低,只要确认解除的资产回到自己地址没有莫名其妙地授权新的合约额度一般问题不大。跨链桥的签名逻辑更复杂,桥上的交易往往触发的是桥合约对源链资产的锁定然后在中继链上发起新交易,硬件钱包屏幕上可能只会显示你正在和桥合约交互锁定多少资产但不会显示目标链上你会收到多少资产,这意味着桥合约本身的安全性决定了你的币能不能顺利抵达对岸,交互桥之前先确认桥合约是不是官方公布过的地址,一次确认比十次签名都管用。

签名弹窗内容和预期不一致,直接拒绝,这不是不礼貌是正常操作

签名弹窗弹出后屏幕内容和你预期不一致,直接拒绝。这不是不礼貌是正常操作,拒绝签名不会产生Gas费合约也不会收到任何信息相当于什么都没发生。常见的拒绝场景包括授权额度是无限而你只想交易一笔、合约地址和官方公布的不符、屏幕上显示的函数名和你正在进行的操作对不上、交易数据完全无法解析而你开着盲签名。拒绝之后回到DApp前端检查是不是访问了错误的网站或错误的合约地址。还有一种情况是硬件钱包拒绝签名不是因为安全而是因为合约数据格式不被支持,Ledger有时会遇到某个新协议的data字段超长设备直接报错,解决方案是更新以太坊App到最新版本或者换用支持更灵活的OneKey、Rabby钱包做前端硬件只负责签名。

用硬件钱包签DeFi的底线就三条,做到了安全优势才真正发挥出来

硬件钱包做DeFi签名安全性取决于你每次签名时是否真正核对了设备屏幕上显示的内容。私钥不出设备签名在安全芯片内完成这两点硬件钱包一直做得很好,但它防不了你在屏幕上看到Approve Unlimited时还按确认。攻击者用不着突破硬件钱包的安全芯片只需要诱导你在一个看似正常的页面上点下确认键后面的盗币动作全由你亲手签名完成。把硬件钱包连上DeFi之前确保三件事:盲签名默认关闭,签名前每一次都核对设备屏幕,授权额度永远不设无限。这三条做到了硬件钱包在DeFi场景下的安全优势才会真正发挥出来,而不是变成一个"需要插USB才能被骗"的多此一举。


免责声明

本文仅为硬件钱包操作的经验分享,不构成任何投资建议。DeFi交互涉及智能合约风险,请务必核实合约地址和签名内容,因误签或盲签导致的资产损失需自行承担。


相关文章

授权后资金被盗谁的责任?三种场景三种答案

授权后资金被盗谁的责任?三种场景三种答案

Web3里授权是最高频的操作——Uniswap换币要授权USDC,Aave存款要授权代币,OpenSea卖NFT也要授权。授权就是给合约一把钥匙,让它替你操作资产。但钥匙交错了人,代价是致命的。202...

如何防止钱包被"签名钓鱼"?别乱点确定,光是一串乱码可能让你倾家荡产

如何防止钱包被"签名钓鱼"?别乱点确定,光是一串乱码可能让你倾家荡产

你在网站上点"连接钱包"的时候,钱包弹出一个窗口让你"签名",上面全是你看不懂的字母和数字,你会不会想都不想就点"确定"?我猜十个人里有八个...

 钱包里留多少Gas费合适?

钱包里留多少Gas费合适?

有一次我在以太坊上急着补仓,Gas费设得不算低,结果交易发出去就Pending。一查才发现不是我Gas Price设得低,是我的ETH余额根本就不够付Gas。那几天连续做了好几笔交互,钱包里的ETH被...

使用新钱包前先转小额测试

使用新钱包前先转小额测试

有个做链上交互的朋友,去年往一个新钱包里打了两万U,准备拿去冲一个热点矿。钱转进去了,矿也挖到了,想要提出来的时候才发现,这个钱包是他从某个不知名网站下载的"汉化版",里面内置了后...

不要分享钱包的交易截图!

不要分享钱包的交易截图!

在群里晒一张钱包交易成功的截图,或者在社交媒体上发一张链上操作记录,你会隐去地址的部分字符,以为这样就很安全了。但一张看似普通的转账截图,可能包含三个层面的数据风险——交易哈希、钱包地址公开、以及交易...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。