콘텐츠로 건너뛰기

신원과 구성원

bae에는 어디에도 계정 시스템이 없습니다. 기기의 신원은 기기가 직접 생성하고 OS 키링에 보관하는 Ed25519 키 쌍입니다. 공개 키 자체가 신원입니다. 라이브러리에 속한 사람은 클라우드 홈의 서명된 레코드 집합으로 표현되며, 그 레코드를 가진 누구나 검증할 수 있고 어떤 서버도 발급하지 않습니다. 이 장치는 coven의 것입니다. 이 페이지는 bae가 그것을 어떻게 쓰는지 설명합니다.

구성원 기록

이 섹션으로 연결

각 소유자는 서명된 구성원 항목의 추가 전용 스트림을 클라우드 홈에 씁니다. 이 키가 이 역할로 추가되었다, 이 키가 제거되었다 같은 항목입니다. 모든 항목은 이전 항목에 연결되고, 각 소유자는 자기 스트림의 끝을 선언하는 머리글에 서명합니다. 그래서 제공자가 레코드를 떨어뜨리거나 순서를 바꾸면 그대로 믿지 않고 감지합니다. 라이브러리가 받아들이는 것은 모든 소유자의 검증된 스트림의 합집합입니다.

가져올 때마다 각 changeset의 작성자를 이 레코드와 대조합니다. 현재 구성원이 서명했는지, 쓸 수 있는 역할인지 확인합니다. 제거된 기기, 한 번도 추가되지 않은 키, 서명이 유효하지 않은 changeset은 적용되지 않습니다. 제공자는 레코드를 저장하지만 위조할 수 없습니다. 소유자 키를 가진 사람만 구성원 자격을 바꿀 수 있습니다.

OwnerMember는 둘 다 라이브러리를 읽고 씁니다. owner는 추가로 기기를 승인하고 제거합니다. bae의 최초 기기는 owner이고, 그 기기가 승인한 모든 기기는 member로 참가합니다. (기반 장치에는 읽기 전용 follower라는 세 번째 역할도 있지만, bae는 현재 이를 할당하지 않습니다.)

기기 추가는 중간에 사람이 명시적으로 확인하는 두 코드 교환입니다.

  1. 참가 기기가 키 쌍을 생성하고 join request를 보여줍니다. 여기에는 공개 키, 그 짧은 지문, 그리고 OAuth 제공자의 경우 폴더를 공유할 클라우드 계정이 들어 있습니다.
  2. owner가 요청을 해독하면 두 화면에 같은 지문이 표시됩니다. 사람은 둘이 일치하는지 확인합니다. 이 단계가 바뀐 키를 막습니다.
  3. 승인은 세 가지를 한꺼번에 합니다. 새 기기 계정에 클라우드 홈 접근 권한을 주고(소비자용 클라우드의 폴더 공유, S3의 내장 자격 증명, iCloud의 CloudKit 공유), 라이브러리 키를 새 기기의 공개 키로 봉인하고, 그 키를 추가하는 구성원 항목에 서명합니다. 이 모두가 invite code에 담깁니다.
  4. 참가 기기가 초대를 받아 키를 열고, 최신 스냅샷에서 시작한 뒤 동기화합니다.

초대는 요청한 키에 봉인되어 있습니다. 가로채도 아무 권한을 주지 않습니다.

구성원을 제거하면 서명된 제거 기록을 추가하고 라이브러리 키를 제거된 키가 받지 못하는 새 세대로 교체합니다(암호화 참고). 접근 취소가 가능한 저장소에서는 접근 권한도 철회합니다. 제거된 기기에 이미 동기화된 것은 그 기기에 남습니다. 데이터를 되돌려 보낼 수는 없습니다. 교체 뒤의 모든 것은 그 기기가 닿을 수 없습니다.

복구 코드는 의도적으로 구성원 자격을 우회합니다. 살아 있는 승인자가 없어도 자신의 라이브러리를 복구할 수 있게 클라우드 홈 좌표와 라이브러리 키를 하나의 보유자 문자열에 담은 것입니다. 요청 시 생성되고, Apple 플랫폼에서는 iCloud Keychain에 자동 저장되며, 라이브러리 자체만큼 민감합니다.