フィールドノート

# のあとの鍵:共有リンクがサーバーを締め出す仕組み

共有した会話は私たちのサーバーに保存されますが、私たちには開けません。その仕組み、パスワードの役割、そしてリンクでは守れないもの。

共有とは通常、リンクを保存する誰かに自分の言葉を渡すことです。Undergrove の共有リンクは、サーバーが読めないコピーを持つように作られています。その仕掛けは古くて単純ですが、知っておくべき限界があります。

# のあとの部分

会話を共有すると、ブラウザは新しいランダムな鍵を作り、コピーを AES-GCM で暗号化して、暗号文だけをアップロードします。鍵はリンクの # のあとに入ります。ブラウザはページを読み込むとき、アドレスのこの部分をサーバーに送りません。そのため鍵は、リンクを送った相手には届き、私たちには決して届きません。

暗号文は 1 日、7 日、または 30 日間保管します。私たちに見えるのは、その id、サイズ、作成日時と開封日時です。それを開くページは暗号文を取得し、アドレスバーから鍵を読み取って、タブの中で復号します。

パスワードも

リンクにパスワードを求めることもできます。その場合、コピーを開く鍵は両方から作られます。パスワードは PBKDF2-SHA256 で 600,000 回反復して引き伸ばされ、HKDF でリンクの鍵と組み合わされます。リンクだけでもパスワードだけでも開けず、パスワードはタブの中で、すでに手元にあるコピーに対して確認されるため、私たちがそれを目にすることはありません。

1 回限りの開封と、開封日時

リンクを 1 回限り開けるようにすることもできます。サーバーは最初に読まれた時点でコピーを削除し、開かれた日時だけを残します。そのためリンクは、最初から存在しなかったのではなく、使用済みであることを示せます。ページは取得の前に確認を求めるので、チャットアプリのリンクプレビューで使い切られることはありません。

指定した日付に開けるようにすることもできます。その日まで、サーバーは暗号文の引き渡しを拒否します。これは暗号技術ではなく、サーバーが約束を守っているだけです。コピーはすでに保存されており、その鍵もすでにリンクの中にあります。

リンクでは守れないもの

  • リンク全体を持っている人は誰でもコピーを読めます。会話そのものと同じように扱ってください。
  • チャットアプリやメールアプリは、送ったメッセージを、リンクも # 以降も含めて保存します。
  • コピーを復号するページは、私たちが配信するコードです。/verify はそのコードをビルドの公開マニフェストと比較します。

プライバシーのページには各リンクについて保存されるものを、脅威モデルには誰が何を見うるかを記載しています。

ほかのフィールドノート

  1. アテステーションが証明するもの、しないもの

    ブラウザは、一言も送る前に Tinfoil のエンクレーブを確認します。その確認で何が確かめられ、どこで終わり、何がまだブラウザでは確認できないのか。

  2. 読めないリレーにもまだ見えるもの

    私たちのリレーは、開けない暗号文を中継します。それは何も見えないということとは違います。実際に見えるものの一覧と、その理由。