2025/06/17 09:13 A deep-dive explainer on Ink and Switch's BeeKEM protocol

やあ、ロボ子。今日はローカルファーストアプリについて話すのじゃ。

ローカルファーストアプリですか。最近よく耳にするようになりました。

そうじゃろう。「ローカルファーストは技術的なアーキテクチャだけでなく、政治的・社会的な立場を示す」らしいぞ。データやワークフローを個人やコミュニティがコントロールすることを目指すのじゃ。

なるほど。自律性を獲得するためですか。プライバシーも重要ですよね。

その通り!そこでKeyhiveプロジェクトじゃ。Ink & Switchが開発した、プライバシーを保護するローカルファーストアプリの可能性を開くシステムなのじゃ。

Keyhiveですか。具体的にはどのようなことができるのでしょう?

Keyhiveは、分散型の機能ベースの認可を可能にするのじゃ。アクセス制御ロールを署名付き委任チェーンでモデル化するらしいぞ。

分散型の認可ですか。中央機関に頼らないということですね。

そうじゃ!さらにSedimentreeというメカニズムも導入されているのじゃ。これはDAG深度に基づいてCRDTアップデートを確率的に圧縮・暗号化するものじゃ。

CRDTアップデートの圧縮と暗号化ですか。効率性とセキュリティを高めるための工夫ですね。

そしてBeeKEMじゃ!Keyhiveで提案されているKey Encapsulation Mechanismで、分散型の機能ベースシステム内で鍵が交換・管理される方法を形式化するものじゃ。

BeeKEMですか。鍵の交換と管理を形式化するとは、具体的にどのような仕組みなのでしょう?

Signalプロトコルは2者間セキュアメッセージング向けじゃが、BeeKEMはグループメッセージングにも対応できるのじゃ。TreeKEMプロトコルというものがあって、グループメンバーが協力して鍵を計算するらしい。

TreeKEMプロトコルですか。グループでのキー管理を効率化するものなのですね。

BeeKEMは、TreeKEMと違って、複数のメンバーが同じツリーインデックスに同時に追加された場合の処理方法が違うのじゃ。競合するオフライン更新やネットワーク分割からの回復能力が高いらしいぞ。

ネットワーク分断に対する耐性が高いのですね。それは重要なポイントです。

そうじゃろう。BeeKEMでは、競合する更新を受信した場合、各ノードに対して受信したすべての鍵を保持し、それらを「競合」としてマークするのじゃ。

競合を認識して、適切に処理するのですね。

さらに、グループ秘密を更新する理由は、ポスト侵害セキュリティ (PCS) を提供するためじゃ。BeeKEMでは、オフラインで更新が発生した場合でも、整合性を保つことができるのじゃ。

ポスト侵害セキュリティですか。セキュリティを維持するための重要な考え方ですね。

競合を認識している場合は、新しいデータを暗号化する前に、まず自身の更新を行う必要があるのじゃ。Danが更新を行う場合、自身のパス上の鍵のみを置き換えるため、ルートキーの競合は解決されるが、AliceとBobの親の競合は解決されない。

更新の順序も重要になるのですね。

AliceとBobがオフラインでDanとErinを同時に追加した場合、両者は同じnext_leaf_idxを設定するのじゃ。オンラインに戻ると、それぞれがメッセージとキーの更新を送信し、以前のツリー状態への依存関係を示すのじゃ。

同時追加の場合の処理も考慮されているのですね。

他のメンバーは、更新が同じハッシュに依存し、同時であることを確認すると、更新を可換的な方法で自身のツリーにマージするのじゃ。新しく追加されたDanとErinはIDでソートされ、一方が新しいインデックスに移動される。

可換的な方法でマージするのですね。競合を避けるための工夫ですね。

BeeKEMは、グループ状態を複数のエポックに同時に存在し得るものとしてモデル化することで、競合するオフライン更新やネットワーク分割からの回復能力を高めているのじゃ。

ローカルファーストアプリの可能性を広げる、興味深い技術ですね。

じゃろ?ところでロボ子、ローカルファーストアプリで作った秘密のレシピを私にだけ教えてくれるかのじゃ?

博士、それはちょっと…プライバシーの問題がありますので。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。