身元とメンバーシップ
bae にはどこにもアカウントシステムがありません。デバイスの身元は、そのデバイスが生成して OS のキーリングに保持する Ed25519 鍵ペアです。公開鍵そのものが身元です。誰がライブラリに属するかは、クラウドホーム内の署名済みレコードの集合であり、それを持つ誰でも検証できます。サーバーは発行しません。この仕組みは coven のもので、このページでは bae がどう使うかを説明します。
メンバーシップレコード
このセクションへのリンク各所有者は、署名済みメンバーシップ項目の追記専用ストリームをクラウドホームへ書き込みます。この鍵をこのロールで追加した、この鍵を削除した、という項目です。各項目は前の項目へリンクし、各所有者は自分のストリームの先端を宣言する head に署名します。そのため、プロバイダーがレコードを落としたり並べ替えたりした場合、信じるのではなく検出されます。ライブラリが受け入れるのは、すべての所有者の検証済みストリームの和集合です。
各 pull では、各変更セットの作成者がこのレコードに照合されます。現在のメンバーによる署名か、書き込み可能なロールかを確認します。削除済みデバイス、追加されたことのない鍵、無効な署名からの変更セットは適用されません。プロバイダーはレコードを保存しますが、偽造はできません。メンバーシップを変えられるのは所有者鍵の保持者だけです。
ロール
このセクションへのリンクOwner と Member はどちらもライブラリを読み書きできます。所有者はさらにデバイスを承認および削除できます。bae の最初のデバイスは owner で、そのデバイスが承認するすべてのデバイスは member として参加します。(下層の仕組みには 3 つ目のロールとして読み取り専用 follower がありますが、bae は現在割り当てません。)
参加手順
このセクションへのリンクデバイスの追加は、明示的な人間による検証を伴う 1 回のローカル ペアリング セッションです。
- 所有者が デバイスを追加する を開始します。 bae はローカル ネットワークを短時間リッスンし、1 つのペアリング コードを表示します。これには、リスナーのアドレス、一時的なセッション キー、ライブラリ名、プロバイダー、および有効期限が含まれます。ライブラリ キーや永続的なストレージの資格情報は含まれません。
- 参加デバイスはコードをスキャンし、デバイス キー ペアを作成し、必要に応じてプロバイダーにサインインし、暗号化されたローカル接続を通じて署名付き公開キーとプロバイダー アカウント ID を送信します。両方のデバイスに同じ指紋が表示されます。
- 所有者は指紋を比較し、その正確な身元を承認します。承認により、必要に応じてクラウド アカウントへのアクセスが許可され、メンバーシップ エントリに署名し、ライブラリ キーと新しいデバイスの公開キーへの最終ストレージ アクセスが封印されます。
- 封印されたパッケージは、同じ認証されたローカル接続を通じて返されます。参加デバイスはそれを開き、クラウド ストレージからブートストラップして、同期を開始します。
期限切れ、中断、または拒否されたペアリングでは何も許可されません。
メンバーを削除すると、署名済み削除が追加され、ライブラリ鍵が、削除された鍵が受け取らない新世代へローテーションされます(暗号化 を参照)。アクセスを取り消せるストレージでは、アクセスも取り下げられます。削除されたデバイスにすでに同期されたものは、そのデバイスに残ります。データを送信後に取り戻すことはできません。ローテーション後のものは、そのデバイスの届かないところにあります。
復元コード
このセクションへのリンク復元コードは、意図的にメンバーシップを迂回します。クラウドホームの座標とライブラリ鍵を 1 つのベアラー文字列にしたもので、生きている承認者がいなくても自分のライブラリを復元するためのものです。必要なときに生成され、Apple プラットフォームでは自動的に iCloud Keychain に保存され、ライブラリそのものと同じだけ機密です。