![]()
传统身份验证有个死循环:想证明你是你,得先交出能定位到你的信息。邮箱、手机号、密码——全塞进数据库,然后等泄露通知。
但加密货币钱包早就跑通了另一条路。服务器不存任何能追溯到真人的数据,用户照样能证明身份。这篇文章把这套机制拆给你看。
从助记词到密钥对:浏览器里发生的全部事情
用户拿到的不是账号密码,而是一串12个英文单词。这叫助记词(seed phrase),硬件钱包Ledger和Trezor用的同一套标准——BIP-39。
128位随机熵映射到2048个固定单词中的12个,每个单词约11位信息,整串助记词的安全强度约128位。用@scure/bip39库生成,零依赖、经过审计。
从这12个单词,浏览器本地派生出一对密钥。私钥用HMAC-SHA256处理助记词种子,加上应用专属的标签(比如"your-app-name-ed25519"),确保同一串助记词在不同应用生成不同密钥。Ed25519曲线算出32字节公钥。
公钥变成用户在服务器上的匿名身份标识,私钥和原始助记词永远不出浏览器。
![]()
注册时服务器只收到:一个随机生成的用户ID(如"a1b2c3d4")、公钥哈希、以及助记词中特定位置的单词哈希。
登录时的"零知识"挑战:服务器连完整哈希都没见过
登录不索要完整助记词。服务器随机挑3个位置,让用户提供对应单词。用户在浏览器里先把这3个单词哈希,再上传比对。
服务器数据库里存的是这样的结构:
用户名:随机字符串
公钥:8f7a9b2c1d3e4f5a...
助记词哈希:[位置1的哈希, 位置2的哈希, ...]
没有邮箱。没有密码。没有姓名。没有任何能关联到真实个人的信息。
这套机制的核心假设是:攻击者就算拖库,拿到的是一堆无法逆向的哈希和随机公钥。用户侧的损失止于"这12个单词别让人看见",而不是"我的手机号又在黑市流通了"。
![]()
为什么这套方案现在才有人认真写教程
技术栈其实成熟。BIP-39是2013年的标准,Ed25519是2011年发布的曲线,@noble/ed25519和@scure/bip39都是经过审计的纯JavaScript实现。
但产品化阻力不在技术。用户教育成本极高——12个单词丢了就是永久失联,没有"忘记密码"按钮。企业端更难接受:无法做用户画像、无法精准推送、无法配合监管调取实名信息。
加密货币钱包能跑通,是因为用户群体对"自己保管密钥"有预期,且监管框架对链上身份另有定义。普通互联网产品照搬这套,等于主动放弃大部分商业化手段。
作者提供的代码示例是概念验证级别,生产环境还需处理密钥备份、设备迁移、社交恢复等场景。
一个细节值得玩味:登录挑战的3个单词位置是随机选的,但用户每次输入的哈希值固定。这意味着如果某次登录被中间人截获哈希,理论上可重放。更严谨的实现应该加入时间戳或随机数做盐。
这套方案最诚实的定位,或许是"特定场景的备选"——比如临时账号、敏感内容发布、或任何用户宁愿丢失访问权也不愿暴露身份的场景。它不会取代微信扫码登录,但给了一群人一个真正的选项。
文章结尾没有总结升华,只有一行代码注释:"witch collapse practice feed shame open despair creek road again ice least"——这是示例用的12个单词,按BIP-39标准生成,对应一个真实可计算的密钥对。你可以把它当成一个开放式问题的起点:如果这就是你的全部数字身份,你会怎么保管它?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.