Nyheter · Säkerhet hos Blackbear
Det vi inte kan läsa
Blackbear är lokalt först. Varje funktion fungerar på din enhet, och som standard finns dina data bara där, utan någon server inblandad.
När du slår på molnsynk börjar våra servrar bära dina data mellan dina enheter och dina människor. Den här serien förklarar vad det betyder för din integritet. Del 1 handlar om kryptering: vad som lämnar din enhet, och varför vi inte kan läsa det. Del 2 är en ärlig redovisning av den metadata som våra servrar faktiskt har. Del 3 handlar om delning och samarbete.
Allt nedan beskriver kod som är i drift, inte avsikter. Där vi nämner en algoritm eller en siffra är det den som körs i produktion i dag.
Krypteringen sker på din enhet
Varje ändring du synkar krypteras innan den når nätverket. Anteckningar, dokument, uppgifter, händelser, dagboksinlägg, kalkylark, canvasar, ljud, versionshistorik. Var och en förseglas med XChaCha20-Poly1305, ett autentiserat chiffer, med en nyckel som aldrig lämnar din enhet oskyddad. Våra servrar tar emot chiffertext och lagrar chiffertext.
Bilder och ljudfiler behandlas likadant: krypterade på din enhet och uppladdade som ogenomskinliga klumpar av data.
Koden som gör allt detta är en enda implementation i Rust, byggd på RustCrypto-ekosystemet och kompilerad till WebAssembly. Appen och Blackbears CLI delar den, byte för byte, och vi testar den mot testdata över språkgränserna så att ingen andra implementation i tysthet kan glida iväg.
Vad det skyddar, och vad det inte skyddar
Kryptering är ett specifikt verktyg, inte ett kraftfält. Först gränserna, sedan detaljerna.
Den här designen skyddar dig mot:
- Ett passivt intrång i våra servrar eller vår databas – stulna lagrade data. Det som läcker är chiffertext och inkapslade nycklar.
- Oss. Våra produktionssystem får aldrig dina innehållsnycklar eller klartext, så ett rättsligt krav på ditt innehåll ger det vi faktiskt har: metadata (del 2) och förseglade klumpar.
Den skyddar dig inte mot:
- En komprometterad, stulen eller upplåst enhet. Din enhet håller dina nycklar; dess säkerhet är golvet som allt annat står på.
- Den som har din lösenfras eller dina tolv återställningsord.
- Vad behöriga mottagare gör med det du delar. Delning bygger på förtroende för människor, inte bara på matematik.
- Metadata om trafiken: vem, när, hur mycket. Det är hela ämnet för del 2.
- Själva appen. På webben hämtas appen från våra servrar vid varje inläsning; på datorn via signerade versioner. Inget krypteringssystem överlever en skadlig app, vem som än levererar den.
- De tillfällen då du själv väljer att skicka data i klartext: när du ber Pax använda en molnmodell, ansluter en extern kalender, exporterar filer eller mejlar en inbjudan. De går till den part du valt, med avsikt, under den partens villkor, inte under vår kryptering.
Nyckelhierarkin
Din lösenfras lämnar aldrig din enhet. Allt växer ur den:
- Din lösenfras körs genom Argon2id, en minneskrävande funktion för nyckelhärledning, inställd på 64 MiB minne, tre pass och fyra språr. Ut kommer din kontonyckel.
- Din kontonyckel kapslar in din valvnyckel: en slumpmässig 256-bitarsnyckel som skapas på din enhet. Det är valvnyckeln som faktiskt krypterar dina data.
- Våra servrar lagrar den inkapslade valvnyckeln, saltet och inställningsparametrarna. Den inkapslade nyckeln är i sig chiffertext. Utan din lösenfras är den brus.
Servern lagrar bara de inkapslade kopiorna: chiffertext som skyddar chiffertext.
Varför omvägen? Den låter dig byta lösenfras utan att kryptera om hela ditt liv, och den gör att återställning kan finnas utan att ytterdörren försvagas.
En varning som hör hemma i skrift: Argon2id gör gissningar dyra, men kan inte göra en svag lösenfras stark. Den inkapslade valvnyckeln är exakt lika stark som lösenfrasen som kapslar in den. Välj en lång.
Återställning är tolv ord
När du ställer in synk ger Blackbear dig en återställningsfras: tolv ord (BIP39) som kodar 128 bitar entropi. Ur dem härleds en fristående nyckel som kapslar in din valvnyckel en andra gång.
Har du glömt lösenfrasen? De tolv orden tar dig in igen. Har du tappat bort båda? Då är dina synkade data borta. Vi kan inte återställa dem, och inget suppsärende kan övertala oss, eftersom det inte finns något på vår sida att återställa. Det är ingen lucka i vår support. Det är designen som håller.
Lägga till en enhet
På en ny enhet anger du din lösenfras. Den härleder din kontonyckel lokalt och packar upp valvnyckeln ur den inkapslade kopia som vår server har. Servern ser aldrig lösenfrasen, och ser aldrig resultatet.
En befintlig upplåst enhet kan också lämna över nyckeln direkt. Den förseglar valvnyckeln till den nya enhetens publika X25519-nyckel och lägger den i en överföringsplats som förstör sig själv efter fem minuter, använd eller inte. En ärlig gräns här: din befintliga enhet får den nya enhetens publika nyckel via ditt inloggade konto, så den här assisterade vägen litar på att vår server vidarebefordrar rätt nyckel för den enhet du valde. Vägen via lösenfrasen kräver inget sådant förtroende.
Eftersom just de här orden är vad en nätfiskare skulle låna, en regel värd att skriva ut: vi kommer aldrig att be om din lösenfras eller dina återställningsord, och vi kommer aldrig att be dig godkänna en överföring till en enhet. Sådana frågor hör bara hemma i en app som du själv har öppnat. Alla andra som frågar är en attack.
Meddelanden
Meddelanden använder egna nycklar, skilda från synken. Varje konto har en meddelandeidentitet i X25519, och varje meddelande härleder en unik nyckel ur ett nytt salt per meddelande via HKDF-SHA256. Meddelanden färdas som förseglade kuvert. Servern vidarebefordrar dem; den kan inte öppna dem. Del 2 går igenom vad kuvertets utsida avslöjar.
En designnotering, rakt ut: unika nycklar per meddelande är inte den roterande ratchet-design som vissa meddelandeappar använder. Om en enhets långsiktiga meddelandenyckel någon gång komprometterades skulle meddelanden som förseglats till den vara i fara. Nycklar per meddelande begränsar skadan; de är inte framåtsekretess, och vi vill hellre att du känner till skillnaden.
Historik utan innehållsfingeravtryck
Versionshistoriken synkas som krypterade ögonblicksbilder, adresserade med id:n som hör till ditt valv. Om du och en främling sparar en identisk fil ser servern två orelaterade id:n: identiskt innehåll kan inte matchas mellan konton. Storlek och tidpunkt syns fortfarande, som i all synktrafik. Det är metadata, och det ämnet tillhör del 2.
Bevisa utan att avslöja
Destruktiva kontoåtgärder kräver ett valvbevis: en signatur från en Ed25519-nyckel som härleds ur din valvnyckel. Du bevisar att du har valvet utan att valvet någonsin färdas. Och när nycklarna har gjort sitt i minnet nollställs de.
Inget av detta är exotiskt. XChaCha20-Poly1305, Argon2id, X25519, Ed25519, HKDF-SHA256: standardiserade, tråkiga och noggrant granskade byggstenar. Det intressanta är disciplinen att använda dem överallt, och att säga högt vad de inte täcker. Det är den disciplinen som resten av serien handlar om.
Läs mer
- Local-first software – essän från Ink & Switch bakom filosofin
- RFC 9106 – specifikationen för Argon2
- XChaCha20-Poly1305 – IETF:s utkast till specifikation
- RFC 7748 – de elliptiska kurvorna bakom X25519
- RFC 8032 – Ed25519-signaturer
- The Password Hashing Competition – där Argon2 vann
Säkerhet hos Blackbear
- 1. Det vi inte kan läsa (du är här)
- 2. Det våra servrar kan se
- 3. Så förblir delning förseglad