Havenlon|安全讲人话(四):钥匙很安全,不代表门不会被错误打开
密钥没丢不代表执行就安全。先讲一件真事它比任何比喻都有说服力。2025 年 2 月 21 日加密史上最大的一次盗窃发生了Bybit 的以太坊冷钱包被转走约40 万枚 ETH价值约 15 亿美元。事后 NCC Group、Certora、Fireblocks 等多家安全机构的复盘都指向同一个结论——私钥一把都没丢。多签流程一步都没少。Bybit 用的是业界最主流的 Safe 多签冷钱包签名用的是 Ledger 硬件钱包。攻击者后被归因为朝鲜的 Lazarus 组织没有去偷私钥而是攻破了 Safe{Wallet} 前端的一台开发者机器往界面里注入了一段恶意 JavaScript。于是签名的人在屏幕上看到的是一笔再正常不过的转账而他们的硬件钱包里真正被签下去的是一个把钱包逻辑替换掉的delegatecall恶意载荷。每一个签名人都握着安全的钥匙。每一个签名人都完成了确认。然后 15 亿美元没了。如果你问一个普通人一扇门为什么会被错误打开答案通常是钥匙丢了、密码泄露了、门卡被复制了、有人冒充身份。这些都对过去很多年我们也一直把安全的重心放在这里——保护钥匙。数字世界也一样私钥要保密助记词不能丢硬件钱包不能离身多签不能让一个人独控。这些原则全都极其重要。但 Bybit 把一个越来越尖锐的问题摆到了所有人面前如果钥匙一直都很安全门还是被错误打开了呢一、钥匙证明的是你是谁不是这件事对不对一把钥匙最大的作用是什么它证明你有资格开这扇门。密码、私钥、硬件钱包、多重签名、证书体系……本质上解决的都是同一个问题是不是你。所以今天绝大多数安全产品都围绕身份展开身份认证、密码管理、双因素MFA、硬件钱包、多签、PKI 证书。它们负责回答一个问题——这个人或这个程序有没有资格发起这个动作但它们很少回答另一个问题——这个动作本身是不是应该发生这不是同一个问题。用密码学的语言说一个签名的有效性validity和被签内容的正确性correctness是两个完全独立的维度。密码学只保证这个签名确实是这把私钥签的它从不保证被签的这笔数据是签名人真正想要的那笔。Bybit 的签名在密码学上百分之百有效。问题出在第二个维度被签的内容不是签名人以为的那个内容。二、钥匙没丢事故照样发生先回到生活里。晚上回家你拿出钥匙——钥匙是真的门也是自己家的门。但如果有人在门口冲你喊快开门里面着火了你很可能会毫不犹豫地把门打开。问题不是钥匙失效了。问题是你被诱导去打开了一扇本来不该在这一刻、以这种方式打开的门。数字世界越来越像这样。私钥可能一直安安稳稳待在硬件钱包里密码从未泄露多签流程一步不落每个人都完成了确认——最后资产还是被转走了。不是因为钥匙坏了而是因为钥匙被用来完成了一个错误的动作。这类攻击有一个专门的名字叫盲签Blind Signing当钱包无法清晰地告诉你这次签名到底授权了什么时你其实是在对一段看不懂的字节流盖章。Bybit、Radiant Capital约 5000 万美元、Drift Protocol这几起损失惨重的事故背后是同一个形状——用户在一个友好的网页 UI 上点了确认而真正被签下去的载荷授权的是另一件事。盲签之所以致命是因为它把攻击成本压得极低一个人类读不懂的签名请求人类就无法审计而社会工程永远比破解密码学便宜得多。三、看一眼人看到的和机器签下的到底差在哪抽象的话讲多了没用我们把执行链路摊开看。一次典型的多签转账人和机器看到的是两份东西。签名人在 UI 上看到的人类可读的意图向合作方冷钱包转账 金额30,000 ETH 接收地址0xAbC...我们的托管地址 操作类型普通转账而真正进入硬件钱包、被私钥签名的原始载荷机器执行的事实简化后长这样{ to: 0xBadC0ntract..., // 不是 UI 上那个地址 value: 0, operation: 1, // ← 关键1 delegatecall不是 0 call data: 0x...(替换钱包实现逻辑的字节码)... }差别就藏在operation这一个字段上。operation: 0是普通调用calloperation: 1是delegatecall——它会用外部合约的代码去改写钱包自己的存储和逻辑。UI 显示的是转 30000 ETH签下去的却是把整个钱包的控制权交出去。签名人看到的是 A硬件钱包签下的是 B。这在安全工程里有一个精确的名字TOCTOUTime-of-Check to Time-of-Use检查时刻与使用时刻之间的裂缝。你检查看 UI的那一刻是 A你使用签名执行的那一刻是 B攻击就住在这条缝里。而更本质的问题是所谓的所见 ≠ 所签What You See Is NOT What You Sign人以为自己签的是屏幕上那句话其实签的是底层那串他根本没看见、也看不懂的参数。四、硬件钱包保护的是密钥不一定保护执行看到这里有人会问那硬件钱包是不是没用了当然不是。硬件钱包解决的是一个极其重要的问题让私钥尽量不离开可信环境。这是整个数字资产行业的重大进步——没有硬件钱包很多攻击会容易得多没有密码学整个数字经济根本不存在。这篇文章不是要否定它们恰恰相反它们把钥匙安全这件事做得越来越好了。但问题在于它们保护的边界止步于密钥本身。技术上说硬件钱包尤其是早期固件常常只能显示一个交易的哈希摘要digest而没法把完整的结构化数据渲染成人能看懂的样子。这就把用户又打回了eth_sign那种对一串哈希盲签的威胁模型里。以太坊社区其实早就意识到了并推出了EIP-712结构化数据签名标准让钱包可以把你要签的到底是什么以类型化、可读的方式展示出来。但 EIP-712 也不是万能药一旦硬件设备渲染不了完整的 typed data它就只显示摘要用户依然在盲签而且面对嵌套结构复杂的订单人也未必真能读懂关键字段。正因如此2026 年 5 月以太坊基金会联合多家钱包厂商推出了Clear Signing清晰签名ERC-7730标准核心思路就是把原始字节码翻译成一个统一的、人能真正读懂的交易说明模板让确认页面变得可审计。方向是对的。但请注意Clear Signing 补的仍然是签名环节的看得懂问题——它让人更可能发现异常。它并不改变一个更底层的事实保护钥匙和保护执行是两个不同的安全问题。硬件钱包显示确认签名而用户并不知道真正签的是哪个合约、调了哪个方法、会产生什么后果——他保护住了钥匙却未必保护住了最终执行。五、多签也不是执行安全的全部答案很多企业依赖多签因为它降低了单点风险一个人说了不算两个、三个甚至更多人共同确认。这是非常成熟的治理方式。但多签回答的问题本质上仍然是——有多少人同意。它回答不了另一个问题——大家同意的是不是同一件事。Bybit 就是最惨痛的注脚。多个授权签名人、各自拿着硬件钱包、独立完成签名——多签机制本身一步都没坏。但因为所有人看到的都是被篡改过的、误导性的 UI所有人确认的都是同一份错误摘要于是三个人签、五个人签、十个人签最后只是一起、合规地、完整地完成了一个错误动作。这就是多签的盲区共同确认不等于共同理解。签名人数增加了密码学意义上的安全增强了但如果每个人签的都是同一份被污染的内容执行安全一点也没有增加——你只是让同一个错误拿到了更多个合法签名。六、真正危险的不是密钥泄露而是意图偏离过去的安全事故几乎都围绕一个词泄露——密码泄露、密钥泄露、证书泄露、Token 泄露。所以企业拼命保护秘密。AI 时代另一个词会越来越重要偏离。最初想做的是 A最后执行的是 B审批看到的是 A系统执行的是 B用户理解的是 AAI 调用的是 B日志记录的是 B而所有人都以为自己完成的是 A。在偏离发生的时候可能没有任何密钥泄露、没有任何密码被偷、没有任何硬件被破解——危险却照样发生了。因为执行偏离了最初真实的意图。Bybit 是偏离的极端形态签名人的意图转一笔普通的钱和最终执行交出钱包控制权之间出现了一道被恶意撑开的裂缝。而 AI Agent 会让这种偏离变得更隐蔽——因为人越来越多地不是在确认原始数据而是在确认AI 给出的摘要、系统给出的解释、一个建议继续的友好提示。喂给 AI 的上下文一旦被污染摘要就会失真而下游那条合规的签名流程会忠实地帮这个偏离走完全程。七、执行安全关注的是钥匙之后我们可以把整条链路画出来看清各种安全手段各自守在哪里发起 身份/授权 审批/多签 [ 执行边界 ] 现实世界 │ │ │ │ │ 用户/AI ──▶ 密码·私钥·MFA ──▶ 流程·签名·治理 ──▶ ✦ 门闩 ✦ ──▶ 转账/导出/重启 │ │ │ │ │ 我想做 确认是你 大家同意 这个动作 不可逆的 真的该发生吗 事实 └──────────── 钥匙之前 ────────────┘ └──── 钥匙之后 ────┘密钥安全、身份安全、权限安全、审批安全它们共同守的大多是钥匙之前——证明你有资格、证明流程走完了。执行安全守的是钥匙之后它问的是另一组问题钥匙开的到底是哪扇门这个动作为什么发生执行对象还是不是原来那个对象金额还是原来那个金额参数有没有被换上下文有没有变AI 有没有误解用户真正想做的事这些问题已经不是钥匙本身能回答的了。所以结论很清楚保护钥匙和保护执行应该是两个独立的问题而不是互相替代。Bybit 之后越来越多的托管和安全厂商Fireblocks、Cobo、Certora 等在复盘里给出的方向也高度一致多签和硬件不够必须在链下签名进入链上执行之前加一层独立的、能读懂并校验交易语义的防线。这正是 Havenlon 说的执行边界。八、AI 时代我们不能只保护钥匙未来几年企业还会继续加码保护身份更强的密码策略、更细的权限、更硬的 MFA、更好的硬件钱包、更多的签名人。这些都会持续发展也都应该发展。但与此同时还有一件同样重要、却长期被忽略的事——保护动作本身。因为真正进入现实世界的从来不是密钥而是动作资产真正离开账户的不是私钥而是一次转账服务器真正停机的不是管理员账号而是一次重启客户数据真正外泄的不是权限而是一次导出机器人真正动起来的不是 API Key而是一条执行命令。AI 真正开始改变世界也不是因为它拿到了钥匙而是因为它开始拥有——让真实动作发生的能力。当能发起真实动作的主体越来越多、越来越快、越来越自动只在钥匙这一侧加固就像给一栋楼装了越来越精密的门锁却始终没给最危险的那扇门装上门闩。九、钥匙很安全不代表门不会被错误打开所以这篇文章真正想讲的不是钱包不是多签更不是密码学。它想讲的是一句被 15 亿美元验证过的话钥匙安全和执行安全是两个不同的问题。保护钥匙减少的是别人冒充你保护执行减少的是你自己或你授权的 AI完成了一个错误动作。前者解决是不是你后者解决是不是这件事。过去很长时间我们把绝大部分精力放在第一件事上。AI 时代第二件事会变得越来越重要——因为未来很多风险不再来自别人拿走你的钥匙而是来自你拿着自己那把绝对安全的钥匙亲手打开了一扇本来不该打开的门。这也是为什么企业未来不仅需要越来越安全的钥匙还需要一套能守住最后那个动作的执行边界——一道在签名之后、在动作变成不可逆现实之前还能独立说不的门闩。Bybit 的签名人都拥有安全的钥匙。他们缺的只是那一道门闩。这是《Havenlon安全讲人话》系列的第四篇。下一篇我们把镜头转向 AI 本身为什么说AI 不是一只更聪明的鼠标而是开始替你按按钮的人——当风险从它会说什么变成它会做什么安全的重心必须整个搬家。参考来源本文引用的真实事件与技术标准In-Depth Technical Analysis of the Bybit Hack — NCC GroupThe Bybit Hack and What It Teaches Us About Multisig Wallet Security — CertoraThe Flaw in Secure Systems: How Bybits Attack Exploited Blind Trust — FireblocksHow to Prevent the Next $1.5B Bybit Hack: Solving Blind Signing — BlockaidClear Signing Solved? — CyfrinThe End of Blind Signing: ERC-7730, ERC-8213, and Clear Signing — DEV Community