エンドツーエンド暗号化のチーム共有の仕組み:鍵、参加、メンバー削除

エンドツーエンド暗号化によるチーム共有は、一つの考え方の上に成り立っています。内容はチームの端末だけが持つ鍵でロックされ、サーバーの役目は、その鍵の封印されたコピーを、自分では開けないまま正しい相手に届けることです。それ以外のこと、つまり誰かを招待する、誰かを削除する、忘れたパスワードを復旧するといったことは、すべて「誰が、どの鍵の新しいコピーを、誰のために封印するか」という問題です。

多くの人が本当に知りたい疑問への短い答えはこうです。メンバーが追加されると、すでにチャンネルキーを持っている誰かが新しいメンバーのためにそのコピーを封印します。メンバーが削除されると、サーバーはその人のコピーを消し、残ったメンバーのアプリが、削除された人には決して届かない新しいバージョンの鍵を生成します。この二つ目の手順、鍵のローテーションこそが、暗号的な削除と、画面上でフォルダを隠すだけの操作とを分けるものです。

この記事では、チームリーダーやセキュリティ審査の担当者に必要なレベルで概念を説明します。例としてSpeak-Y Teamsを取り上げます。正確に説明できる設計だからです。そのうえで、公開されているほかの設計と異なる点を比較します。

鍵の三つの層と、三つある理由

エンドツーエンド暗号化されたチームスペースで共有された会議の文字起こしは、一つのパスワードではなく、鍵の連鎖によって守られています。

層があるのは、よく行う操作を軽く保つためです。新しい録音の共有で触れるのは、レコードの鍵一つだけです。メンバーの追加は、一つのチャンネルキーをもう一人のために封印することであって、すべての文字起こしを暗号化し直すことではありません。削除後のチャンネルキーのローテーションでは、鍵を一つ変え、その下にある小さなレコードの鍵をラップし直すだけで、サイズの大きい暗号化された内容はそのままです。

Speak-Yでは、メンバーの鍵ペアはアカウントの暗号化パスワードから導出されるため、同じパスワードからはどの端末でも同じ鍵が得られます。構成要素は、標準的な公開鍵の「sealed box(封印箱)」と認証付き暗号であり、独自の暗号ではありません。

Speak-Y Teamsの鍵の三つの層を示す図:レコードの鍵、チャンネルキー、メンバーの鍵ペア
レコードの鍵はチャンネルキーでロックされ、チャンネルキーはメンバーごとにその公開鍵で封印される。

サーバーが保存するもの、見えないもの

サーバーは暗号文のための郵便受けです。そこにあるのは、暗号化された項目、各メンバー宛てに封印されたチャンネルキーのコピー、そして配送に必要なだけの構造です。

サーバーに見えるのはチームの構造です。ワークスペースとチャンネルがいくつあるか、誰がどこに所属しているか、チャンネルが公開か非公開か、鍵がいつ発行または取り消されたか、そして各項目の基本的なメタデータ、つまりサイズ、長さ、時刻です。文字起こしや要約の内容は見えません。さらにSpeak-Yでは、ワークスペースやチャンネルの名前も見えません。名前は内容と同じ鍵で暗号化されているからです。「買収 — Project Falcon」という名前のチャンネルがあれば、その名前自体が情報です。

メタデータについて正確に述べることは、誠実なエンドツーエンドの主張の一部です。どんな設計でもすべてを隠せるわけではない理由は、E2EEの用語解説で説明しています。

ワークスペース名、公開チャンネル、非公開チャンネルを強調表示したSpeak-Y Teamsのワークスペース
1 — ワークスペース名、2 — 公開チャンネル、3 — 非公開チャンネル。サーバーはそれらの存在とメンバーを知っているが、名前と内容は暗号化されている。

誰かが参加するとき

メンバーの追加で難しいのは、サーバーが自分では読めない鍵を渡せないことです。新しいメンバーの公開鍵に向けてコピーを封印できるのは、すでに鍵を持っているクライアントだけであり、新しいメンバーの公開鍵は、その人が招待を受け入れて初めて存在します。

これを回避する方法は二つあります。一つ目は、チームの誰かがアプリを開き、新しいメンバーのために鍵を封印するのを待つことです。これで動きはしますが、招待した人が休暇中なら空白が生じます。Speak-Yはこの空白をネットワークエラーとしてではなく、チャンネルキーを待っていますという独立した状態として表示します。

