検証の仕組み

ブラウザで確認。
エンクレーブへ封印。

ブラウザが確認すること、リレーに見えること、そして引き続き私たちを信頼していただく部分です。

第三者による評価はまだ

  • まずエンクレーブを確認

    確認できる理由

    最初のメッセージの前に、Tinfoil のオープンソースの検証ツールが、チップが署名したレポートをブラウザで確認します。検証できないレポートなら、すべてが止まります。

    仕組みを読む
  • タブの中で封印

    確認できる理由

    各リクエストは送信前に、アテステーションが示す鍵に向けて EHBP(HPKE、AES-256-GCM)で暗号化されます。

    仕組みを読む
  • リレーに見えるのはバイトだけ

    確認できる理由

    リレーはアカウントと利用枠を確認し、暗号文を Tinfoil のホストに渡します。見えるのはサイズ、時刻、アカウントで、コピーは保存しません。

    仕組みを読む
  • 回答ごとのレシート

    確認できる理由

    ブラウザは、ハードウェアが対応している範囲で回答したモデルのエンクレーブを確認し、その結果を回答と一緒に保存します。

    仕組みを読む

誰がのぞけるのか、何がそれを防ぐのか。

  1. ネットワーク

    残るリスク: 低
    得るもの
    封印されたバイト、サイズ、時刻
    防ぐもの
    HTTPS、そしてエンクレーブ宛ての封印
    残る課題
    通信のサイズとタイミング
  2. リレー

    残るリスク: 中
    得るもの
    アカウント、IP、サイズ、モデル
    防ぐもの
    タブ内で封印、リレーは開けない
    残る課題
    リレーに見えるメタデータ
  3. クラウドのホスト

    残るリスク: 中
    得るもの
    暗号化されたエンクレーブのメモリ
    防ぐもの
    AMD SEV-SNP または Intel TDX、アテステーション済み
    残る課題
    ハードウェアの欠陥、Tinfoil 自身の説明
  4. 偽のエンクレーブ

    残るリスク: 低
    得るもの
    何も得られない(タブが拒否)
    防ぐもの
    ブラウザで確認するアテステーション
    残る課題
    検証済みのコードはレビュー済みのコードではない
  5. 得るもの
    封印前に入力した内容
    防ぐもの
    ビルドのマニフェスト、署名、ご自身でのビルド
    残る課題
    ページは自分自身を完全には保証できない
  6. 開発者向け API

    残るリスク: 高
    得るもの
    メモリ上のリクエスト
    防ぐもの
    保存もログもしない(私たちの方針)
    残る課題
    ゲートウェイを信頼する必要がある

1 台のサーバーの中

エンクレーブの始まりと終わり。

スクロールして GPU サーバーを分解してみてください。エンクレーブの境界の内側にあるものと、外側に残るもの。

  1. ヒートスプレッダーGPU のチップを覆う金属のふた。
  2. GPU ダイモデルが動く場所です。Tinfoil のドキュメントによれば、同社の NVIDIA GPU(H100、H200、B200)はコンフィデンシャルコンピューティングモードで動作します。
  3. 広帯域メモリモデルの重みと、回答中のリクエストを保持します。
  4. 機密仮想マシンサーバーのプロセッサ上(AMD SEV-SNP または Intel TDX)で、Tinfoil のルーターとモデルのサーバーが、ホストの読めないメモリの中で動きます。そのチップが、ブラウザの確認するレポートに署名します。
  5. エンクレーブの境界ハードウェアがホストを締め出す範囲であり、アテステーションが記述する範囲です。リクエストはこの内側でのみ開かれます。
  6. ホスト基板、そのハイパーバイザーとドライバー、そして運用する人。境界の外側です。封印されたバイト列を出し入れします。

Tinfoil が運用する種類のマシンのイラストで、特定のマシンの写真ではありません。Tinfoil の署名付きリリース記録には各エンクレーブの CPU、メモリ、GPU が記されており、ワークスペースの「検証済み」パネルに表示されます。

全文を読む全文を閉じる約 12 分、図 6 点

要点

Undergrove は、Tinfoil が運用するハードウェアエンクレーブの中でオープンウェイトモデルを動かしています。その意味するところのうち、一部はブラウザ自身が確認し、一部は Tinfoil の表明であり、一部は私たちに依存します。それぞれを以下に分けて示します。

