Novità · La sicurezza in Blackbear
Quello che non possiamo leggere
Blackbear è local-first. Ogni funzionalità lavora sul tuo dispositivo e, per impostazione, i tuoi dati vivono solo lì, senza nessun server di mezzo.
Quando attivi la sincronizzazione cloud, i nostri server iniziano a portare i tuoi dati tra i tuoi dispositivi e le tue persone. Questa serie spiega cosa significa per la tua privacy. La parte 1 parla di crittografia: cosa lascia il tuo dispositivo e perché non possiamo leggerlo. La parte 2 è un registro onesto dei metadati che i nostri server conservano davvero. La parte 3 parla di condivisione e collaborazione.
Tutto quello che segue descrive codice già rilasciato, non intenzioni. Quando citiamo un algoritmo o un numero, è quello che gira oggi in produzione.
La crittografia avviene sul tuo dispositivo
Ogni modifica che sincronizzi viene cifrata prima di toccare la rete. Note, documenti, attività, eventi, pagine di diario, fogli di calcolo, lavagne, audio, cronologia versioni. Ognuna viene sigillata con XChaCha20-Poly1305, un cifrario autenticato, con una chiave che non lascia mai il tuo dispositivo senza protezione. I nostri server ricevono testo cifrato e conservano testo cifrato.
Immagini e file audio ricevono lo stesso trattamento: cifrati sul tuo dispositivo, caricati come blocchi di dati illeggibili.
Il codice che fa tutto questo è un’unica implementazione in Rust basata sull’ecosistema RustCrypto, compilata in WebAssembly. L’app e la CLI di Blackbear la condividono byte per byte, e la verifichiamo con casi di test comuni a più linguaggi, così nessuna seconda implementazione può allontanarsene in silenzio.
Cosa protegge, e cosa no
La crittografia è uno strumento preciso, non un campo di forza. Prima dei dettagli, i confini.
Questo design ti protegge da:
- Una violazione passiva dei nostri server o del nostro database, cioè il furto dei dati conservati. Quello che trapela è testo cifrato e chiavi avvolte.
- Noi. I nostri sistemi di produzione non ricevono mai le chiavi dei tuoi contenuti né il testo in chiaro, quindi una richiesta legale sui tuoi contenuti ottiene ciò che abbiamo davvero: metadati (parte 2) e blocchi sigillati.
Non ti protegge da:
- Un dispositivo compromesso, rubato o sbloccato. Il tuo dispositivo custodisce le tue chiavi; la sua sicurezza è il pavimento su cui poggia tutto il resto.
- Chiunque conosca la tua passphrase o le tue dodici parole di recupero.
- Quello che i destinatari autorizzati fanno con ciò che condividi. Condividere è fidarsi delle persone, non solo della matematica.
- I metadati del traffico: chi, quando, quanto. È l’argomento di tutta la parte 2.
- L’app stessa. Sul web l’app arriva dai nostri server a ogni caricamento; su desktop, tramite versioni firmate. Nessuno schema di crittografia sopravvive a un’app malevola, chiunque la distribuisca.
- I momenti in cui scegli di mandare dati all’esterno in chiaro: chiedere a Pax di usare un modello cloud, collegare un calendario esterno, esportare file, inviare un invito via email. Questi dati viaggiano verso chi hai scelto, di proposito, secondo le sue regole e non sotto la nostra crittografia.
La gerarchia delle chiavi
La tua passphrase non lascia mai il tuo dispositivo. Tutto nasce da lì:
- La tua passphrase passa attraverso Argon2id, una funzione di derivazione delle chiavi ad alto uso di memoria, regolata su 64 MiB di memoria, tre passaggi e quattro corsie. Ne esce la tua Chiave dell’account.
- La Chiave dell’account avvolge la tua Chiave della cassaforte: una chiave casuale a 256 bit generata sul tuo dispositivo. È la Chiave della cassaforte a cifrare davvero i tuoi dati.
- I nostri server conservano la Chiave della cassaforte avvolta, il sale e i parametri di regolazione. La chiave avvolta è a sua volta testo cifrato. Senza la tua passphrase è solo rumore.
Il server conserva solo le copie avvolte: testo cifrato che protegge testo cifrato.
Perché questo passaggio in più? Ti permette di cambiare passphrase senza dover cifrare di nuovo tutta la tua vita, e permette al recupero di esistere senza indebolire la porta d’ingresso.
Un avvertimento che vale la pena mettere per iscritto: Argon2id rende costoso indovinare, ma non può rendere forte una passphrase debole. La Chiave della cassaforte avvolta è esattamente forte quanto la passphrase che la avvolge. Scegline una lunga.
Il recupero sta in dodici parole
Quando configuri la sincronizzazione, Blackbear ti dà una frase di recupero: dodici parole (BIP39) che codificano 128 bit di entropia. Da queste si ricava una chiave indipendente che avvolge una seconda volta la tua Chiave della cassaforte.
Hai perso la passphrase? Le dodici parole ti fanno rientrare. Le hai perse entrambe? I tuoi dati sincronizzati sono perduti. Non possiamo reimpostarli, e nessuna richiesta di assistenza può convincerci a farlo, perché dalla nostra parte non c’è niente da reimpostare. Non è una lacuna della nostra assistenza. È il design che regge.
Aggiungere un dispositivo
Su un nuovo dispositivo inserisci la tua passphrase. Da questa si ricava in locale la tua Chiave dell’account, che sblocca la Chiave della cassaforte dalla copia avvolta conservata sul nostro server. Il server non vede mai la passphrase, e non vede mai il risultato.
Anche un dispositivo esistente e sbloccato può passare direttamente la chiave. Sigilla la Chiave della cassaforte con la chiave pubblica X25519 del nuovo dispositivo e la deposita in uno spazio di trasferimento che si autodistrugge dopo cinque minuti, usato o no. Un confine onesto: il dispositivo esistente conosce la chiave pubblica del nuovo tramite il tuo account connesso, quindi questo percorso assistito si fida del nostro server per inoltrare la chiave giusta per il dispositivo che hai scelto. Il percorso con la passphrase non richiede questa fiducia.
Poiché questo vocabolario è proprio quello che userebbe chi tenta un phishing, una regola che vale la pena mettere per iscritto: non ti chiederemo mai la passphrase o le parole di recupero, e non ti chiederemo mai di approvare un trasferimento a un dispositivo. Quelle richieste esistono solo dentro un’app che hai aperto tu. Chiunque altro te le chieda ti sta attaccando.
Messaggi
I messaggi usano chiavi proprie, separate da quelle della sincronizzazione. Ogni account ha un’identità di messaggistica X25519, e ogni messaggio ricava una chiave unica da un sale nuovo per ciascun messaggio tramite HKDF-SHA256. I messaggi viaggiano come buste sigillate. Il server le inoltra, ma non può aprirle. La parte 2 spiega cosa rivela l’esterno della busta.
Una nota di progettazione, detta chiaramente: chiavi uniche per ogni messaggio non sono il sistema a ratchet rotante che usano alcune app di messaggistica. Se la chiave di messaggistica a lungo termine di un dispositivo venisse compromessa, i messaggi sigillati per quella chiave sarebbero a rischio. Le chiavi per messaggio limitano i danni, ma non sono forward secrecy, e preferiamo che tu conosca la differenza.
Cronologia senza impronte dei contenuti
La cronologia versioni si sincronizza come istantanee cifrate, indirizzate da ID validi solo all’interno della tua cassaforte. Se tu e uno sconosciuto salvate un file identico, il server vede due ID senza alcun legame: contenuti identici non si possono abbinare tra account diversi. Dimensioni e tempi restano visibili, come per tutto il traffico di sincronizzazione. Sono metadati, e l’argomento è della parte 2.
Dimostrare senza rivelare
Le operazioni distruttive sull’account richiedono una prova della cassaforte: una firma con una chiave Ed25519 ricavata dalla tua Chiave della cassaforte. Dimostri di avere la cassaforte senza che la cassaforte viaggi mai. E quando le chiavi hanno finito il loro lavoro in memoria, vengono azzerate.
Niente di tutto questo è esotico. XChaCha20-Poly1305, Argon2id, X25519, Ed25519, HKDF-SHA256: primitive standard, noiose, esaminate a fondo. La parte interessante è la disciplina di applicarle ovunque, e di dire ad alta voce cosa non coprono. È di questa disciplina che parla il resto della serie.
Per approfondire
- Local-first software — il saggio di Ink & Switch alla base di questa filosofia
- RFC 9106 — la specifica di Argon2
- XChaCha20-Poly1305 — la bozza di specifica dell’IETF
- RFC 7748 — le curve ellittiche alla base di X25519
- RFC 8032 — le firme Ed25519
- The Password Hashing Competition — la gara vinta da Argon2
La sicurezza in Blackbear
- 1. Quello che non possiamo leggere (sei qui)
- 2. Cosa vedono i nostri server
- 3. Condividere senza rompere il sigillo