知识库 在引擎盖下
验证构建
仅当您正在运行的代码是以前的代码时,开源才有帮助 发表。 Nymchat 是确定性构建的,因此您可以从内部自行检查 应用程序或从终端。
为了方便起见,此页面是机器翻译的。英文原件为适用版本。
可重复的构建
构建应用程序会发出 build-manifest.json 包含源提交,a
每个服务的 HTML、JavaScript 和 CSS 资产的 SHA-256 哈希值以及单个
bundleHash 整个资产集。
输出仅取决于源内容 - 甚至记录的构建时间也是
提交的时间戳而不是构建运行的时刻——因此任何人都可以重建相同的时间戳
commit 得到字节相同的文件并且相同 bundleHash.
然后,GitHub Action 独立重建每个提交并签署构建来源
哈希和清单的证明,因此有一个签名记录绑定
bundleHash 到存储库中的提交,由除
部署。
关于对话框检查的内容
关于 在标题中,在浏览器中实时运行检查。
它重新获取页面实际运行的每个资产,使用 Web Crypto API 对其进行哈希处理,然后
与清单进行比较。然后——这是重要的部分——
重新计算 bundleHash 从哈希值 它 只是计算出来的,不是从
清单声明的任何内容,并在存储库的签名证明中查找
通过 GitHub API。
这就是阻止部署为其自身提供担保的原因:将修改后的文件与 匹配清单仍然失败,因为重新计算的哈希没有证明。
| 地位 | 方法 |
|---|---|
| &查看;已验证的官方应用程序 (n/n) | 每个资产都匹配,重新计算的捆绑散列由存储库证明, 和 该页面由官方域提供。 |
| ⚠ 已验证版本·不是官方应用程序 | 该代码是真实的且经过验证的,但这是另一个域上的镜像。如果验证失败,镜像将无法删除此警告。 |
| ✗ 不匹配 | 资产不会根据清单内容进行哈希处理。 |
| ✗ 非官方构建 | 重新计算的捆绑散列没有来自存储库的证明——一个自制的清单。 |
| ⚠ 无法获取出处 | 无法访问 GitHub API,因此无法以任何方式检查证明。 |
自己验证一下
重建提交“关于”对话框名称并进行比较:
git clone https://github.com/Spl0itable/NYM
cd NYM
git checkout <commit shown in the About dialog>
npm ci
npm run build # prints "Build hash: <bundleHash>"
打印的哈希值应与“关于”对话框中的哈希值和该提交的哈希值相匹配 构建来源运行摘要。您还可以直接使用 GitHub CLI 检查签名:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
权证金丝雀
权证金丝雀是一种按固定时间表发布的声明,表明开发商已 不是 收到一项禁止透露的政府秘密命令—— 国家安全信函,FISA 命令。开发商可能被迫保持沉默 这样的命令,但不能强迫撒谎,所以金丝雀变质或消失是 本身就是信号。
它住在 canary.json 位于存储库的根目录并直接获取
来自 GitHub,因此其历史记录是可审计的,与部署的站点所说的无关。
关于对话框对其进行颜色编码:
| 颜色 | 方法 |
|---|---|
| 绿色的 — 全部清除 | 已签名、当前且签名与开发人员的密钥匹配。尚未收到任何秘密命令。 |
| 黄色的 — 逾期或未全部清除 | 它没有在规定的日期或它的 allClear 标志是假的。不能排除沉默令。 |
| 红色的 — 签名无效或消失 | 签名与开发人员的密钥不匹配,或者文件已被完全删除。将此视为严重警告。 |
新鲜度锚
签名的金丝雀嵌入了签名时最新的比特币区块高度和哈希值。 在区块存在之前,不可能知道该哈希值,这证明金丝雀是 签署 后 一个特定的时间点,而不是几个月前批量预先签署。 “关于”对话框将锚点链接到块资源管理器,以便您可以检查它。