Naar inhoud springen

Encryptie

Alles wat bae in een cloud-home zet wordt versleuteld voordat het het apparaat verlaat; er is geen onversleutelde modus. bae implementeert geen eigen cryptografie: het hele schema is van coven, en deze pagina beschrijft hoe bae het gebruikt.

SleutelWat hij doet
De store-sleutelversleutelt de bibliotheek en haar lidmaatschapsrecords
De kringsleutel van elke persoonversleutelt wat die persoon privé houdt: zijn privé-afspeelgeschiedenis en afspeellijsten
De sleutel van elk bestandversleutelt één bestand, en reist alleen mee in de versleutelde wijzigingen van zijn rij
Het ondertekeningssleutelpaar van een persoonondertekent elke wijziging die zijn apparaten sturen
Het verzegelingssleutelpaar van een persoonopent sleutels die voor die persoon zijn verzegeld

De store-sleutel is willekeurig en wordt gemaakt wanneer de bibliotheek haar cloud-home krijgt. De sleutelparen van een persoon worden door al zijn apparaten gedeeld. Privésleutels en bibliotheeksleutels staan in de OS-sleutelbos, nooit in een bestand of de database. Ze bereiken een apparaat op twee manieren, beide beschreven in Identiteit en lidmaatschap: een herstelcode draagt de eigen sleutelparen van een persoon, en een beheerder die een uitnodiging goedkeurt verzegelt de store-sleutels voor de verzegelingssleutel van de nieuwe persoon.

Een sleutel wordt nooit ter plekke gewijzigd; er komt een nieuwe bij. Nadat een persoon is verwijderd, voegt het apparaat van een overgebleven lid een nieuwe store-sleutel toe, en een nieuwe sleutel voor elke kring waar hij in zat, voordat het daar meer data schrijft: alles wat daarna wordt geschreven is onleesbaar voor hem, terwijl de overgebleven leden elke oudere sleutel houden en de hele geschiedenis kunnen lezen. Eén apparaat verwijderen roteert niets, omdat de andere apparaten van die persoon zijn sleutels delen; vanaf de verwijdering telt niet meer wat dat apparaat stuurt.

Wat wordt afgesloten

Link naar deze sectie

Elk object in de home: wijzigingen, snapshots, lidmaatschapsrecords en bestanden. Inhoud wordt versleuteld met XChaCha20-Poly1305, elke wijziging wordt ondertekend met Ed25519, en sleutels worden voor mensen verzegeld met X25519-sealed boxes. Bestanden worden versleuteld in chunks van 64 KiB, elk afzonderlijk geauthenticeerd en aan zijn positie gebonden, zodat een chunk niet ongemerkt kan worden gewijzigd, verwisseld of herschikt. Chunking is waarom streamen werkt: de speler kan precies de chunks ontsleutelen die hij ophaalt.

Wat de provider kan zien

Link naar deze sectie

Aantal objecten, objectgroottes, uploadtiming, welk account elk object schrijft en welk apparaat elk bestand en snapshot uploadde, omdat hun paden het apparaat noemen. Geen namen, geen metadata, geen audio, geen artwork. Bestanden staan onder willekeurige namen, nooit een hash van hun inhoud. Er is geen server-side herstel: als iedereen elk apparaat en elke herstelcode verliest, is de bibliotheek verloren, wat het ontwerp doet wat het moet doen.

Een bibliotheek openen leest haar sleutels uit de OS-sleutelbos. Een sleutelbos die op dat moment vergrendeld is, door een vergrendelde sessie of een slapend scherm, wordt onderscheiden van een kapotte: bae toont de bibliotheek als vergrendeld en probeert het na ontgrendelen opnieuw, in plaats van de bibliotheek onbruikbaar te melden. Een apparaat kan de sleutel ook vergeten, wat de bibliotheek op dat apparaat vergrendelt totdat ze weer wordt ontgrendeld.