校验下载的文件
假冒钱包在把你的助记词发往别处的那一刻之前,外观和行为都可能与真品一模一样。所以要检查文件本身,而不是你获取它的网站。ZooBC 把其发布版本的指纹记录在链上,任何人都可以在浏览器中或从终端,把文件的指纹与它们进行比较。
链上的指纹
指纹就是文件的 SHA-256 哈希。改动文件的一个字节,哈希就会完全改变,因此哈希相同就意味着是同一个文件。
链在两个地方保存哈希:
- 发布注册表。 发布机构(链的创世中指定的一个账户)为每个发布版本注册其版本字符串和一个 32 字节的清单哈希,之后也可以撤销它。单个文件也会被登记:钱包、区块浏览器和地址文件各有自己的哈希,而一个文件包的条目是其 SHA256SUMS 文件的 SHA-256。三分之二的已注册席位还可以否决某个发布版本,并在经过一周的投票后替换发布机构(发布版本与更新)。
- 交易消息。 任何交易都可以在消息中携带一个哈希,而这个哈希可以被搜索到。
由于这些记录是链的一部分,每个节点对它们给出的答案都相同。
/verify 页面
每个网关都在 /verify 提供一个页面。把文件拖放到上面,该页面会:
- 在你的浏览器内计算 SHA-256 哈希;文件绝不会被上传;
- 在发布版本列表(
/api/v1/release/list)和交易消息(/api/v1/search/transactions?q=后接该哈希)中查找该哈希; - 报告三种状态之一:已上链,即该哈希已在链上登记;等待锚定,即该文件本应有链上背书,但其哈希未被登记,因此只有网关为它担保;已撤销,即发布机构已将其撤回。
页面加载时,还会读取当前的发布机构(/api/v1/release/authority),并在发布机构的更换尚待生效时提醒你。已撤销的文件是已被撤回的文件;请删除它。
不依赖网站
你甚至不必信任这个页面。自己计算哈希,然后向任意节点(包括你自己运行的节点)请求发布版本列表:
sha256sum wallet.html
GET /api/v1/release/list
如果你算出的哈希列在一个未被撤销的发布版本之下,你持有的就是正式发布的文件。对于文件包,先将其 SHA256SUMS 文件的哈希与列表核对,再在该文件包的文件旁运行 sha256sum -c SHA256SUMS。每个节点都根据同一条链作答,因此无需信任任何单个网站。
网关发布什么
每个网关都发布一份验证清单,其中包含钱包文件的哈希及其 zip 压缩包的哈希。zip 以可复现的方式构建:相同的文件总是得到相同的压缩包,因而得到相同的哈希,任何人都可以重新构建并进行比较。
什么都证明不了的东西
- 挂锁图标(HTTPS)只能证明你访问的是哪个网站,而不能证明文件会做什么。
- 文件大小很容易复制。
- 看起来正确的余额完全说明不了你的助记词接下来会被发往何处。
只有与链上记录比对过的哈希,才能告诉你这个文件就是正式发布的那个文件。