[{"data":1,"prerenderedAt":22},["ShallowReactive",2],{"blog-content-zh-what-is-blind-signing":3},{"slug":4,"title":5,"excerpt":6,"description":7,"bodyHtml":8,"faqItems":9},"what-is-blind-signing","什么是盲签(Blind Signing)？为什么绝不该签署你读不懂的内容","盲签是指批准一笔你的钱包无法以可读形式呈现的交易或消息 —— 原始 calldata、一段不透明的十六进制数据，或一个孤零零的哈希。本文解释 eth_sign 为什么永远不该被批准、盗币器如何依赖读不懂的请求，以及清晰签名与交易模拟如何让你先读懂再签名。","盲签详解：不透明的 calldata、eth_sign、只显示哈希的硬件钱包屏幕、盗币器为何依赖读不懂的请求、清晰签名与模拟如何解决问题，以及 WATS 的非托管签名处在什么位置。","\u003Cblockquote>\u003Cp>\u003Cstrong>盲签\u003C\u002Fstrong>(blind signing)是指批准一笔你的钱包无法以人类可读形式展示的交易或消息 —— 摆在你面前的是原始 calldata、一段不透明的十六进制数据，或一个 32 字节的裸哈希，而不是一句说明这次签名到底授权了什么的话。这不是密码学的失败：签名完全有效，在链上拥有完整效力，所以签署读不懂的数据，等于授予了你从未审查过的权限 —— 这也正是几乎每一款钱包盗币器赖以运作的基础。解药是\u003Cem>清晰签名\u003C\u002Fem>(clear signing)：钱包把请求解码成一句你能核对的话，并通过模拟预演哪些资产真的会转移 —— 再加上一个任何软件都无法替你养成的习惯：读不懂就拒绝。由于签名正是权限转移的那一刻，产生这枚签名的密钥是否只属于你，同样至关重要：\u003Ca href=\"\u002Fhot-wallet\">WATS Hot Wallet\u003C\u002Fa> 在 Ethereum、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 和 TON 上都是非托管的，没有你亲自批准的签名，任何资产都不会动。\u003C\u002Fp>\u003C\u002Fblockquote>\n\n\u003Ch2>什么是盲签？\u003C\u002Fh2>\n\u003Cp>盲签指的是请求本身与它的显示内容脱节的任何一次批准。链会照着已签署的字节执行；而你的屏幕是唯一能把你的意图与实际内容作比对的地方。当屏幕上只有十六进制时，这种比对根本无从进行 —— 攻击者要的正是这份“无从进行”。\u003C\u002Fp>\n\u003Cp>这道鸿沟属于信息层面，而非数学层面。签名并不编码“我同意兑换 100 USDC”，它编码的是“这把密钥授权这些字节”。这些字节究竟意味着一次兑换、一次无限额度授权，还是一张把你的 NFT 白送出去的链下订单，只有界面能够回答 —— 而界面拒绝回答的时候，盲签就发生了。\u003C\u002Fp>\n\n\u003Ch2>盲签会出现在哪些地方\u003C\u002Fh2>\n\u003Cp>盲签不是某一个功能，而是一整类“显示配不上数据”的情形。常见的几种：\u003C\u002Fp>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\u003Cth>请求类型\u003C\u002Fth>\u003Cth>你通常看到什么\u003C\u002Fth>\u003Cth>风险\u003C\u002Fth>\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\u003Ctd>eth_sign\u003C\u002Ftd>\u003Ctd>一个原始哈希或十六进制数据块\u003C\u002Ftd>\u003Ctd>极高 —— 设计上就无法验证；永远拒绝\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>原始类型化数据(EIP-712)\u003C\u002Ftd>\u003Ctd>结构化字段 —— spender、金额、截止时间\u003C\u002Ftd>\u003Ctd>含义不清时风险高 —— 字段可读不等于你读懂了\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>合约交易\u003C\u002Ftd>\u003Ctd>一个已解码的动作；钱包解不出来时则是原始 calldata\u003C\u002Ftd>\u003Ctd>完全取决于钱包的解码能力\u003C\u002Ftd>\u003C\u002Ftr>\n\u003Ctr>\u003Ctd>只显示哈希的硬件屏幕\u003C\u002Ftd>\u003Ctd>设备屏幕上只有一个哈希\u003C\u002Ftd>\u003Ctd>高 —— 设备确认的是你在场，而不是你看懂了\u003C\u002Ftd>\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>四行的共同规律是：风险随可读性而变。渲染越单薄的地方，危险就越浓。\u003C\u002Fp>\n\n\u003Ch2>eth_sign 为什么如此危险？\u003C\u002Fh2>\n\u003Cp>在各种签名方法中，\u003Cem>eth_sign\u003C\u002Fem> 是这个问题最纯粹的形态：它要求你的钱包签署一个任意的 32 字节值，以原始十六进制显示给你，而且不带任何把消息标记为“只是一条消息”的前缀。由于输入没有域分隔，它可以是任何东西 —— 包括一笔把资产转出你账户的交易的哈希。仅凭弹窗内容，即便是谨慎的专家也无法核实这个请求；它在设计上就无法验证。这正是主流钱包已弃用或彻底移除该方法的原因，也是那条实践规则毫无例外的原因：截至 2026 年，一个仍在请求 eth_sign 的网站，要么危险地过时，要么心怀恶意，而这两个答案都指向拒绝。\u003C\u002Fp>\n\n\u003Ch2>硬件钱包到底给你看了什么？\u003C\u002Fh2>\n\u003Cp>硬件钱包把密钥保存在离线环境，并在恶意软件无法篡改的屏幕上显示请求 —— 但那块屏幕的价值，取决于它上面渲染出了什么。面对设备读不懂的合约交互，许多设备在历史上会退回到只显示一个哈希，而开启它的开关在设置里就直接叫 blind signing。在可信屏幕上确认一个哈希，只能证明你按了那个按钮，却证明不了你批准的是什么。硬件安全的承诺是\u003Cem>所见即所签\u003C\u002Fem> —— 而当你所见的是三十二字节的噪声时，这个承诺就悄然瓦解了。硬件隔离保护的是密钥，不是决定。\u003C\u002Fp>\n\n\u003Ch2>盗币器如何利用盲签？\u003C\u002Fh2>\n\u003Cp>一套盗币器工具包，首先是一场针对签名体验的攻击。网站看上去像铸造页面、空投领取页或客服门户；它发出的请求则是一笔无限额度的代币授权、一个覆盖整个 NFT 收藏集的 setApprovalForAll，或者一条链下 Permit 或订单签名 —— 后者会在日后转走资产，而不再弹出任何提示。它们的共同点在于呈现方式：受害者签署了一个自己读不懂、或读了却没看懂的请求，随后资产就被掏空了。完整套路见\u003Ca href=\"\u002Fblog\u002Fwhat-is-a-wallet-drainer\">什么是钱包盗币器\u003C\u002Fa>，授权机制 —— 包括为什么一条免 gas 的签名就能清空一种代币的余额 —— 见\u003Ca href=\"\u002Fblog\u002Ftoken-approvals-and-permit-explained\">代币授权与 Permit 详解\u003C\u002Fa>。两者指向同一个根因：盗窃发生在签名那一刻，而盲签正是让攻击者能安然度过那一刻的东西。\u003C\u002Fp>\n\n\u003Ch2>什么是清晰签名 —— 它走到哪一步了？\u003C\u002Fh2>\n\u003Cp>行业给出的答案是\u003Cstrong>清晰签名\u003C\u002Fstrong>(clear signing) —— 即钱包必须先把每一个请求翻译成人能核实的表述，再去索要签名。截至 2026 年，它建立在两套机制之上。\u003Cem>解码\u003C\u002Fem>：钱包识别出被调用的合约与函数，把它渲染成一句话 —— 授权代币 X,spender 为 Y，额度无限 —— 而 ERC-7730 之类的努力正在建设开放的元数据注册表，让连硬件钱包的屏幕也能用人话显示合约调用，而不是一个哈希。\u003Cem>模拟\u003C\u002Fem>：钱包本身或它调用的服务，会在你签名之前把交易放到当前链状态上跑一遍，预览结果 —— 哪些资产会离开、哪些会进来、哪些授权会变化。模拟是预测而非保证 —— 预览与上链之间状态可能变化，恶意合约上链之后也可能表现得不一样 —— 但一份显示你的 NFT 正流向陌生地址的预览，足以叫停绝大多数盗币。截至 2026 年，各钱包与各条链的落地程度仍不均衡，所以在指望它替你示警之前，先看看你自己的钱包在一次日常操作中究竟渲染出了什么。\u003C\u002Fp>\n\n\u003Ch2>实用规则：读不懂就当作不可信\u003C\u002Fh2>\n\u003Cp>为了安全，你并不需要会读 calldata —— 你需要的是让读不懂的请求默认失败的习惯：\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>永远不要批准 eth_sign 请求。\u003C\u002Fstrong>它已经没有任何正当的主流用途 —— 这个请求本身就是危险信号。\u003C\u002Fli>\n\u003Cli>\u003Cem>优先选择会解码、会模拟的钱包。\u003C\u002Fem>如果你的钱包在一次日常操作上就只显示原始十六进制，那是值得为此换掉它的钱包问题。\u003C\u002Fli>\n\u003Cli>\u003Cem>读懂那些真正要紧的字段\u003C\u002Fem>：类型化数据请求里的 spender、金额、截止时间、operator。无限额度或陌生的 spender，就是停止信号。\u003C\u002Fli>\n\u003Cli>\u003Cem>让硬件钱包的盲签模式保持关闭\u003C\u002Fem>，除非你完全清楚某一笔特定交易为什么需要它 —— 用完之后立刻关回去。\u003C\u002Fli>\n\u003Cli>\u003Cem>连接要慎重。\u003C\u002Fem>大多数恶意请求都是通过匆忙的连接进门的 —— \u003Ca href=\"\u002Fblog\u002Fhow-to-connect-wallet-to-dapp\">如何安全地把钱包连接到 dApp\u003C\u002Fa> 里的那套流程能守住前门。\u003C\u002Fli>\n\u003Cli>\u003Cem>读不懂等于不可信。\u003C\u002Fem>拒绝一次签名，代价不过是重来一次；签错一次，代价可能是全部。这种不对称已经替你做好了决定。\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>WATS 处在什么位置\u003C\u002Fh2>\n\u003Cp>盲签是一个显示问题。解码与模拟能把请求呈现成可读的表述，但没有任何钱包 —— 包括 WATS —— 能替你判断这个请求是不是你真正想要的。钱包真正能决定的，是谁掌控着那把把决定变成权限的密钥。\u003Ca href=\"\u002Fhot-wallet\">WATS Hot Wallet\u003C\u002Fa> 是完全非托管的：密钥由你持有，WATS 从不持有任何密钥，在 Ethereum、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 或 TON 上，没有你批准的签名，任何转账都不会离开你的账户。这砍掉了一整类风险 —— 没人能代替你签名 —— 同时把上面那套阅读纪律，原封不动地留给你自己。\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"\u002Fnfc-card\">WATS NFC Metal Card\u003C\u002Fa> 站在同样诚实的位置。它不存储私钥，也不解码 calldata：它是一张点触验证设备，拥有唯一的卡片 ID，只与一台设备配对，用来对存放在 WATS 应用中的密钥进行验证。这增加了一个实体要素 —— 一件你握在手里的东西，而不只是屏幕上的内容 —— 但它无法把读不懂的请求变得可读。除了弹窗本身，没有任何东西能做到这一点。\u003C\u002Fp>\n\u003Cp>所以请把这两半分开来看。阅读的那一半是习惯：读不懂就绝不签名，凡是以裸十六进制形式送到眼前的，一律拒绝。托管的那一半是一次性的选择：把密钥放在非托管钱包里，让签名权留在它该在的地方。安装 \u003Ca href=\"\u002Fhot-wallet\">WATS Hot Wallet\u003C\u002Fa>，把每一个读不懂的弹窗都变成自动拒绝；如果你想要一个实体要素来验证你对 WATS 应用中那些密钥的访问，就把一张 \u003Ca href=\"\u002Fnfc-card\">WATS NFC Metal Card\u003C\u002Fa> 与你的设备配对。\u003C\u002Fp>",[10,13,16,19],{"q":11,"a":12},"盲签和 eth_sign 是一回事吗？","不是 —— eth_sign 只是盲签中最极端的一种。盲签指的是任何你读不懂自己在授权什么的批准：原始 calldata、不透明的类型化数据，或只显示哈希的硬件钱包屏幕。eth_sign 更进一步，它在原理上就无法验证，所以主流钱包已经弃用或移除了它。每一个 eth_sign 请求都是盲签，但普通的交易弹窗里同样充斥着盲签。",{"q":14,"a":15},"硬件钱包能保护我不受盲签之害吗？","只能部分保护。硬件钱包让私钥保持离线，并在恶意软件无法篡改的屏幕上显示请求 —— 但如果设备解不出某个合约调用，它可能就只显示一个哈希，而确认哈希并不能告诉你自己批准了什么。截至 2026 年，随着清晰签名的元数据标准逐步进入设备屏幕，这方面的保护正在改善。硬件隔离的是密钥；它本身并不负责解释交易。",{"q":17,"a":18},"非托管钱包能保护我不受盲签之害吗？","它保护的是密钥，不是决定。非托管意味着只有你能生成签名 —— WATS Hot Wallet 就是一个例子：密钥由你持有，WATS 从不持有任何密钥，在 Ethereum、Arbitrum、Optimism、Base、Polygon、BNB Chain、Solana 或 TON 上，没有你的批准就没有任何资产会动。这消除了别人代你签名的风险，但你自己批准的签名依然具有约束力，所以在批准之前读懂请求，仍然是你的责任。WATS NFC Metal Card 为存放在 WATS 应用中的密钥增加了一个点触验证的实体要素 —— 它不存储私钥，也不解码 calldata。",{"q":20,"a":21},"当钱包只显示原始十六进制时，我该怎么办？","拒绝它。一个你读不懂的签名请求，就是一个你无法评估的请求，而拒绝的代价不过是重来一次。然后再去查：这个 dApp 是不是真的，你的钱包在那条链上是否支持解码与模拟，以及这个操作是否真的需要那种方法。如果存在可读的路径 —— 一个已解码的弹窗或一份模拟预览 —— 就用它。如果一条都没有，就把这个请求当作不可信，直接走开。",1786059413018]