链只验证授权是否有效,不理解你的真实意图。“我没点转账”不能推翻一份有效授权。
Ethereum / User security / Lesson 20.03
你没有把钱转走,资产为什么还是会消失?
因为“控制资产”不只有转账这一条路。泄露私钥会交出身份控制权, 钓鱼界面会歪曲你正在批准什么,授权会把未来转移权交给第三方, 而交易排序会改变你最终成交的价格。
安全不是一个开关,而是一组边界。
断开网站不等于撤销链上权限。Allowance、operator 与 Permit 各有自己的有效边界。
报价只是某一时刻的状态快照。价格冲击、滑点容忍和 MEV 是三个不同概念。
01 / THREAT MODEL
先问“哪一层失守”,再问“用了什么钱包”
同一个损失结果,可能来自四条完全不同的控制路径
以太坊不会替你判断页面是否诚实、授权是否合算、成交是否公平。它只按协议规则验证签名、 执行代码并确定状态。因此,用户安全的第一步不是记住某个“防骗技巧”,而是建立可复用的威胁模型。
密钥层
攻击者能否直接产生你的有效签名?私钥、助记词、恶意签名器、被控设备都在这一层。
失守后果:可模拟“你”发起任何 EOA 能发起的操作。界面层
钱包显示、域名、二维码、剪贴板或前端是否把真实调用解释成了另一件事?
失守后果:你亲手签署了与意图不一致的数据。权限层
Allowance、NFT operator、Permit、会话密钥或代理逻辑允许谁在什么范围内行动?
失守后果:攻击者无需再次弹出你的钱包。排序层
待处理交易被谁看见、放在谁前面或后面?同一笔交易在不同状态下会得到不同结果。
失守后果:交易仍按你签的参数执行,却以更差结果成交。LAB 01 / AUTHORIZATION SURFACE
这件事究竟碰到了哪一层?
选择一种事件,观察它改变的控制权、持续时间和第一响应。
第一响应:查看网站请求了哪些后续操作。连接会暴露地址和允许请求弹窗,但本身不是转账或代币授权。
静态阅读结论:只连接不会自动授予代币转移权;助记词泄露影响整个派生账户树; 错误授权持续到额度耗尽、被撤销或协议定义的终点;夹击影响成交,不等于私钥泄露。
02 / KEYS & ACCOUNTS
钱包不是账户,助记词也不在链上
把恢复材料、签名密钥、地址和界面拆开,安全判断才不会混乱
对普通外部账户(EOA)而言,资产并不“装在钱包 App 里”。链上状态把余额与一个地址关联, 网络用数字签名判断某项操作是否由该地址的控制者授权。[1]
四个对象,四种边界
- 助记词 / 恢复短语
- 便于人备份的恢复材料,通常能确定性派生多个私钥。泄露一组助记词,不只是泄露当前屏幕上的一个地址。
- 私钥
- 为某个账户生成有效签名的秘密数值。知道它的人,无需你的手机、密码或指纹即可在别处重建控制权。
- 地址 / 账户
- 链上状态的公开索引。EOA 由私钥控制;合约账户由代码规则控制,可能要求多签、限额或其他验证逻辑。
- 钱包
- 管理密钥、读取链上状态、构造请求并展示签名内容的工具。换钱包软件不会自动换账户;导入同一恢复材料仍是同一控制根。
私钥和助记词不应该输入网页、表单、客服对话或“同步验证”窗口。合法应用只需要你在钱包中批准请求, 不需要读取恢复短语。钱包与账户的基础关系可参照 Ethereum.org 的 钱包说明与 安全指南。[2]
03 / WHAT ARE YOU SIGNING?
“弹出了钱包”不是一种操作
连接、交易、普通消息、结构化消息、Approve 和 Permit 的后果完全不同
每次确认前都先回答五个问题:在哪条链、给谁、调用什么、范围多大、何时失效。 如果钱包无法把这些字段清楚显示出来,就把“不理解”视为风险信号,而不是流程障碍。
| 动作 | 立即上链 / 付 gas | 直接效果 | 真正要核对 |
|---|---|---|---|
| 连接账户 | 否 | 向站点暴露所选地址,并允许它继续提出请求 | 域名、所选地址;它不是代币授权 |
| 发送交易 | 是 | 执行 to / value / data 指定的链上调用 |
链、接收方、ETH 数量、方法、参数、模拟变化 |
| 普通消息签名 | 签名时否 | 产生可验证证明;服务或合约可能据此执行后续动作 | 原文、域、用途、nonce、过期时间;避免不透明哈希 |
| EIP-712 结构化签名 | 签名时否 | 对带类型字段与域分隔的数据签名 | chainId、verifyingContract、主体、金额、deadline |
ERC-20 approve |
是 | 设置某代币合约内 owner → spender 的可用额度 | 代币合约、spender、金额;不是“给网站连接权限” |
ERC-2612 permit |
签名时否 | 签署一个可由别人提交的 ERC-20 allowance 变更 | owner、spender、value、nonce、deadline 与验证合约 |
“不花 gas”只说明签名动作本身没有广播交易,不代表签名没有经济权力。EIP-712 改善了结构化展示与域绑定,但不会判断接收方是否值得信任。[8]
04 / PHISHING
钓鱼不是一张假网页,而是一条授权流水线
诱饵负责让你开始,界面负责让你误解,签名负责把误解变成可执行权力
最常见的六个误解
相似字符、子域名和广告位都能制造熟悉感。书签或项目公开渠道比肉眼猜域名可靠。
Permit 与其他离链授权在签名时不付 gas,提交者可以稍后替你广播。
硬件设备保护密钥不被复制,却仍会签署你明确确认的恶意内容。
断开只移除站点与钱包会话;链上的 allowance 和 operator 不会因此改变。
模拟依赖当时状态、解码能力与调用路径;升级、延迟提交或条件分支都可能改变结果。
setApprovalForAll 通常覆盖该合约中 owner 的全部 NFT,而不是当前页面展示的一件。
LAB 02 / SCENARIO DIAGNOSIS
读提示,不读按钮文案
按钮可以写“登录”,真正的权力在签名字段里。
钱包显示 Permit:spender 为陌生地址,value 为最大整数,deadline 在一年后;页面按钮写着“Claim”。
- 真实动作
- 签署可被提交的 ERC-20 无限额度授权
- 关键证据
- spender、value、deadline 与页面叙述不匹配
- 正确处理
- 拒绝签名,关闭页面,从项目官方渠道重新核对域名
静态判断法:先忽略“Claim / Verify / Login”等前端文案,只读钱包中的方法、接收方、金额、 NFT operator、nonce 与截止时间;任何无法解释的字段都足以暂停。
05 / ALLOWANCE & OPERATORS
Approve 不搬钱,它铺了一条以后可以搬钱的路
所有权没变,不等于控制面没变
ERC-20 的 approve(spender, value) 写入额度;之后 spender 可通过
transferFrom(owner, recipient, amount) 在额度与余额允许的范围内转移代币。
这就是“没有再次点转账,资产仍然消失”的典型机制。[4]
ERC-20、ERC-721 与 ERC-1155 的授权半径
LAB 03 / BLAST RADIUS
有限额度与无限额度,爆炸半径差多少?
模型只计算当前单一 ERC-20 余额可被触达的上限。
有限额度把当前单一代币的最大可触达量限制在 250 token;完成后仍应检查剩余额度。
简化边界:模型不代表实际损失承诺,不计恶意代币的非标准行为、多个 token 合约、 NFT operator、代币价格变化或 spender 自身的权限控制。
06 / MEV
你签的是交易,别人竞争的是它的位置
最大可提取价值来自包含、排除或重排交易的能力
MEV(Maximal Extractable Value,最大可提取价值)是区块生产者在标准区块奖励和 gas 之外, 通过选择交易是否进入区块以及如何排序所能提取的价值;更广义地,搜索者、构建者与提议者共同参与这条供应链。 [3]
套利
在不同市场间纠正价差。它可能改善价格一致性,但竞争会消耗区块空间并产生外部性。
清算
偿还低抵押头寸的债务并获得激励。它帮助借贷协议维持偿付能力,也会引发排序竞争。
夹子交易(夹击)
攻击者先做与用户同方向的交易挤动池价,用户以更差价格成交,再做反方向交易;价值直接来自用户允许的执行空间。
“公开 mempool”是常见路径,不是所有交易的唯一传播方式。私有提交、受保护 RPC 或意图系统可能减少公开暴露, 但会引入对中继、构建者、执行承诺和失败处理的新信任假设。Flashbots Protect 明确提醒: 把交易发送给 builder,就在信任其不抢跑也不泄露;fast 模式还会把交易发给全部注册 builder。 在钱包确认前切换 RPC,也可能触发向公共 mempool 重发。私有提交不是绝对隐私或必然入块。 [13]
07 / EXECUTION QUALITY
价格冲击、滑点和 MEV,不是三个同义词
先分清机制,才能选择正确的保护参数
价格冲击
你的交易沿 AMM 曲线消耗流动性,自身就会改变边际价格。交易越大、池越浅,冲击通常越大。
滑点容忍
你给交易设置的执行边界,例如最低接收量。它是许可上限,不是系统承诺“只会损失这么多”。
排序提取
第三方利用可见意图和排序权改变你的前置状态。夹击可把成交推向你允许的最低边界。
含手续费的精确输入输出: amountOut = y · (amountIn · 0.997) / (x + amountIn · 0.997)
LAB 04 / SANDWICH SIMULATION
在恒定乘积池里,看见夹击怎样吃掉执行空间
固定初始池:1,000 ETH / 2,000,000 USDC;手续费 0.30%。
该夹击后的输出仍高于最低接收量,因此在这个简化模型中用户交易会成交。
重要简化:这里只模拟单池、单区块、确定顺序、恒定乘积公式和固定 0.30% 手续费; 不寻找攻击者最优规模,不计集中流动性、其他交易、gas、优先费、构建者付款、竞争、价格预言机、 代币税或私有订单流。结果用于理解机制,不能用于交易决策。
保护不是把滑点调到零
过宽的滑点给夹击留下空间;过窄则可能因正常价格移动或抢跑而频繁回滚并浪费 gas。 更稳健的做法是减小单笔规模、选择更深流动性、检查价格冲击、设置合理的最低接收量, 并在理解信任边界后使用具备 MEV 保护的提交路径。任何“绝不被夹”的承诺都需要审查其执行与失败条件。
08 / INCIDENT RESPONSE
先识别事件,再争分夺秒
撤销授权修不好泄露的私钥,换钱包 App 也修不好链上的 operator
事件发生后最危险的动作,是用一个熟悉的按钮处理所有问题。先记录哪种材料被泄露、哪种操作已签、 是否已上链、影响哪些合约与地址,再选择响应路径。
| 观察到的事件 | 先假设什么 | 优先动作 | 不要误以为 |
|---|---|---|---|
| 只连接可疑站点,未签名也未发交易 | 站点看到了公开地址并能继续提出请求,但通常尚无链上花费权 | 断开站点或 WalletConnect 会话;检查是否有待处理请求;停止继续交互 | 仅凭连接就已经把私钥或全部代币交给站点 |
| 助记词 / 私钥已泄露 | 相关派生账户的签名根已失守 | 在干净设备上生成全新恢复材料;把剩余资产转到新地址;逐链核查 | 改钱包密码、断开网站或撤销单个授权能恢复旧地址安全 |
| 恶意转账已确认 | 状态变化通常不可逆 | 保存交易哈希与页面证据;保护其他账户;向相关平台和执法/合规渠道报告 | “取消交易”能撤销已最终确认的转账 |
| 恶意 ERC-20 allowance 已建立 | spender 可能随时调用 transferFrom |
用可信界面或直接合约调用将额度设为 0;有竞速风险时优先转移高价值资产 | Disconnect 会改变 allowance |
| 恶意 NFT operator 已建立 | 该集合中全部资产可能可转移 | 调用 setApprovalForAll(operator, false);检查同地址其他集合 |
只需撤销页面上显示的那一枚 NFT |
| Permit 已签但未见上链 | 签名可能在 deadline 前仍可被提交 | 核对 nonce / deadline 与具体实现;使用协议支持的失效机制;无法确认时优先迁移相关代币 | 普通 approve(0) 必然使尚未提交的 Permit 失效 |
| 怀疑设备或剪贴板被控 | 后续显示与地址输入都不可信 | 停止签名;在干净设备生成新控制根;通过独立渠道核对收款地址 | 卸载一个插件就足以证明环境已干净 |
| 一次交换疑似被夹击 | 执行质量问题,不自动等于密钥失守 | 比较前后交易与最低接收量;缩小规模、收紧合理滑点、评估保护提交路径 | 轮换助记词能阻止排序攻击 |
09 / OPERATING MODEL
把资产分层,比“每次都小心”更可靠
三钱包模型用结构限制单次错误的爆炸半径
保存,不探索
- 长期资产与重要身份
- 硬件隔离或多签;尽量不连接陌生前端
- 只向自己的操作钱包补充预算
- 不做无限授权,不领取未知空投
交易,有预算
- 只保留近期需要的资金
- 与已核验协议交互
- 有限授权、定期核对 allowance / operator
- 独立记录常用合约与官方入口
试验,可放弃
- 探索新站点、测试签名流程
- 不存放重要资产或身份凭证
- 只从操作钱包获得小额预算
- 出现异常即可停用,不回流未知代币
三个地址如果都由同一份已经泄露的助记词派生,隔离就只剩表面。因此,金库与日常/沙盒至少应有独立的控制根; 备份位置也要分离。分层不能让恶意签名变安全,但能让一次界面判断错误不至于触达全部资产。
10 / RECAP
把安全从直觉,变成检查顺序
先判断控制面,再读取字段,最后限制持续时间和资产半径
- 01
助记词是恢复一组密钥的根;钱包是工具,地址是链上索引。换 App 不等于换控制权。
- 02
连接、交易和签名不是同一种动作。“无 gas”不代表“无权限”。
- 03
ERC-20 allowance 允许 spender 以后主动转移;NFT operator 往往覆盖整个集合。
- 04
Permit 用离链签名建立 allowance;nonce 防重放,deadline 限时,但都不替你判断 spender。
- 05
价格冲击来自自己的交易,滑点是允许边界,MEV 来自可见意图与排序。
- 06
事件响应必须对症:密钥泄露要换控制根,错误授权要撤销权限,夹击要改善执行路径。
KNOWLEDGE CHECK / 6 QUESTIONS
六题自检
每题选择最准确的一项。答案解析也可在无脚本环境中展开。
选择一项查看解析。
查看答案
答案 B。连接不是链上授权,但站点可以继续请求交易或签名。
选择一项查看解析。
查看答案
答案 C。应在干净环境建立全新控制根并迁移剩余资产。
选择一项查看解析。
查看答案
答案 A。approve 先建立路径,spender 可稍后调用 transferFrom。
选择一项查看解析。
查看答案
答案 B。无 gas 签名仍可能携带可执行的经济权限。
选择一项查看解析。
查看答案
答案 C。把三个机制分开,才能调整交易规模、边界和提交路径。
选择一项查看解析。
查看答案
答案 A。需要把剩余资产迁移到由全新恢复材料控制的地址。
11 / GLOSSARY & PRIMARY SOURCES
术语不是装饰,它们决定响应动作
- EOA
- Externally Owned Account,由私钥签名控制的外部账户。
- 助记词
- 用于恢复确定性钱包密钥树的人类可备份材料;不是网站登录密码。
- Spender
- 在代币授权中,被 owner 允许调用转移能力的地址。
- Allowance
- ERC-20 中 owner 授予 spender 的剩余可转移数量。
- Operator
- ERC-721 / ERC-1155 中可代表 owner 操作某合约内全部资产的地址。
- Permit
- 用签名设置 allowance 的模式;ERC-2612 是 ERC-20 的标准化版本。
- Nonce
- 一次性序号,用于阻止同一授权被重复执行;不同协议的 nonce 规则不同。
- Deadline
- 签名或交易参数允许执行的最后时间;长时限会扩大泄露后的机会窗口。
- Mempool
- 节点持有的待处理交易集合;不存在一个全网完全一致的单一池。
- MEV
- 通过包含、排除或排序交易,在标准区块奖励与费用之外可提取的价值。
- 价格冲击
- 交易本身消耗流动性并沿定价曲线改变边际价格造成的执行差异。
- 滑点容忍
- 用户允许报价与最终执行之间偏离的边界,常编码为最低接收量或最高支付量。
一手资料
本课只列协议规范、Ethereum.org 与 Flashbots 官方技术文档。标准描述接口,不为任何具体网站、 合约实现或钱包界面的安全性背书。
- Ethereum.org — Ethereum accountsEOA、合约账户与账户字段。
- Ethereum.org — Ethereum wallets钱包作为账户交互工具的基础说明。
- Ethereum.org — Maximal extractable value (MEV)MEV、套利、清算与 sandwich trading。
- EIP-20 — Token Standard
approve、allowance与transferFrom。 - EIP-721 — Non-Fungible Token Standard单件 approval 与 operator approval。
- EIP-1155 — Multi Token Standard
setApprovalForAll的多代币授权语义。 - EIP-191 — Signed Data Standard带前缀签名数据的基本格式。
- EIP-712 — Typed structured data hashing and signing类型化数据与域分隔;规范本身不提供重放保护。
- EIP-2612 — Permit Extension for EIP-20 Signed ApprovalsPermit 字段、nonce 与 deadline。
- EIP-1271 — Standard Signature Validation Method for Contracts合约账户验证签名的标准接口。
- Ethereum.org — Transactions交易字段、签名与状态改变。
- Ethereum.org — Ethereum security and scam prevention助记词、钓鱼与常见骗局防护。
- Flashbots Docs — Protect Quick Startbuilder 信任、fast 模式与切换 RPC 的公开重发风险。
- Flashbots Docs — Protect Overview受保护交易提交的目标与边界。
- EIP-1559 — Fee market change费用字段与区块 gas 目标;gas 竞价不等同于完整排序规则。
- EIP-7702 — Set EOA account code现代 EOA 委托代码能力带来的新增授权表面。
- Ethereum Foundation — Clear Signing announcement以 ERC-7730 描述交易、减少盲签的 2026 协作计划。
- ERC-7730 — Structured Data Clear Signing Format供钱包呈现可验证人类语义的描述格式。
- Ethereum.org — Scam help and reporting资产保护、授权撤销、证据保存与恢复骗局提醒。