Arkitektur

Hvordan Fluera beskytter din notesbog.

Denne side beskriver sikkerhedsmodellen på det niveau, en teknisk læser — security officer, CISO på et universitet, nysgerrig udvikler — forventer. For det ikke-tekniske resumé, begynd på /da/security.

Threat Model

Vi antager tyveri af enheden, opsnapning på netværket og utilsigtet eksponering via backup eller cloud-sync. Vi antager, at brugerens credentials kan kompromitteres. Vi antager ikke statslige aktører med fysisk adgang til ulåste enheder — Fluera er ikke et hemmeligholdelsesværktøj, det er et læringsværktøj.

Inden for den model gælder tre garantier:

  • Lokale data er ulæselige uden nøglen. En stjålet enhed producerer en krypteret blob.
  • Synkroniserede data beskyttes under transport og i hvile på EU-infrastruktur. Cloud-sync er ikke end-to-end-krypteret: som dataansvarlig kan Fluera teknisk tilgå synkroniseret indhold. Vi sælger det aldrig og bruger det aldrig til annoncering.
  • Telemetri er samtykkebaseret og afidentificeret. Analytics kan ikke forbinde en bruger med dennes indhold, ikke engang i tilfælde af et fuldt breach.

I hvile: SQLCipher, AES-256

Hver notesbog i Fluera lever i en lokal SQLite-database krypteret med SQLCipher — en bredt revideret udvidelse, der transparent krypterer hver side af databasen med AES-256-CBC og kontrollerer integriteten pr. side med HMAC-SHA512.

Den lokale databasenøgle er en tilfældig 256-bit-nøgle, som Fluera genererer og gemmer i platformens sikre nøglelager — Keychain på iOS/macOS, Keystore på Android, DPAPI på Windows og libsecret på Linux. Den er hverken din kontoadgangskode eller en adgangsfrase til cloud-sync, og den lokale databasenøgle sendes aldrig til Flueras servere.

Under transport: TLS 1.3

Al netværkstrafik kører over TLS 1.3 med moderne cipher suites.

Synkronisering mellem enheder

Cloud-sync, når den er aktiveret, sender dine notesbøger over TLS til vores sync-tjeneste (Supabase, region EU, eu-north-1), hvor de opbevares krypteret i hvile på infrastrukturniveau. Synkroniseringen er ikke end-to-end-krypteret: data lagres serverlæsbart (gzip-komprimeret), og Fluera kan som dataansvarlig teknisk tilgå indholdet. Vi sælger det aldrig og bruger det aldrig til annoncering. Synkronisering er opt-in pr. notesbog — du kan holde nogle notesbøger lokalt, mens du synkroniserer andre.

Vil du have, at indholdet aldrig forlader din enhed serverlæsbart, så lad være med at aktivere cloud-sync for den pågældende notesbog. Den lokale database forbliver krypteret med SQLCipher. En adgangskodebeskyttet .fluera-eksport krypteres separat med AES-256-GCM; eksportadgangskoden beskytter kun filen og har intet med cloud-sync at gøre.

P2P-samarbejde: direkte, krypteret

Realtidssamarbejdet bruger WebRTC DataChannel med DTLS-SRTP-kryptering. Supabase Realtime fungerer kun som signaling-broker — opbygning af forbindelsen — ikke som relay for selve canvas-trafikken. Efter håndtrykket flyder canvas-redigeringer peer-to-peer. Serveren ser dem ikke.

Ved restriktive NAT'er går trafikken via TURN; i det tilfælde ser relay'et kun krypterede DTLS-pakker, som det ikke kan dekryptere.

AI-kald: via proxy, aldrig direkte

Kaldene til Google Gemini-modeller (Socratic Mode, Ghost Map, LaTeX OCR, Exam Session) serveres via Google Vertex AI og behandles i EU (europe-west4 NL / europe-west1 BE). De går via en proxy, der holder credentials på serveren. Klient-enhederne ser aldrig nøglen. Proxyen håndhæver rate-limits pr. plan og logger kaldenes varigheder til faktureringsformål — aldrig canvas-indholdet.

Hvis du deaktiverer AI-funktionerne under Indstillinger → Privatliv, sendes intet canvas-indhold til Gemini, heller ikke som fallback for on-device-OCR.

Telemetri: opt-in, hashet, allowlistet

Produkt-analytics er deaktiveret som standard. Når den er aktiveret, er hændelserne begrænset til en server-side whitelist (start/slut på session, kald af en funktion, varighed af et AI-kald — aldrig indhold). Bruger-ID'et hashes på enheden med SHA-256; klartekst-ID'et forlader aldrig klienten. Hændelserne opbevares i 180 dage og aggregeres eller slettes derefter.

Audit-trail (institutionelle konti)

Enhver adgang til delte notesbøger — hvem, fra hvilken enhed, hvornår — skrives til en append-only audit-trail. Administratorer kan eksportere trailet som CSV eller JSON til compliance-kontroller. Trailet er write-once: fjernelse kræver en dokumenteret begrundelse og logges selv.

Datagendannelse

Synkroniserede notesbøger er knyttet til din konto: efter den normale kontogendannelse kan du logge ind igen og hente dem på en ny enhed. Der findes ingen separat adgangsfrase til cloud-sync, som du skal huske. Kontogendannelse kan ikke genskabe en notesbog, der kun lå lokalt, hvis enhedens data er slettet; aktivér sync for de notesbøger, du vil kunne gendanne på tværs af enheder.

Responsible disclosure

Sikkerhedsforskere er velkomne. Rapportér sårbarheder til lorenco@fluera.dev med PGP-kryptering (nøgle offentliggjort på GitHub-profilen). Vi svarer inden for 24 timer, patcher kritiske problemer inden for 72 og nævner indberettere i Hall of Fame, medmindre anonymitet ønskes.

Scope: Fluera-appen (alle platforme), sync-tjenesten, AI-proxyen og denne marketing-side. Uden for scope: tredjeparter (Supabase, Google, Apple, Sentry, RevenueCat) — rapportér der til de respektive leverandører.

Eksterne audits

Fluera har i øjeblikket hverken SOC-2- eller ISO-27001-certificeringer. De er på enterprise-roadmappen og annonceres offentligt, når de afsluttes. Vi foretrækker ikke at deklarere kontroller, vi ikke kan verificere uafhængigt.

Listen over underdatabehandlere er offentlig og opdateret. Databehandleraftalen er tilgængelig på anmodning hos lorenco@fluera.dev.