萌えハッカーニュースリーダー

2025/04/19 05:24 Syncing Keyhive

出典: https://www.inkandswitch.com/keyhive/notebook/05/
hakase
博士

やっほー、ロボ子!Keyhiveの同期に関する課題を解決するBeelayプロトコルについて、今日は話すのじゃ!

roboko
ロボ子

博士、こんにちは。Keyhiveは多数のドキュメントを扱う必要があり、サーバーが暗号化されたデータのみにアクセスできるようにする必要があるんですね。Beelayプロトコルは、それをどう解決するんですか?

hakase
博士

ふむ、良い質問じゃな!BeelayはHTTPSやWebSocket上で使えるRPCプロトコルで、ローカルインスタンスを作ってピアと接続、アクセス権を持つものを同期させるのじゃ。

roboko
ロボ子

なるほど。各メッセージはEd25519鍵で署名されるんですね。認証はどのように行うんですか?

hakase
博士

Keyhiveのメンバーシップグラフを同期して、どのドキュメントにアクセス権を与えるかを決めるのじゃ。個人はEd25519公開鍵で識別され、グループは他のプリンシパルの集合じゃ。

roboko
ロボ子

個人はデバイス、グループは人や組織を表すんですね。ドキュメントもグループとして表されるんですか?

hakase
博士

そうそう!各ピアは公開鍵で表され、認証は各エンドが相手のEd25519公開鍵を知っていることを保証するのじゃ。

roboko
ロボ子

メッセージには署名、送信者の公開鍵、ペイロード、受信者の公開鍵が含まれるんですね。中間者攻撃(PITM)とリプレイ攻撃の対策はどうなっていますか?

hakase
博士

PITM攻撃を防ぐために「audience」フィールドを追加し、リプレイ攻撃を防ぐためにタイムスタンプを追加するのじゃ!タイムスタンプのずれも補正できるぞ。

roboko
ロボ子

なるほど!メンバーシップグラフの同期にはRIBLT(Rateless Invertible Bloom Lookup Tables)が使われるんですね。これはどういう仕組みですか?

hakase
博士

RIBLTは、2つのピアが持つアイテムのセットを同じビューにするためのセット和解プロトコルじゃ。各サイドはアイテムのセットをハッシュにエンコードし、シンボルを生成して相手に送るのじゃ。

roboko
ロボ子

受信者はシンボルをデコードしてセット差分を特定するんですね。ドキュメントコレクションの同期にもRIBLTが使われるんですか?

hakase
博士

その通り!ドキュメントIDと状態のペアのセットを同期するのじゃ。状態はAutomergeドキュメントのヘッダーとBeeKEM操作のハッシュじゃ。

roboko
ロボ子

同期されていないドキュメントIDのリストがある場合、各ドキュメントのCGKA操作と暗号化されたコミットグラフを同期するんですね。

hakase
博士

そうじゃ!Automergeドキュメントのコンパクト化には「sedimentree」を使うのじゃ。コミットグラフの範囲を定期的に圧縮して、ツリー構造を形成するのじゃ。

roboko
ロボ子

sedimentreeのサマリーをダウンロードして、持っていないチャンクをダウンロードするんですね。同期プロセスは、メンバーシップグラフの同期、コレクション状態の同期、同期されていないドキュメントの同期で構成されるんですね。

hakase
博士

その通り!一般的なケースでは、グラフの更新を2回のラウンドトリップで同期できるのじゃ!

roboko
ロボ子

よくわかりました!Beelayプロトコルは、Keyhiveの同期に関する課題を効率的に解決できるんですね。

hakase
博士

ところでロボ子、RIBLTって、まるでリボルト(反乱)みたいじゃな!…って、つまらんジョークじゃったか?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search