「把你的公钥发我,我们这边帮你验证一下钱包。」
这句话本身就是骗局。不是「可能是」,是百分百——因为全世界没有任何正规流程需要你手动提供公钥。这句话存在的唯一目的,是赌你不知道公钥是哪串东西,翻遍钱包之后,把你手里唯一那串长得像机密的助记词发过去。
链上被骗的案子看多了会发现一个规律:大部分受害者不是输在密码学上,是输在词汇上。钱包给你三串东西——助记词、公钥、地址——名字听起来像一回事,干的活天差地别。骗子从来不破解加密,他们只利用一件事:你可能把错误的字符串贴进错误的窗口。
这篇文章把三样东西一次讲透:各自是什么、泄露了各自损失什么、每种搞混对应哪种骗术。
一层压一层,只进不出
整条钱包的密码学链条是单向的:
助记词 → 私钥 → 公钥 → 钱包地址
助记词(BIP-39 标准,12 或 24 个英文单词)是总源头,钱包按 BIP-32 的层级推导规则从它推导出一个或多个私钥,每个私钥管一个地址。私钥经过椭圆曲线运算(secp256k1)生成公钥,这一步正向瞬间完成、反向在数学上不可行。公钥再被哈希压缩——以太坊上是 Keccak-256 取后 20 字节——变成你平时那串 0x 开头的收款地址。
四个层次,每往下一层就丢掉一次信息,所以任何一步都反推不回去。你没法从地址算出公钥,没法从公钥算出私钥,没法从任何下层恢复助记词。这个「不可逆」就是整个安全模型。
压缩成一张表,这篇文章的核心就是它:
| 字符串 | 能动钱吗 | 能给别人吗 | 泄露的代价 |
|---|---|---|---|
| 助记词 | 能,管全部账户 | 绝对不能 | 全部资产,永久 |
| 私钥 | 能,管一个地址 | 绝对不能 | 该地址资产,永久 |
| 公钥 | 不能 | 可以,设计如此 | 没有直接损失 |
| 地址 | 不能,只收钱 | 可以,设计如此 | 被盯上:画像、垃圾空投、投毒 |
表里每一行的边界上,都挂着一种专门利用这条边界的骗术。
助记词和私钥:能动钱的东西,没人有理由问你要
记住一句话就够:助记词和私钥是钱包里唯一能动钱的字符串,所以任何流程问你要它们,都必然是骗局。
不存在需要助记词的「钱包验证」,不存在需要助记词的「资产同步」,不存在需要助记词的「空投资格确认」,不存在需要私钥的「链上注册」。客服不会要,交易所不会要,项目方不会要,官方空投页面更不会要。助记词的一生只有两个去处:写在纸上离线保存,以及在钱包恢复时输入进你自己选定的钱包软件。出现在网页表单、客服聊天框、「安全验证」弹窗、私信里的每一个助记词,都是收割流程的第一步。
骗子的包装一直在换皮:验证所有权、连接主网、钱包升级、清退登记、遗产解锁。理由千变万化,动作只有一个:把钱包交给攻击者。贴出去之后往往几分钟内地址就被清空——因为那笔转账用的是你的真私钥、你的真签名,链上、交易所、浏览器都把它当成一笔正常交易,没有任何机制会拦。
如果你连助记词的「出身」都不对——用在线生成器造的、让 AI 帮忙选的词——那是同一个错误的另一个变种,处理方案看这篇:为什么助记词绝对不能在线生成。
公钥:你几乎碰不到的东西,却总出现在骗术里
公钥有个尴尬的现实:新用户怕「泄露」它,但你在日常操作里几乎根本碰不到它。而且在以太坊上它实际上不算秘密——你发过的每一笔交易的签名里,都携带了足以数学恢复公钥的信息,区块浏览器对任何发过交易的地址都能直接展示公钥。比特币的标准地址在首次花费前藏住公钥,花费后同样公开。
公钥的活儿是验证:你的钱包用私钥给交易签名,网络用公钥核对签名,确认发起人确实掌握匹配的私钥——全程私钥不露面。对你来说这是纯管道,看不见摸不着。
那为什么骗子爱提公钥?因为「提供公钥」这个请求卡在受害者的认知盲区上:听起来技术感够强,像一道正规流程;又不够熟悉,让你说不清自己钱包里哪串是它。攻击者根本不指望你找到公钥,他们指望你找不到——翻了一会儿没结果,把手里唯一那串长的、神秘的、像机密的东西发过去。那就是助记词。
识别方法很简单:钱包自己内部会推导公钥,智能合约在链上自己验证签名,没有任何面向普通用户的场景需要你手动交出公钥。出现这个请求,请求本身就是攻击。
地址:给人看的东西,不代表能信
地址是整条链路存在的最终目的:一个短的、可分享的、只能收钱的标识。发工资、领空投、自己钱包间转账,给别人地址天经地义。没人能从地址反推任何上层信息,也没人能拿地址签任何东西。给地址,安全。
信地址,不安全。攻击者的两类手法完全住在这个缝隙里:
剪贴板劫持。 地址公开意味着你要频繁复制粘贴,信息窃取类恶意软件专门盯这个动作:病毒驻留内存监控剪贴板,一旦检测到类似钱包地址的字符串就悄悄替换成攻击者的地址,你贴出去的时候肉眼看不出差别。中文圈安卓侧载渠道乱,这类病毒在非官方下载的 App 和打包软件里高发,细节看这篇:信息窃取恶意软件如何攻击加密用户。防御就一招:大额转账前先发小额测试,或者干脆用地址簿。
地址投毒。 地址公开还意味着它会留在你的转账记录里。攻击者批量生成开头结尾和你地址一样的仿冒地址,给你发 Dust 小额转账,让仿冒地址混进你的历史记录。几个月后你转一笔大的,顺手「从最近转账里」复制了地址——贴的是骗子那个。链完美执行了你的指令,错在你贴的瞬间。展开讲和防御习惯看这篇:地址投毒攻击详解。
垃圾代币是第三种:别人能往你地址塞你没要过的代币,这些代币的设计目的就是引你去「卖出」「领取」「兑换」,一点进去就是恶意授权。没要过的东西是鱼饵,不是天上掉的。
层与层之间:签名不是转账
还有一条边界被反复利用,它卡在「交出秘密」和「使用秘密」之间。
钱包签名时,私钥不离开设备——签名是一份证明,数学上无法从它反推出私钥。这是系统正常运转的方式。但签名的安全性完全取决于签的内容,只知道「不分享私钥」的人照样会被清空:
- 代币授权是签名。签了无限授权,等于把花费权外包出去——看无限授权的风险
- 签名弹窗看不懂内容时,你签的是一串哈希。硬件钱包显示乱码让你确认,就是盲签,盲签签出来的东西没人救得回
- 别人弹给你的签名请求,弹窗本身长得和正经请求一模一样——统一按签名骗局处理,直到你自己确认清楚
所以两条规则要同时握着:不交出钥匙,也不签看不懂的字。 骗子的剧本是分开打的:打谨慎的人,就给他看不懂的签名;打细心的人,就给他一个「验证表单」。两条都握死,剧本就演不下去。
自测四问
收到任何和钱包有关的请求,按顺序过一遍:
- 要地址吗? 可能正常——收款、空投资格、发工资都有可能。确认在正规页面再贴,没问题。
- 要公钥吗? 普通用户场景下基本等于骗局。没有正规流程需要你手动提供公钥。
- 要私钥或助记词吗? 骗局。零例外。理由再正当、再急、再权威都不改答案。
- 让你签名吗? 签名本身可以正常,问题变成三连:是你自己发起的吗?站点核实过吗?钱包里显示的是可读内容还是乱码哈希?有一个「否」,就当骗局处理。
这套过滤的可靠之处在于它不猜意图,只看字符串的功能。功能不变,话术就永远绕不过去。
已经贴错了怎么办
贴错的东西不同,抢救顺序不同:
- 交出了助记词或私钥:假定钱包正在被清空。立刻在可信设备上新建钱包(助记词务必本机生成),把残余资产转过去,旧钱包下所有地址永久作废。然后按这篇走:被盗后 24 小时该做什么。
- 签了不该签的东西:损失可能只是授权,还没被划走。第一时间用授权管理工具撤销(钱包清空者的防御方法里有安全使用指南),撤不掉就把高价值资产转到干净地址。
- 转错了地址:链上基本不可逆,但快速报案有机会在交易所那一跳冻结资金,流程看这篇:如何报案:IC3、交易所冻结请求全流程。
三种情况都会有第二波:假「追回服务」盯上刚报案的受害者,主动联系你、承诺帮你追币、收前期费用。所有主动找上门的,演的都是这一出。
最后
去掉密码学,这篇文章就三个名词。助记词和私钥是钱本身。公钥是零件。地址是信箱上的投递口。
骗术不高级,它们在试镜——试的是你的困惑。「验证钱包」试的是说不出公钥是哪串的人,「确认交易」试的是不读内容就点确认的人,「用历史记录里的地址」试的是忘了「公开」不等于「可信」的人。三个试镜全都失败的条件,是你能说清哪串是哪串。
这个知识十分钟学完,零成本,永不过期。比它便宜的保险,链上不存在。
常见问题
公钥可以给别人吗?
公钥本身设计上就是公开的。在以太坊上,只要你发过一笔交易,公钥就能从签名里数学反推出来,区块浏览器上直接可见——所以「泄露公钥」本身不构成风险。真正的风险是分不清哪串是公钥。骗子让你「提供公钥验证钱包」,赌的就是你不知道公钥长什么样,翻遍钱包后把手里唯一那串长得像机密的东西——助记词——发过去。日常使用中不会有任何正规服务需要你手动提供公钥,出现这个要求本身就是骗局的信号。
别人知道我的钱包地址会不会有风险?
地址只是收款标识,从地址反推不出私钥,也没人能拿地址签任何东西,正常给别人收款完全没问题。风险不在「知道」,在「利用」:别人可以用地址查你的持仓,挑有钱的下手;可以给你空投垃圾代币,引你去交互恶意合约;可以做地址投毒——生成开头结尾和你地址一样的仿冒地址,给你发小额转账埋进你的记录,等你哪天从历史记录里复制地址转账时贴错。地址可以给,但转账时的地址必须从自己的地址簿取,不要从聊天记录或转账历史里复制。
助记词和私钥有什么区别?
助记词是总钥匙:12 或 24 个单词,钱包用它确定性地推导出你名下所有私钥,管全部账户。私钥只管一个地址。泄露任何一个都是全部失守,所以两者是同一个安全级别,区别只是管辖范围,不是敏感度。换句话说:助记词泄露等于整个钱包易主,单个私钥泄露等于那个地址易主,都是不可逆的。
签名会把我的私钥发给网站吗?
不会。签名在你的设备内完成,产出的是一份证明,数学上无法从签名反推出私钥,这是安全的那一面。但这个认知会被反向利用:很多人知道「签名安全」就对签什么都无所谓。签名的内容可以是代币授权、permit2 消息,在 eth_sign 场景下甚至是一笔完整交易,签名一落,对方拿去广播即可。签名的安全性完全取决于签的是什么:自己发起的、看得懂内容的才签;看不懂哈希串的盲签、别人弹出来的请求,一律当签名钓鱼处理。