Architettura

Come Fluera protegge il tuo quaderno.

Questa pagina descrive il modello di sicurezza al livello che un lettore tecnico — security officer, CISO di ateneo, sviluppatore curioso — si aspetta. Per la sintesi non-tecnica, parti da /it/security.

Threat model

Assumiamo furto del dispositivo, intercettazione di rete ed esposizione accidentale via backup o cloud sync. Assumiamo che le credenziali dell'utente possano essere compromesse. Non assumiamo avversari di livello statale con accesso fisico a dispositivi sbloccati — Fluera non è uno strumento di segretezza, è uno strumento di studio.

Dentro quel modello, tre garanzie:

  • I dati locali sono illeggibili senza la chiave. Un dispositivo rubato produce un blob cifrato.
  • I dati sincronizzati sono cifrati in transito (TLS) e a riposo sull'infrastruttura UE. Il sync non è end-to-end: come titolari del trattamento possiamo tecnicamente accedere ai contenuti sincronizzati, ma non li vendiamo né li usiamo per pubblicità.
  • La telemetria è consensuale e de-identificata. Gli analytics non possono collegare un utente ai suoi contenuti nemmeno in caso di breach completo.

At-rest: SQLCipher, AES-256

Ogni quaderno Fluera vive in un database SQLite locale cifrato con SQLCipher — un'estensione ampiamente verificata che cifra trasparentemente ogni pagina del database con AES-256-CBC e integrity check HMAC-SHA512 per pagina.

La chiave del database locale è una chiave casuale a 256 bit generata da Fluera e custodita nell'archivio sicuro della piattaforma — Keychain su iOS/macOS, Keystore su Android, DPAPI su Windows e libsecret su Linux. Non è la password dell'account né una passphrase del cloud sync, e la chiave del database locale non viene inviata ai server Fluera.

In transito: TLS 1.3

Tutto il traffico di rete è TLS 1.3 con cifrari moderni.

Sync tra dispositivi: cifrato in transito e a riposo

Il cloud sync, quando attivato, trasmette i quaderni al server di sync (Supabase, regione UE, eu-north-1) cifrati in transito tramite TLS e cifrati a riposo a livello di infrastruttura. Il sync non è end-to-end: il contenuto è leggibile lato server e, come titolari del trattamento, possiamo tecnicamente accedervi. Non vendiamo mai i tuoi contenuti né li usiamo per pubblicità. Il sync è opt-in per quaderno — puoi tenerne alcuni solo locali mentre ne sincronizzi altri.

Collaborazione P2P: diretta, cifrata

La collaborazione real-time usa WebRTC DataChannel con cifratura DTLS-SRTP. Supabase Realtime fa solo da broker di signaling — setup della connessione — non da relay per il traffico vero del canvas. Dopo l'handshake, gli edit del canvas fluiscono peer-to-peer. Il server non li vede.

Su NAT restrittivi passiamo via TURN, nel qual caso il relay vede solo pacchetti DTLS cifrati che non può decrittare.

Chiamate AI: via proxy, mai dirette

Le chiamate ai modelli Google Gemini (Socratic Mode, Ghost Map, LaTeX OCR, Exam Session) sono servite tramite Google Vertex AI ed elaborate nell'UE (europe-west4 NL / europe-west1 BE). Passano attraverso un proxy che custodisce le credenziali lato server: i dispositivi client non vedono mai la chiave. Il proxy applica i rate limit per piano e logga le durate delle chiamate per la contabilità — mai il contenuto del canvas.

Se disattivi le funzioni AI in Impostazioni → Privacy, nessun contenuto del canvas viene inviato a Gemini, nemmeno per fallback OCR on-device.

Telemetria: opt-in, hashata, allowlisted

Gli analytics di prodotto sono disattivati di default. Quando attivati, gli eventi sono limitati a una whitelist lato server (inizio/fine sessione, invocazione feature, durata chiamata AI — mai contenuto). L'ID utente è hashato SHA-256 sul dispositivo; l'ID in chiaro non lascia mai il client. Gli eventi sono conservati 180 giorni, poi aggregati o eliminati.

Audit log (account Istituzionali)

Ogni accesso ai quaderni condivisi — chi, da quale dispositivo, quando — viene scritto in un audit log append-only. Gli amministratori possono esportare il log in CSV o JSON per i controlli di compliance. Il log è write-once: la cancellazione richiede una motivazione documentata ed è a sua volta loggata.

Recupero dei dati

I quaderni sincronizzati sono associati al tuo account: dopo il normale flusso di recupero dell'account, accedi di nuovo per scaricarli su un nuovo dispositivo. Non esiste una passphrase separata del cloud sync da ricordare o perdere. Il recupero dell'account non può ricostruire un quaderno rimasto solo locale se i dati del dispositivo sono stati cancellati; attiva il sync per i quaderni che vuoi poter recuperare su altri dispositivi.

Responsible disclosure

I security researcher sono benvenuti. Segnala le vulnerabilità a lorenco@fluera.dev con cifratura PGP (chiave pubblicata sul profilo GitHub). Riceviamo riscontro entro 24 ore, patch dei problemi critici entro 72, e citiamo chi segnala nella hall of fame salvo richiesta di anonimato.

Scope: l'app Fluera (tutte le piattaforme), il servizio di sync, il proxy AI e questo sito marketing. Fuori scope: servizi terzi (Supabase, Google, Apple, Sentry, RevenueCat) — segnala ai vendor corrispondenti.

Valutazioni esterne

Fluera non ha attualmente certificazioni SOC 2 o ISO 27001. Sono sulla roadmap enterprise e saranno annunciate pubblicamente a completamento. Preferiamo non dichiarare controlli che non abbiamo verificato in modo indipendente.

La lista sub-processor è pubblica e aggiornata. Il Data Processing Agreement è disponibile su richiesta a lorenco@fluera.dev.