ブラウザが確認すること

  • エンクレーブが本物のハードウェアで、Tinfoil が公開したコードを実行していること。
  • 各リクエストが、タブを出る前にそのエンクレーブの鍵で封印されること。
  • 各回答のレシートのために、回答したモデルのエンクレーブ(ハードウェアが対応している場合)。

Tinfoil の表明

  • Tinfoil は自社のエンクレーブにアクセスできず、その中身は再起動をまたいで残らないこと。
  • 対応 GPU がコンフィデンシャルコンピューティングモードで動作すること。

私たちを信頼していただくこと

  • このサイトがブラウザに送るコード。ビルドと照合できます。
  • リレーが見えるもの(サイズ、時刻、アカウント)の扱い。
  • リクエストをメモリ上で読む、開発者向け API のゲートウェイ。

これらはいずれも、まだ第三者による評価を受けていません。

01 · アテステーション

チップがコードを保証します。

ハードウェアエンクレーブとは、サーバーの中で、そのホスト自身も中をのぞけない部分です。プロセッサがエンクレーブのメモリを暗号化し、ホストのソフトウェアを締め出します。それだけでは約束にすぎません。確認できるものにするのがアテステーションです。エンクレーブの起動時に、プロセッサは読み込んだコードを測定し、その測定値のレポートに、チップメーカーが保証する鍵で署名します。レポートには、エンクレーブが復号に使う公開鍵も記されています。

最初のメッセージの前に、ワークスペースは Tinfoil のルーターエンクレーブのレポートを私たちのサーバー経由で取得し、Tinfoil のオープンソースの検証ツールをブラウザ上で実行します。私たちを経由しても何も変わりません。私たちはチップの署名を偽造できず、検証に通らないレポートはすべてを止めます。

Tinfoil のエンクレーブハードウェアのレポートプロセッサはエンクレーブの起動時のコードを測定し、エンクレーブの公開鍵を記したレポートに、チップメーカーが保証する鍵で署名します。
GitHub と Sigstore公開されたリリースTinfoil はオープンソースのコードを公開の場でビルドし、各リリースの測定値を Sigstore の公開透明性ログに記録します。
お使いのブラウザTinfoil のオープンソース検証ツールレポートの署名をチップメーカーの鍵で確認し、リリースの署名付きビルド記録を確認し、2 つの測定値を比べます。

一致:リクエストはレポートが示す鍵で封印されます。

どれかが失敗:何も送信されず、ワークスペースが理由を示します。

図 1。ブラウザは、私たちを信頼しなくても確認できる 2 つのものを比べます。エンクレーブで動くコードについてのチップの署名付きレポートと、そのコードについて Tinfoil が公開したリリースです。一致した場合にのみ封印します。

検証ツールのチェック(実行順)

  1. このコードについて Tinfoil が公開したリリースを見つける。
  2. エンクレーブのハードウェアアテステーションレポートを、チップメーカーの署名鍵で確認する。
  3. リリースの署名付きビルド記録を確認する(GitHub からの Sigstore)。
  4. 比較する:エンクレーブで測定されたコードが、そのリリースと完全に同じであること。
  5. 暗号化の鍵が、エンクレーブのアテステーションが示す鍵であることを確認する。

検証済みのレポートは、このタブまたはこのサイトの別のタブで最大 10 分間再利用されます。ただし SHA-256 で同一と確認できた場合に限ります。ワークスペースは各チェックを「検証済み」に表示し、アーキテクチャのページではそれを実行するコードを確認できます。

02 · 封印

開けられるのはエンクレーブだけです。

エンクレーブの検証が済むと、ライブのリクエストはすべて、タブを出る前に封印されます。本文は、Tinfoil の HTTP 本文暗号化プロトコルである EHBP で、アテステーションが示した鍵に向けて暗号化されます。EHBP が使う HPKE は、相手の公開鍵に向けて暗号化するための標準です。タブはリクエストごとに新しい鍵ペアを作り、エンクレーブの鍵と組み合わせて共有秘密を導き、AES-256-GCM で暗号化します。

