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.
De sleutels
Link naar deze sectie| Sleutel | Wat hij doet |
|---|---|
| De store-sleutel | versleutelt de bibliotheek en haar lidmaatschapsrecords |
| De kringsleutel van elke persoon | versleutelt wat die persoon privé houdt: zijn privé-afspeelgeschiedenis en afspeellijsten |
| De sleutel van elk bestand | versleutelt één bestand, en reist alleen mee in de versleutelde wijzigingen van zijn rij |
| Het ondertekeningssleutelpaar van een persoon | ondertekent elke wijziging die zijn apparaten sturen |
| Het verzegelingssleutelpaar van een persoon | opent 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.
Rotatie
Link naar deze sectieEen 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 sectieElk 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 sectieAantal 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.
De sleutelbos
Link naar deze sectieEen 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.