二つ目は、新しいメンバーに必要なものを招待自体に持たせることです。Speak-Yの招待リンクは、フラグメント、つまりURLの#より後ろの部分にワークスペースキーを含んでいます。この部分がサーバーに送られることはありません。各チャンネルは自分の鍵のコピーをワークスペースキーでロックして保持しているため、新しいメンバーは招待を受け入れた直後から、ほかに誰もオンラインでなくてもワークスペースのチャンネルを開けます。その代わり、リンクそのものがアクセス権になります。だからこそ招待は一回限りで、有効期限があり、パスワードを送るときと同じように送るべきなのです。

非公開チャンネルには、もう一つのルールがあります。非公開チャンネルはワークスペースキーでは開けません。非公開チャンネルのメンバーが、そのチャンネルの鍵を相手のために直接封印することで、誰かを追加します。

誰かが削除されるとき

設計の違いがもっとも大きく表れるのがここであり、「本当にエンドツーエンドなのか」という問いに具体的な答えが出るのもここです。

アクセスの取り消しとは、サーバーが削除された人へのデータ提供をやめることです。これはサーバーのポリシーで強制されるもので、鍵は変わりません。1Passwordのセキュリティホワイトペーパーは、自社の共有をこのように説明しており、保管庫、グループ、チームから人を削除しても暗号的には強制されず、鍵も変更されないと明記しています。これは文書化された意図的なトレードオフです。事前に鍵を保存していた人は、あとで入手した保管庫のデータを読める可能性があります。

鍵のローテーションとは、削除された人の鍵が機能しなくなることです。Speak-Yでは、ワークスペースからメンバーが削除されると次のことが起こります。

  1. サーバーは、その人宛てに封印された鍵のコピーを直ちに削除します。
  2. 削除を行うメンバーのアプリが、チャンネルキーとワークスペースキーの新しいバージョンを生成し、残るメンバーと、ワークスペースのRecovery Kitのためだけに封印します。
  3. チャンネル名とワークスペース名は、新しいバージョンで暗号化し直されます。
  4. 古いワークスペースキーでロックされていたチャンネルキーのコピーは新しい鍵でロックし直されるため、古い招待リンクでは何も開けません。
  5. 既存の項目は、バックグラウンドで新しいバージョンの鍵にラップし直されます。

一つの非公開チャンネルから誰かを削除した場合も、同じようにそのチャンネルの鍵がローテーションされます。

メッセージングのプロトコルも同じ原則に従っています。WhatsAppの暗号化に関する概要(2026年2月版)には、グループのメンバーが退出するたびに、全参加者がグループの鍵を消去して最初からやり直すと書かれています。2023年7月に公開されたIETFのMessaging Layer Security標準、RFC 9420では、メンバーの削除時にグループを新しいエポックへ移し、削除されたメンバーが知らない新しい鍵の材料を使います。

チームメンバーを削除したときのアクセスの取り消しと鍵のローテーションの比較
取り消しは鍵を変えないサーバーのポリシー。ローテーションは、削除された人には決して届かない新しいバージョンの鍵を発行する。

ローテーションでも取り戻せないもの

ローテーションが守るのは未来であって、過去ではありません。削除された人が自分の端末ですでに開いたもの、ダウンロードしたもの、コピーしたものは、その人の手元に残ります。どんな暗号方式も、他人の記憶やディスクの中にまでは手が届きません。ローテーションが保証するのはもっと狭い範囲ですが、それでも価値があります。削除後に共有された新しい録音はその人には読めず、あとからサーバーから取得したものを古い鍵で開くこともできません。

チームの運用には、二つのことが言えます。

何をどのチャンネルに入れるかの決め方は、チームのナレッジベースのガイドで扱っています。

誰かがパスワードを忘れたとき

プロバイダーが鍵を持たないシステムでは、「パスワードを忘れた」をサポートが解決することはできません。それこそが要点です。解決するのはチームの誰かでなければなりません。

Speak-Yでは、これをRecovery Kitで行います。ワークスペースを作成するとき、オーナーは復旧用の鍵が入ったファイルを保存し、すべてのチャンネルキーはこの鍵に対しても封印されます。メンバーがパスワードを失って新しいパスワードを設定した場合、Kitを持つ人がその人の新しい鍵ペアに向けてチャンネルキーを再発行できます。Kitが復元するのはチームのチャンネルへのアクセスだけで、誰の個人の録音にも及びません。また、チームにとってもっとも機密性の高いファイルでもあるため、チームがほかの重要な秘密情報を保管している場所に置くべきです。