新しい鍵ペアの公開側は、カプセル化された鍵として暗号文と一緒に送られます。それを秘密に戻せるのは、エンクレーブから決して出ないエンクレーブの秘密鍵だけです。回答も同じように、封印されたフレームで戻り、届くそばからタブで開かれます。

あなたのタブリクエストごとに新しい鍵ペア検証済みのエンクレーブの公開鍵と組み合わせると、ほかの誰にも導けない秘密になります。
暗号文 + カプセル化された鍵
Undergrove のリレーそのまま渡す開ける鍵を持っていません。
同じバイト列
Tinfoil のエンクレーブ開けるエンクレーブから決して出ない秘密鍵で。
図 2。EHBP は各リクエストの本文を HPKE(X25519、HKDF-SHA256、AES-256-GCM)で封印します。回答も封印されて戻り、開けるのはタブの中だけです。ご自身でメッセージを封印して、各ステップを確かめられます。

03 · リレー

読めないバイト列。

封印されたリクエストは、Tinfoil に直接ではなく、Vercel 上の関数である私たちのリレーに届きます。リレーは誰からのリクエストか、利用枠の範囲内かを確認し、Undergrove の Tinfoil 鍵をリクエストに付けます。そのため Tinfoil のアカウントは不要です。Tinfoil 自身のホスト宛てでないもの、カプセル化された鍵のないものは拒否します。

リレーは単語を数えられないため、各リクエストの費用を暗号文のサイズから多めに見積もります。コピーは残さず、ログにはルート名、ステータスコード、所要時間だけが記録されます。

外側:リレーに見えるもの

  • アカウントと IP アドレス(ホスティング事業者の Vercel 経由)
  • 各リクエストのサイズ、時刻、パス
  • どのモデルが回答したか(Tinfoil が付けるヘッダーから)
  • ウェブ検索や画像を使ったかどうか(課金のため、ブラウザが申告したもの)

内側に封印:リレーには読めないもの

  • あなたのメッセージとファイル
  • 回答
  • 指示とメモ
図 3。リレーは、Tinfoil 自身のホスト向けに封印されていないものをすべて拒否し、私たちの Tinfoil 鍵に差し替えて、バイト列をそのまま渡します。単語を数えられないので、サイズで課金します。リレーが見たとおりのリクエストを見る。

04 · レシート

2 つのエンクレーブと、回答ごとのレシート。

ブラウザが検証したルーターエンクレーブは、モデルを実行しません。リクエストを開き、モデルが GPU とともに動くエンクレーブへ渡します。ルーターはそのエンクレーブを公開コードに従って自ら検証し、レスポンスヘッダーで名前を示します。

続いてブラウザは、その名前のエンクレーブも同じ検証ツールで、Tinfoil のルーターがそのモデルに固定しているリポジトリと照らして確認します。結果はレシートとして回答と一緒に保存されます。エンクレーブ、その中で測定されたコード、一致したリリース、リクエストを封印した鍵です。レシートはブラウザ自身の記録で、私たちも Tinfoil も署名していません。その根拠となるアテステーションには AMD と GitHub が署名しているため、誰でも確認し直せます。

エンクレーブ 1Tinfoil のルーター送信前に検証済み。リクエストを開きます。
エンクレーブからエンクレーブへ
エンクレーブ 2モデルとその GPUtinfoil-enclave ヘッダーで示されます。
再確認
お使いのブラウザ回答のレシート回答と一緒に保存:エンクレーブ、測定されたコード、リリース、鍵。
検証済み
本物のハードウェアで、Tinfoil のルーターがそのモデルに固定しているリポジトリの公開リリースを実行しています。
未確認
ブラウザの検証ツールがまだ読めないハードウェアです。読めるのは AMD SEV-SNP のレポートなので、Intel TDX 上のエンクレーブは未確認として記録されます。
未確定
チェックは実行されたものの、途中のステップが失敗しました。たとえば、Tinfoil のサービスが対応付けるリリースより新しいリリースで、すでにエンクレーブが動いている場合です。
図 4。Tinfoil のルーターは、モデルのエンクレーブを公開コードに従って自ら検証し、レスポンスヘッダーで名前を示します。ブラウザは回答のレシートのため、そのエンクレーブをもう一度確認します。ヘッダーは暗号化の対象外なので、これで分かるのは名前の示すエンクレーブが本物であることで、このリクエストがそこへ行ったことではありません。その区間はルーターの公開コードに依拠しています。

