コンテンツにスキップ
ニムチャットに戻る

知識ベース ボンネットの下で

ビルドの検証

オープンソースは、実行しているコードが、 出版されました。 Nymchat は決定論的に構築されているため、内部から自分で確認できます。 アプリまたは端末から。

再現可能なビルド

アプリをビルドすると、 build-manifest.json ソースコミットを含む、 提供されるすべての HTML、JavaScript、CSS アセットの SHA-256 ハッシュ、および単一の bundleHash その資産セット全体にわたって。

出力はソース コンテンツのみに依存し、記録されたビルド時間さえも依存します。 ビルドが実行された瞬間ではなく、コミットのタイムスタンプ - したがって、誰が同じものをリビルドしても commit はバイト同一のファイルと同じファイルを取得します bundleHash.

その後、GitHub アクションは各コミットを個別にリビルドし、ビルドの出所に署名します。 ハッシュとマニフェストの証明書があるため、 bundleHash 以外の何かによって生成された、リポジトリ内のコミットへの 展開。

「バージョン情報」ダイアログでチェックされる内容

について ヘッダーでは、ブラウザでチェックがライブで実行されます。

Nymchat のバージョン情報ダイアログには、バージョン、ビルドの整合性、およびカナリア ステータスの保証が表示されます。
[バージョン情報] ダイアログ: バージョン、ビルドの整合性、カナリアの保証、および開発者への直通ライン。

ページが実際に実行している各アセットを再取得し、Web Crypto API でハッシュし、 マニフェストと比較します。次に、これが重要な部分です。 を再計算します bundleHash ハッシュから それ からではなく、単に計算されただけです マニフェストに記載されている内容をすべてリポジトリの署名済み証明書で検索します。 GitHub API を通じて。

これが、デプロイメント自体の保証を妨げる原因です。つまり、変更されたファイルを一緒に提供することになります。 再計算されたハッシュには証明がないため、一致するマニフェストは依然として失敗します。

状態手段
&チェック;検証済みの公式アプリ (n/n)すべてのアセットが一致し、再計算されたバンドル ハッシュがリポジトリによって証明されます。 そして ページは公式ドメインから提供されています。
⚠ 検証済みビルド · 公式アプリではありませんコードは本物であり、証明されていますが、これは別のドメインのミラーです。ミラーは検証に失敗しないとこの警告を削除できません。
✗ 不一致アセットはマニフェストの内容にハッシュされません。
✗ 非公式ビルド再計算されたバンドル ハッシュには、リポジトリからの証明書はありません (独自に作成したマニフェスト)。
⚠ 出所が不明GitHub API にアクセスできなかったため、どちらの方法でも構成証明を確認できませんでした。

自分で検証してみると

About ダイアログ名をコミットして再構築し、比較します。

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>"

出力されたハッシュは、「About」ダイアログ内のハッシュとそのコミットのハッシュの両方に一致する必要があります。 build-provenance 実行の概要。 GitHub CLI を使用して署名を直接確認することもできます。

gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM

令状カナリア

令状カナリアは、開発者が次のことを行っているという、固定スケジュールで公開される声明です。 ない 公開を禁じられる政府の秘密命令を受けた―― 国家安全保障書簡、FISA 命令。開発者は沈黙を強いられる可能性がある そのような命令ですが、嘘をつくことを強制することはできません。したがって、カナリアが古くなったり、消えたりするのは、 それ自体が信号です。

それはに住んでいます canary.json リポジトリのルートにあり、直接取得されます GitHub から取得できるため、デプロイされたサイトの内容とは関係なく、その履歴を監査できます。 「バージョン情報」ダイアログでは色分けされています。

手段
— すべてクリア署名済み、最新、署名は開発者のキーと一致します。秘密の命令は受けていません。
黄色 — 期限を過ぎている、またはすべてが明確ではない指定された日付までに更新されなかったか、 allClear フラグは偽です。沈黙の命令が出る可能性も排除できない。
— 無効な署名、または署名がなくなった署名が開発者のキーと一致しないか、ファイルが完全に削除されています。これは重大な警告として扱ってください。

鮮度アンカー

署名されたカナリアには、署名時の最新のビットコイン ブロックの高さとハッシュが埋め込まれます。 このハッシュは、ブロックが存在する前には知ることができなかったはずであり、これはカナリアが 署名済み 数か月前に一括して事前署名するのではなく、特定の時点で。 [バージョン情報] ダイアログではアンカーがブロック エクスプローラーにリンクされているため、アンカーを確認できます。