Перейти до вмісту

Ідентичність та участь

У bae ніде немає системи облікових записів. Ідентичність пристрою — це пара ключів Ed25519, який він створює для себе й тримає у сховищі ключів OS; публічний ключ і є ідентичністю. Хто належить до бібліотеки — це набір підписаних записів у хмарному домі, перевірний будь-ким, хто їх має, без жодного сервера, який їх видає. Механіка належить coven; ця сторінка описує, як bae її використовує.

Кожен власник пише потік лише для додавання підписаних записів участі в хмарний дім: цей ключ додано з цією роллю, цей ключ видалено. Кожен запис посилається на попередній, і кожен власник підписує заголовок, який оголошує кінець свого потоку, тож провайдер, який викидає або переставляє записи, виявляється, а не приймається на віру. Бібліотека приймає обʼєднання кожного перевіреного потоку власника.

Під час кожного pull автор кожного changeset перевіряється за цим записом: підписаний поточним учасником із роллю, яка може писати. Changesets від видалених пристроїв, від ключів, які ніколи не додавалися, або з недійсними підписами не застосовуються. Провайдер зберігає записи, але не може їх підробити; лише власники owner keys можуть змінювати участь.

Owner і Member обидва читають і записують бібліотеку; owners додатково схвалюють і видаляють пристрої. Початковий пристрій bae є owner, а кожен пристрій, який він схвалює, приєднується як member. (У нижчій механіці існує третя роль, read-only follower, яку bae наразі не призначає.)

Обмін приєднання

Посилання на цей розділ

Додавання пристрою — це обмін двома кодами з явною людською перевіркою посередині:

  1. Пристрій, що приєднується, генерує свою пару ключів і показує join request: свій публічний ключ, короткий відбиток і (для OAuth-провайдерів) хмарний обліковий запис, з яким треба поділитися папкою.
  2. Owner декодує запит, і два екрани показують той самий відбиток. Людина перевіряє, що вони збігаються; цей крок зриває підміну ключа.
  3. Схвалення робить три речі одночасно: надає обліковому запису новачка доступ до хмарного дому (folder share у споживчих хмарах, вбудовані облікові дані на S3, CloudKit share на iCloud), запечатує ключ бібліотеки для публічного ключа новачка й підписує запис участі, що додає його. Усе це пакується в invite code.
  4. Пристрій, що приєднується, споживає запрошення, розпечатує ключ, завантажується з останнього snapshot і синхронізується.

Запрошення запечатане для ключа, що зробив запит: перехоплення нічого не дає.

Видалення учасника додає підписане видалення й обертає ключ бібліотеки до нового покоління, якого видалений ключ ніколи не отримує (див. Шифрування). У сховищі, що може відкликати доступ, доступ також забирається. Те, що вже синхронізувалося на видалений пристрій, лишається в нього; дані неможливо відіслати назад. Усе після обертання поза його досяжністю.

Коди відновлення

Посилання на цей розділ

Код відновлення навмисно обходить участь: це координати хмарного дому плюс ключ бібліотеки в одному рядку носія, для відновлення власної бібліотеки без живого схвалювача. Він генерується на вимогу, автоматично зберігається в iCloud Keychain на платформах Apple і є таким самим чутливим, як сама бібліотека.