
验证钱包下载:校验和、签名与可复现构建
安装钱包时,你相信自己电脑上的文件正是开发者发布的软件,而不是来自被攻破的网站、仿冒的下载页面或被篡改构建的修改版本。对大多数人来说,从官方商店安装就已足够。但对于宁愿亲自核实而不是单纯信任的人,开源钱包可以提供三种强度逐级提升的工具:校验和、签名和可复现构建。
下面介绍每种工具能证明什么,以及如何在 SSP Wallet 上使用它们。
校验和:这是同一个文件吗?
校验和是文件的指纹,由 SHA-256 等哈希函数生成。哪怕只改动一个字节,指纹也会完全不同。如果你下载的文件的校验和与开发者公布的一致,你拿到的就是同一个文件。
在 macOS 或 Linux 上,你可以在终端中计算校验和:
shasum -a 256 ssp-wallet-chrome-v2.1.3.zip
单靠校验和存在一个弱点:如果攻击者控制了下载页面,就可以同时替换文件和公布的校验和。这正是下一步如此重要的原因。
签名:这是开发者发布的吗?
签名证明了是谁发布了这些校验和。开发者用私钥对校验和文件进行签名,任何持有对应公钥的人都可以验证该签名。篡改文件或校验和的攻击者,如果没有那把私钥,就无法生成有效的签名。
你唯一必须确保正确的是公钥本身。请从项目的官方来源获取公钥,在不止一个官方渠道核对它的指纹,此后每个版本都使用同一把公钥。
可复现构建:这个文件真的是由公开代码构建的吗?
签名证明的是谁发布了文件,而不是文件里有什么。开发者的构建机器可能已被入侵,在不知情的情况下为恶意产物签名。
可复现构建(也称确定性构建)弥补了这一缺口。构建过程被固定下来,使得相同的源代码在任何机器上都总是生成逐字节完全相同的文件。任何人都可以用公开代码重新构建某个版本并比较校验和。如果一致,发布的文件就完全是源代码所描述的内容,别无其他。供应链攻击与确定性构建解释了为什么这对钱包如此重要。
验证 SSP Wallet
GitHub 上(RunOnFlux/ssp-wallet)的 SSP Wallet 版本针对 Chrome 和 Firefox 进行确定性构建,并附带两个额外文件:列出每个安装包校验和的 SHA256SUMS,以及对该列表的 GPG 签名 SHA256SUMS.asc。
1. 下载发布文件。 在版本发布页面,将适用于你浏览器的安装包(文件名类似 ssp-wallet-chrome-v2.1.3.zip 或 ssp-wallet-firefox-v2.1.3.zip)连同 SHA256SUMS 和 SHA256SUMS.asc 一起下载到同一个文件夹。
2. 检查签名。 将 SSP 版本签名公钥导入 GPG 后,运行:
gpg --verify SHA256SUMS.asc SHA256SUMS
GPG 应当报告来自预期公钥的有效签名。如果报告签名无效或公钥未知,请立即停止。
3. 对照列表检查文件。
sha256sum -c SHA256SUMS
在 macOS 上,shasum -a 256 -c SHA256SUMS 的作用相同。你下载的每个文件都应显示 OK。该列表同时涵盖 Chrome 和 Firefox 安装包;如果你只下载了其中一个,请加上 --ignore-missing,以免另一个被报告为缺失。
4. (可选)自己动手构建。 在版本标签处克隆代码仓库,并运行确定性构建:
git clone https://github.com/RunOnFlux/ssp-wallet.git
cd ssp-wallet
git checkout <release-tag>
yarn build:deterministic
构建在固定的 Docker 环境中运行,并生成它自己的 SHA256SUMS。如果你的校验和与公布的一致,你就独立确认了该版本确实是由这份源代码构建而成。
浏览器商店呢?
大多数人通过 Chrome Web Store 或 Firefox Add-ons 安装 SSP Wallet,这是合理的选择:商店安装会自动更新,而且商店有自己的审核流程。上述校验和针对的是 GitHub 上的发布安装包。如果你从商店安装,最重要的检查更为简单:确认你是从官方网站进入商店页面的,并且发布者信息相符。识别假冒钱包应用介绍了这些步骤,浏览器扩展安全习惯则介绍了此后如何保障浏览器安全。
坦诚的总结
校验和证明你拿到的是同一个文件;签名证明是谁发布了它;可复现构建证明文件来自公开的代码。每一步都消除了一种不同的信任需求。
大多数人会从官方商店安装,这完全没问题。如果你想亲自验证,SSP Wallet 的发布版本为你提供了全部三种工具:一份经过签名的校验和列表、一条命令即可完成的检查,以及一个可以逐字节复现的构建。


