知識ベース ボンネットの下で
ビルドの検証
オープンソースは、実行しているコードが、 出版されました。 Nymchat は決定論的に構築されているため、内部から自分で確認できます。 アプリまたは端末から。
このページは便宜上機械翻訳されています。英語原文が該当するバージョンとなります。
再現可能なビルド
アプリをビルドすると、 build-manifest.json ソースコミットを含む、
提供されるすべての HTML、JavaScript、CSS アセットの SHA-256 ハッシュ、および単一の
bundleHash その資産セット全体にわたって。
出力はソース コンテンツのみに依存し、記録されたビルド時間さえも依存します。
ビルドが実行された瞬間ではなく、コミットのタイムスタンプ - したがって、誰が同じものをリビルドしても
commit はバイト同一のファイルと同じファイルを取得します bundleHash.
その後、GitHub アクションは各コミットを個別にリビルドし、ビルドの出所に署名します。
ハッシュとマニフェストの証明書があるため、
bundleHash 以外の何かによって生成された、リポジトリ内のコミットへの
展開。
「バージョン情報」ダイアログでチェックされる内容
について ヘッダーでは、ブラウザでチェックがライブで実行されます。
ページが実際に実行している各アセットを再取得し、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
Android および iOS アプリ
上記のチェックは Web アプリのチェックであり、その理由は明確に述べる価値があります: ネイティブ アプリです。 自分自身に同じことをすることはできません。携帯電話で実行されるのはコンパイルされたマシンコードであり、 ソースはリポジトリ内にあり、アプリがデバイス上で計算できるものは何もありません。 その他。
Android は次善の策を実行できます。インストールされている .apk アプリが読み取ることができるファイルです
およびハッシュ。公開されたすべてのリリースのハッシュはすでに公開されています。
Zapstore
APK の SHA-256 とその署名証明書の SHA-256 を含む Nostr イベントに署名します。それで、
アンドロイド について ダイアログは実行元のAPKをハッシュし、署名されたAPKを取得します
イベントを取得し、開発者のキーで署名されたイベントのみを保持し、比較します。それは二つを示しています
ハッシュも同様に取得できるため、デバイスからチェックを繰り返すことができます。公開された APK をダウンロードして実行します。
sha256sum それを見て、あなた自身も同じイベントを見てください。
Google Playからインストールしたアプリはこの方法では確認できません, and that is not a sign anything is wrong. Google re-signs each upload with its own key and builds a separate APK for each device, so what lands on your phone is not the file the developer produced and its hash matches nothing that could be published. The app recognizes a Play install and says so rather than reporting a failure. To check a build yourself, install the APK published directly. 開発者が生産したファイルではなく、何でも間違っている。
iOSは全く確認できません。 Apple はダウンロードごとに暗号化して再署名します 個別に計算されるため、iPhone で計算されたハッシュは iPhone に固有のものであり、何にも一致しません どこでも公開されます。 「About」ダイアログには、安心させるメッセージが表示されるのではなく、これがはっきりと表示されます。 何の意味もない状態。 Apple ハードウェアで確認できる Nymchat が必要な場合は、Web を使用してください 実行中のすべてのファイルをチェックするアプリ。
アプリ自体が実行するチェックでは、誰が変更したかに関係なく、アプリが誠実であることを証明することはできません。 チェックを外すこともできます。それが証明するのは、通常のケースです。つまり、あなたのコピーは インストールされているのは、公開されたコピーです。それは価値があるからです 比較は公開されるため、あなた以外の誰かが比較を確認し、反対することができます。
令状カナリア
令状カナリアは、開発者が次のことを行っているという、固定スケジュールで公開される声明です。 ない 公開を禁じられる政府の秘密命令を受けた―― 国家安全保障書簡、FISA 命令。開発者は沈黙を強いられる可能性がある そのような命令ですが、嘘をつくことを強制することはできません。したがって、カナリアが古くなったり、消えたりするのは、 それ自体が信号です。
それはに住んでいます canary.json リポジトリのルートにあり、直接取得されます
GitHub から取得できるため、デプロイされたサイトの内容とは関係なく、その履歴を監査できます。
「バージョン情報」ダイアログでは色分けされています。
| 色 | 手段 |
|---|---|
| 緑 — すべてクリア | 署名済み、最新、署名は開発者のキーと一致します。秘密の命令は受けていません。 |
| 黄色 — 期限を過ぎている、またはすべてが明確ではない | 指定された日付までに更新されなかったか、 allClear フラグは偽です。沈黙の命令が出る可能性も排除できない。 |
| 赤 — 無効な署名、または署名がなくなった | 署名が開発者のキーと一致しないか、ファイルが完全に削除されています。これは重大な警告として扱ってください。 |
鮮度アンカー
署名されたカナリアには、署名時の最新のビットコイン ブロックの高さとハッシュが埋め込まれます。 このハッシュは、ブロックが存在する前には知ることができなかったはずであり、これはカナリアが 署名済み 後 数か月前に一括して事前署名するのではなく、特定の時点で。 [バージョン情報] ダイアログではアンカーがブロック エクスプローラーにリンクされているため、アンカーを確認できます。