チーム外の人と共有する

文字起こしを、アカウントを持たない顧客や同僚に届けなければならないこともあります。Speak-Yの公開共有リンクは、項目の別のコピーを新しく生成した固有の鍵で暗号化し、その鍵をURLのフラグメントに入れます。完全なリンクを持っている人なら誰でもブラウザで項目を読めますが、サーバーが持つのは暗号文だけです。リンクを取り消すと、サーバー上のリンクは削除されます。招待と同じく、秘密はリンクそのものであり、誰かがすでに開いたコピーは取り戻せません。

どのベンダーにも尋ねるべき四つの質問

  1. メンバーを削除すると、鍵はどうなりますか。 「アクセスは取り消されます」はポリシーの答えです。「鍵はローテーションされます」は暗号の答えです。
  2. サーバーはチャンネル名やワークスペース名を読めますか。 名前は、内容と同じくらい多くを語ることがよくあります。
  3. メンバーがパスワードを忘れた場合、誰がアクセスを復元できますか。 答えがベンダーなら、ベンダーは鍵を持っています。
  4. 招待リンクや共有リンクは鍵の材料を含んでいますか。また、有効期限はありますか。 どちらの答えでも問題はありません。ベンダー自身がどちらなのかを把握していればよいのです。
エンドツーエンド暗号化されたチーム共有についてベンダーに尋ねる四つの質問
削除時の鍵、サーバー上の名前、パスワードの復旧、そして招待リンクが何を運ぶか。

Speak-Yのチーム共有はmacOSアプリで利用できます。ワークスペースの作成はProプランから可能で、チームメイトはどのプランでも無料で参加できます。共有チャンネルが日々の業務でどう見えるかはSpeak-Y Teamsのページで、これらすべてを可能にするには文字起こしを端末上で行う必要がある理由は議事録にエンドツーエンド暗号化が必要な理由で説明しています。

FAQ

サーバーが読めないのに、チームはどうやってエンドツーエンド暗号化されたファイルを共有できるのですか。

共有する項目はそれぞれ固有のランダムな鍵で暗号化され、その鍵はチャンネルキーでロックされます。チャンネルキーは、メンバーごとにそのメンバーの公開鍵で個別に封印されます。サーバーが保存するのはこれらの封印されたコピーだけなので、正しい相手に届けることはできても、どれ一つとして開けることはできません。

チームのチャンネルからメンバーを削除すると、暗号鍵はどうなりますか。

削除を暗号的に強制する設計では、サーバーが削除された人のチャンネルキーのコピーを消し、残ったメンバーのアプリが新しいバージョンの鍵を生成して、残る人のためだけに封印します。その後、古い項目も新しいバージョンでロックし直されます。Speak-Y Teamsはこの方式です。よく知られた製品の中には、サーバー側のアクセスを取り消すだけで同じ鍵を使い続けるものもあります。

削除されたメンバーは、以前に共有されたものをまだ読めますか。

その人がすでに開いたもの、ダウンロードしたもの、コピーしたものは手元に残ります。一度誰かの画面に表示された平文を取り戻せる暗号方式はありません。鍵のローテーションが守るのは削除後に共有されるものであり、あとからサーバーから取得した内容を古い鍵で開けないようにすることです。

エンドツーエンド暗号化されたワークスペースで、メンバーがパスワードを忘れたらどうなりますか。

プロバイダーは鍵を一度も持っていないため、アクセスを復元できません。Speak-YではRecovery Kitで対応します。ワークスペースのオーナーが作成時に保存するファイルで、新しいパスワードを設定したメンバーにチャンネルキーを再発行できます。Kitは個人の録音には及びません。

暗号化されたワークスペースへの招待リンクは機密情報ですか。

その可能性があります。Speak-Yの招待リンクは、URLの#より後ろの部分にワークスペースキーを含んでいます。この部分をブラウザやアプリがサーバーに送ることはありません。招待は一回限りで有効期限があり、メンバーを削除するとワークスペースキーはローテーションされますが、使われるまではパスワードと同じように扱うべきです。