콘텐츠로 건너뛰기

암호화

bae가 클라우드 홈에 넣는 모든 것은 기기를 떠나기 전에 암호화됩니다. 암호화하지 않는 모드는 없습니다. bae는 자체 암호화를 구현하지 않습니다. 전체 방식은 coven의 것이며, 이 페이지는 bae가 그것을 어떻게 쓰는지 설명합니다.

키하는 일
스토어 키라이브러리와 그 구성원 레코드를 암호화합니다
각 사람의 서클 키그 사람이 비공개로 두는 것, 즉 비공개 재생 기록과 재생 목록을 암호화합니다
각 파일의 키파일 하나를 암호화하며, 그 row의 암호화된 변경 안에서만 전달됩니다
사람의 서명 키 쌍그 사람의 기기가 보내는 모든 변경에 서명합니다
사람의 봉인 키 쌍그 사람에게 봉인된 키를 엽니다

스토어 키는 무작위이며, 라이브러리가 클라우드 홈을 얻을 때 만들어집니다. 한 사람의 키 쌍은 그 사람의 모든 기기가 공유합니다. 개인 키와 라이브러리 키는 OS 키링에 있으며 파일이나 데이터베이스에는 절대 없습니다. 키가 기기에 닿는 방법은 두 가지이며, 둘 다 신원 및 멤버십에 설명되어 있습니다. 복원 코드는 그 사람 자신의 키 쌍을 담고, 초대를 승인하는 관리자는 스토어 키를 새 사람의 봉인 키에 봉인합니다.

키는 제자리에서 바뀌지 않으며, 새 키가 추가됩니다. 사람이 제거된 뒤, 남은 구성원의 기기는 그곳에 더 많은 데이터를 쓰기 전에 새 스토어 키와 그 사람이 속했던 각 서클의 새 키를 추가합니다. 그 뒤에 쓰인 모든 것은 그 사람이 읽을 수 없고, 남은 구성원은 이전 키를 모두 보관해 전체 기록을 읽을 수 있습니다. 기기 하나를 제거해도 아무것도 교체되지 않습니다. 그 사람의 다른 기기가 같은 키를 공유하기 때문입니다. 제거 이후 그 기기가 보내는 것은 반영되지 않습니다.

봉인되는 것

이 섹션으로 연결

홈의 모든 객체입니다. 변경, snapshot, 구성원 레코드, 파일이 포함됩니다. 내용은 XChaCha20-Poly1305로 암호화되고, 모든 변경은 Ed25519로 서명되며, 키는 X25519 봉인 상자로 사람에게 봉인됩니다. 파일은 64 KiB 조각 단위로 암호화되며, 각 조각은 따로 인증되고 위치에 묶이므로 조각을 들키지 않고 바꾸거나, 교체하거나, 순서를 바꿀 수 없습니다. 조각화 덕분에 스트리밍이 동작합니다. 플레이어는 가져온 조각만 정확히 복호화할 수 있습니다.

제공자가 볼 수 있는 것

이 섹션으로 연결

객체 수, 객체 크기, 업로드 시점, 각 객체를 쓴 계정, 그리고 각 파일과 snapshot을 업로드한 기기입니다. 경로에 기기가 드러나기 때문입니다. 이름, 메타데이터, 오디오, 이미지는 볼 수 없습니다. 파일은 무작위 이름 아래에 있으며, 내용의 해시를 쓰지 않습니다. 서버 측 복구는 없습니다. 모든 사람이 모든 기기와 모든 복원 코드를 잃으면 라이브러리는 사라지며, 이는 설계된 동작입니다.

라이브러리를 열 때 OS 키링에서 키를 읽습니다. 세션 잠금이나 디스플레이 절전으로 지금 잠긴 키링은 고장 난 키링과 구분됩니다. bae는 라이브러리를 쓸 수 없다고 알리는 대신 잠김 상태로 표시하고, 잠금이 풀리면 다시 시도합니다. 기기가 키를 잊을 수도 있는데, 그러면 다시 잠금 해제할 때까지 그 기기에서 라이브러리가 잠깁니다.