使用在线助记词生成器安全吗?
目录
这个问题在加密社区中不断出现:使用在线工具生成助记词安全吗?简短回答是,这完全取决于该工具的构建方式。设计不良的在线生成器可以在您为钱包充值之前就将您的密钥暴露给攻击者。而设计良好的在线生成器可以与离线工具一样安全。区别在于架构,理解该架构是加密货币持有者的责任。
本指南详细分析什么使在线助记词生成器安全或危险,如何验证给定工具属于哪个类别,以及您应该对任何接触密码密钥的工具要求什么技术标准。
在线生成器的风险¶
当您生成 BIP39 助记词时,您正在创建控制钱包中所有资金的主密钥。如果其他人获得该短语,他们可以清扫从中派生的每个地址的所有代币。这不是理论风险。数十亿美元已通过密钥生成遭到入侵而被盗。
任何在线生成器的根本风险在于传输。如果工具将您的助记词、私钥,甚至用于创建它们的原始熵发送到远程服务器,那么您的密钥副本存在于您的控制之外。该服务器可能被黑客攻击。运营商可能是恶意的。中间人可能拦截数据。网络日志可能记录它。
这种危险也延伸到每次访问时从外部服务器加载代码的工具。即使生成器昨天是安全的,被入侵的 CDN 或恶意更新今天就可能注入窃取密钥的代码。没有可验证、可审计的代码,您无法知道在您生成短语的那一刻浏览器中实际运行的是什么。
客户端 vs 服务器端:关键区别¶
评估任何在线助记词生成器最重要的因素是它在客户端还是服务器端运行。
服务器端生成器在远程服务器上创建您的助记词并将其发送到您的浏览器。您的密钥在传输中经过互联网,存在于服务器内存中,可能被记录。即使有 HTTPS 加密,服务器运营商也可以访问每个生成的密钥。这种模式从根本上与安全不兼容,您永远不应该在任何情况下使用服务器端助记词生成器。
客户端生成器在您的浏览器中运行所有密码学操作。熵在本地生成,助记词在本地派生,生成的密钥永远不离开您的设备。网站提供代码,但一旦代码加载,它独立于服务器运行。如果您在加载页面后断开互联网,真正的客户端生成器仍能完美工作。
然而,"客户端"是一个需要验证的声明。许多工具声称是客户端的,但仍在发出网络请求、加载外部脚本或包含可能捕获屏幕数据的分析跟踪器。下一节解释如何自行确认这些声明。
如何验证生成器是客户端的¶
验证工具是否真正在客户端运行需要几个简单的检查,任何人都可以执行。
飞行模式测试¶
最简单的测试:加载生成器页面,然后完全断开互联网。在设备上启用飞行模式,断开以太网电缆或关闭 WiFi。现在尝试生成助记词。如果工具在没有网络连接的情况下完美工作,那么至少它是在本地执行生成步骤。
网络流量检查¶
在使用生成器之前打开浏览器的开发者工具(F12 或 Cmd+Shift+I)并切换到网络选项卡。清除所有现有条目,然后生成助记词。观察点击生成按钮后是否有任何出站请求。合法的客户端工具在生成过程中应该发出零网络请求。对任何指向外部域、分析端点或 API 调用的请求保持警惕。
源代码审查¶
开源生成器允许您审查浏览器中实际运行的代码。检查:
- 随机数生成使用浏览器内置的 Web Crypto API 而非自定义或导入的随机函数
- 没有用生成的数据发出
fetch()、XMLHttpRequest或WebSocket调用 - 没有从可能被入侵的 CDN 加载外部脚本
- 分析或跟踪脚本不存在,或至少无法访问页面的 DOM 内容
子资源完整性¶
检查页面是否在其 script 标签上使用子资源完整性(SRI)哈希。SRI 确保从外部源加载的脚本未被篡改。没有 SRI,被入侵的 CDN 可能提供捕获您密钥的恶意 JavaScript。
Web Crypto API 标准¶
现代浏览器包含一个名为 Web Crypto API 的内置密码学 API。这是基于浏览器的工具中熵生成的黄金标准。
当助记词生成器调用 crypto.getRandomValues() 时,它从操作系统的密码学安全伪随机数生成器(CSPRNG)获取随机性。在大多数系统上,这结合了硬件熵源,包括中断定时、CPU 热噪声和专用硬件随机数生成器。生成的随机性对于所有实际密码学目的来说与真随机数据无法区分。
这很重要,因为 BIP39 助记词的安全性最终取决于生成它的熵的安全性。128 位助记词(12 个词)需要 128 位真正的随机性。如果工具使用 Math.random() 而不是 crypto.getRandomValues(),熵池会大幅缩小,生成的助记词可能被暴力破解。请参阅什么是加密货币中的熵?以更深入地了解为什么熵质量很重要。
SafeSeed 的架构¶
SafeSeed 从一开始就设计为客户端工具。每个密码学操作,从熵生成到助记词派生到私钥计算,都完全在您的浏览器中执行。
以下是 SafeSeed 的架构如何应对上述每个风险:
熵生成专门使用 Web Crypto API。当您使用 Bitcoin 助记词生成器或 Ethereum 助记词生成器时,随机性来自操作系统的 CSPRNG,通过 crypto.getRandomValues()。
密钥生成期间没有服务器通信。SafeSeed 在生成、显示或派生密钥时发出零网络请求。您可以使用上述网络检查方法自行验证,或在加载页面后断开互联网。
开源且可审计的代码意味着您不需要信任 SafeSeed 的声明。源代码公开供任何人审查。安全研究人员、密码学家和经验丰富的开发者可以验证实现是否与声明一致。
密码学操作没有外部依赖。BIP39 派生、密钥生成和地址计算都使用与页面直接打包的代码。没有可能被悄悄替换的 CDN 加载的加密库。
您的评估清单¶
在使用任何在线助记词生成器之前,请通过此清单。合法的工具应该通过每一项。
必备属性¶
-
客户端执行:工具必须在初始页面加载后无需互联网连接即可工作。用飞行模式自行测试。
-
使用 Web Crypto API:源代码必须使用
crypto.getRandomValues()获取熵。检查源代码或开发者文档。 -
生成期间没有网络请求:打开浏览器的网络选项卡并确认生成助记词时零出站请求。
-
开源代码:完整源代码应可公开审计。专有生成器要求您盲目信任运营商。
-
没有分析或跟踪脚本:Google Analytics、Hotjar 或类似的第三方脚本可能捕获屏幕数据,包括显示的助记词。
高质量的强指标¶
-
符合 BIP39 标准并带校验和验证:工具应生成带有效校验和的短语,并清楚解释它实现的标准。阅读 BIP39 详解了解工作原理。
-
确定性派生:给定相同的助记词,工具应始终派生相同的密钥和地址。您可以与其他受信任的工具进行交叉检查以验证正确性。
-
支持标准派生路径:HD 钱包派生应遵循 BIP44 标准,以便工具生成的钱包可在任何兼容钱包软件中恢复。在 HD 钱包与派生路径中了解更多。
-
清晰的安全模型文档:工具应准确解释什么在哪里运行,什么数据离开您的设备(不应有任何),以及如何生成熵。
危险信号¶
- 生成助记词前要求创建账户或输入电子邮件
- 生成页面包含社交媒体分享按钮
- 从多个外部域加载脚本
- 使用自定义随机数生成而不是 Web Crypto API
- 不提供源代码供审查
- 助记词生成期间发出网络请求
- 要求将您的助记词存储或"备份"到其服务器
安全的在线生成器与危险的在线生成器之间的区别是架构性的,不是表面的。漂亮的界面如果代码会回传数据就毫无意义。丑陋的工具如果完全在浏览器中运行并使用适当的熵则可以完全安全。学习这些检查方法,自己执行它们,您就能自信地评估任何工具。
有关助记词和私钥之间关系的额外背景,请参阅助记词 vs 私钥。如果您准备安全生成密钥,SafeSeed 的 Bitcoin 助记词生成器和 Ethereum 私钥生成器都建立在本文描述的原则之上。