05 · 開発者向け API

別の経路を、率直に。

開発者向け API を呼び出すコードは、リクエストを HTTPS で私たちのゲートウェイに送り、ゲートウェイはそれを読みます。確認し、制限を適用し、ツールを実行するためです。読むのはメモリ上だけで、保存もログ記録もしません。その後ゲートウェイは、ワークスペースでブラウザが行うのと同じことをします。Tinfoil の SDK でエンクレーブを検証し、リクエストを封印します。

つまりこの経路では、ゲートウェイがリクエストを持っている間、私たちを信頼していただくことになります。それでも確認できるのはエンクレーブです。Tinfoil のルートからの回答には、ゲートウェイが検証したアテステーションバンドルを示すヘッダーが付いており、ご自身で検証し直せます。方法は開発者向けドキュメントにあります。

ワークスペース
お使いのブラウザ検証してから封印
リレー読めません
エンクレーブ開ける
開発者向け API
あなたのサーバーHTTPS で送信
私たちのゲートウェイ確認のためにメモリ上で読み、保存もログ記録もしません
エンクレーブ先にゲートウェイが検証
図 5。同じエンクレーブへの 2 つの経路。ワークスペースではブラウザが封印し、API では私たちのゲートウェイが、確認のためにメモリ上でリクエストを読んだ後に封印します。Tinfoil のエンクレーブからの API の回答にはすべて、ゲートウェイが検証したアテステーションバンドルが示され、GET /v1/attestation?sha256= で取得して検証し直せます。

06 · このページ

確認するコードを確認する。

ここまでのすべては、このサイトがブラウザに送るコードの中で動いています。だからそのコードも重要です。ビルドごとにマニフェストが作られます。サイトが配信するすべてのファイルの SHA-256 と、ビルド元のコミットです。

ページは自分自身を完全には保証できません。ページの中で動くチェックは、そのページと同じだけしか信頼できません。より強い確認には私たちは一切関わりません。指定の環境でご自身でコミットをビルドし、マニフェストを比べてください。

ビルドマニフェストサイトが配信するすべてのファイルの SHA-256 と、元のコミット。
サイトと一緒に公開
お使いのブラウザ読み込んだもののハッシュを計算異なるファイルは名前で示されます。
または、ご自身のマシンで
誰でもコミットをビルドし直すそして 2 つのマニフェストを比べます。
図 6。このページを検証は、ブラウザが読み込んだファイルのハッシュを計算し、ビルドのマニフェストとそのコミットに照らします。指定の環境でそのコミットをビルドし直す(npm run rebuild:site)と、バイト単位で同じマニフェストになるはずです。誰でも実行して比べられ、私たちに尋ねる必要はありません。

07 · 限界

これで証明できないこと。

  • Tinfoil の表明は Tinfoil のものです。 Tinfoil がエンクレーブにアクセスできないこと、中身が再起動をまたいで残らないこと、GPU がコンフィデンシャルコンピューティングモードで動作することは、Tinfoil の表明です。ブラウザが確認するのは、ハードウェアが本物で、公開されたコードを実行していることです。
  • ハードウェアも信頼の一部です。 保護の強さは、プロセッサとそのファームウェア、チップメーカーの鍵に左右されます。ハードウェアエンクレーブには、これまでにも脆弱性が公表されています。
  • 一区間は公開コードに依拠しています。 リクエストがルーターからモデルのエンクレーブへ渡ったことは、ルーターの公開コードに依拠しています。ブラウザがモデルのエンクレーブを確認できるのは AMD SEV-SNP の場合だけで、Intel TDX では未確認として記録されます。
  • リレーには外側が見えます。 アカウント、IP アドレス、サイズ、時刻、どのモデルが回答したか。
  • 公開されていることは、レビュー済みであることとは違います。 検証ツールが示すのはどのコードが動いているかであって、そのコードに欠陥がないことではありません。
  • 第三者評価はまだありません。 この設計とそのコードは、これまでどの監査人のレビューも受けていません。

誰に何が見えうるかを観察者ごとに知るには、脅威モデルをお読みください。

08 · さらに詳しく

各部分が動く様子を見る。