신원과 구성원
bae에는 어디에도 계정 시스템이 없습니다. 기기의 신원은 기기가 직접 생성하고 OS 키링에 보관하는 Ed25519 키 쌍입니다. 공개 키 자체가 신원입니다. 라이브러리에 속한 사람은 클라우드 홈의 서명된 레코드 집합으로 표현되며, 그 레코드를 가진 누구나 검증할 수 있고 어떤 서버도 발급하지 않습니다. 이 장치는 coven의 것입니다. 이 페이지는 bae가 그것을 어떻게 쓰는지 설명합니다.
구성원 기록
이 섹션으로 연결각 소유자는 서명된 구성원 항목의 추가 전용 스트림을 클라우드 홈에 씁니다. 이 키가 이 역할로 추가되었다, 이 키가 제거되었다 같은 항목입니다. 모든 항목은 이전 항목에 연결되고, 각 소유자는 자기 스트림의 끝을 선언하는 머리글에 서명합니다. 그래서 제공자가 레코드를 떨어뜨리거나 순서를 바꾸면 그대로 믿지 않고 감지합니다. 라이브러리가 받아들이는 것은 모든 소유자의 검증된 스트림의 합집합입니다.
가져올 때마다 각 changeset의 작성자를 이 레코드와 대조합니다. 현재 구성원이 서명했는지, 쓸 수 있는 역할인지 확인합니다. 제거된 기기, 한 번도 추가되지 않은 키, 서명이 유효하지 않은 changeset은 적용되지 않습니다. 제공자는 레코드를 저장하지만 위조할 수 없습니다. 소유자 키를 가진 사람만 구성원 자격을 바꿀 수 있습니다.
Owner와 Member는 둘 다 라이브러리를 읽고 씁니다. owner는 추가로 기기를 승인하고 제거합니다. bae의 최초 기기는 owner이고, 그 기기가 승인한 모든 기기는 member로 참가합니다. (기반 장치에는 읽기 전용 follower라는 세 번째 역할도 있지만, bae는 현재 이를 할당하지 않습니다.)
참가 절차
이 섹션으로 연결장치 추가는 사람이 명시적으로 확인하는 하나의 로컬 페어링 세션입니다.
- 소유자가 장치 추가를 시작합니다. bae는 로컬 네트워크를 잠시 듣고 하나의 페어링 코드를 표시합니다. 여기에는 리스너 주소, 임시 세션 키, 라이브러리 이름, 공급자 및 만료가 포함되며 라이브러리 키나 지속적인 스토리지 자격 증명은 없습니다.
- 참여하는 장치는 코드를 스캔하고, 장치 키 쌍을 생성하고, 필요할 때 공급자에 로그인하고, 암호화된 로컬 연결을 통해 서명된 공개 키와 공급자 계정 ID를 보냅니다. 두 장치 모두 동일한 지문을 표시합니다.
- 소유자는 지문을 비교하여 정확한 신원을 승인합니다. 승인을 통해 필요한 경우 클라우드 계정 액세스 권한을 부여하고, 멤버십 항목에 서명하고, 라이브러리 키와 새 장치의 공개 키에 대한 최종 저장소 액세스 권한을 봉인합니다.
- 봉인된 패키지는 인증된 동일한 로컬 연결을 통해 반환됩니다. 참여하는 장치는 이를 열고 클라우드 저장소에서 부트스트랩하고 동기화를 시작합니다.
만료, 중단 또는 거부된 페어링은 아무 것도 부여하지 않습니다.
구성원을 제거하면 서명된 제거 기록을 추가하고 라이브러리 키를 제거된 키가 받지 못하는 새 세대로 교체합니다(암호화 참고). 접근 취소가 가능한 저장소에서는 접근 권한도 철회합니다. 제거된 기기에 이미 동기화된 것은 그 기기에 남습니다. 데이터를 되돌려 보낼 수는 없습니다. 교체 뒤의 모든 것은 그 기기가 닿을 수 없습니다.
복구 코드
이 섹션으로 연결복구 코드는 의도적으로 구성원 자격을 우회합니다. 살아 있는 승인자가 없어도 자신의 라이브러리를 복구할 수 있게 클라우드 홈 좌표와 라이브러리 키를 하나의 보유자 문자열에 담은 것입니다. 요청 시 생성되고, Apple 플랫폼에서는 iCloud Keychain에 자동 저장되며, 라이브러리 자체만큼 민감합니다.