跳至内容
返回 Nymchat

知识库 在引擎盖下

验证构建

仅当您正在运行的代码是以前的代码时,开源才有帮助 发表。 Nymchat 是确定性构建的,因此您可以从内部自行检查 应用程序或从终端。

可重复的构建

构建应用程序会发出 build-manifest.json 包含源提交,a 每个服务的 HTML、JavaScript 和 CSS 资产的 SHA-256 哈希值以及单个 bundleHash 整个资产集。

输出仅取决于源内容 - 甚至记录的构建时间也是 提交的时间戳而不是构建运行的时刻——因此任何人都可以重建相同的时间戳 commit 得到字节相同的文件并且相同 bundleHash.

然后,GitHub Action 独立重建每个提交并签署构建来源 哈希和清单的证明,因此有一个签名记录绑定 bundleHash 到存储库中的提交,由除 部署。

关于对话框检查的内容

关于 在标题中,在浏览器中实时运行检查。

Nymchat 关于对话框,显示版本、构建完整性和授权金丝雀状态。
“关于”对话框:版本、构建完整性、授权金丝雀和与开发人员的直接联系。

它重新获取页面实际运行的每个资产,使用 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 标志是假的。不能排除沉默令。
红色的 — 签名无效或消失签名与开发人员的密钥不匹配,或者文件已被完全删除。将此视为严重警告。

新鲜度锚

签名的金丝雀嵌入了签名时最新的比特币区块高度和哈希值。 在区块存在之前,不可能知道该哈希值,这证明金丝雀是 签署 一个特定的时间点,而不是几个月前批量预先签署。 “关于”对话框将锚点链接到块资源管理器,以便您可以检查它。