# のあとの鍵:共有リンクがサーバーを締め出す仕組み
共有した会話は私たちのサーバーに保存されますが、私たちには開けません。その仕組み、パスワードの役割、そしてリンクでは守れないもの。
共有とは通常、リンクを保存する誰かに自分の言葉を渡すことです。Undergrove の共有リンクは、サーバーが読めないコピーを持つように作られています。その仕掛けは古くて単純ですが、知っておくべき限界があります。
# のあとの部分
会話を共有すると、ブラウザは新しいランダムな鍵を作り、コピーを AES-GCM で暗号化して、暗号文だけをアップロードします。鍵はリンクの # のあとに入ります。ブラウザはページを読み込むとき、アドレスのこの部分をサーバーに送りません。そのため鍵は、リンクを送った相手には届き、私たちには決して届きません。
暗号文は 1 日、7 日、または 30 日間保管します。私たちに見えるのは、その id、サイズ、作成日時と開封日時です。それを開くページは暗号文を取得し、アドレスバーから鍵を読み取って、タブの中で復号します。
パスワードも
リンクにパスワードを求めることもできます。その場合、コピーを開く鍵は両方から作られます。パスワードは PBKDF2-SHA256 で 600,000 回反復して引き伸ばされ、HKDF でリンクの鍵と組み合わされます。リンクだけでもパスワードだけでも開けず、パスワードはタブの中で、すでに手元にあるコピーに対して確認されるため、私たちがそれを目にすることはありません。
1 回限りの開封と、開封日時
リンクを 1 回限り開けるようにすることもできます。サーバーは最初に読まれた時点でコピーを削除し、開かれた日時だけを残します。そのためリンクは、最初から存在しなかったのではなく、使用済みであることを示せます。ページは取得の前に確認を求めるので、チャットアプリのリンクプレビューで使い切られることはありません。
指定した日付に開けるようにすることもできます。その日まで、サーバーは暗号文の引き渡しを拒否します。これは暗号技術ではなく、サーバーが約束を守っているだけです。コピーはすでに保存されており、その鍵もすでにリンクの中にあります。
リンクでは守れないもの
- リンク全体を持っている人は誰でもコピーを読めます。会話そのものと同じように扱ってください。
- チャットアプリやメールアプリは、送ったメッセージを、リンクも # 以降も含めて保存します。
- コピーを復号するページは、私たちが配信するコードです。/verify はそのコードをビルドの公開マニフェストと比較します。
プライバシーのページには各リンクについて保存されるものを、脅威モデルには誰が何を見うるかを記載しています。
ほかのフィールドノート
アテステーションが証明するもの、しないもの
ブラウザは、一言も送る前に Tinfoil のエンクレーブを確認します。その確認で何が確かめられ、どこで終わり、何がまだブラウザでは確認できないのか。
読めないリレーにもまだ見えるもの
私たちのリレーは、開けない暗号文を中継します。それは何も見えないということとは違います。実際に見えるものの一覧と、その理由。