Gå til innhold

Sikkerhet og databeskyttelse

Denne siden dokumenterer identifiserte sikkerhetsrisikoer i Nettvakten og hvilke tekniske tiltak som er valgt for å beskytte brukerdata mot lekkasje, uautorisert tilgang og misbruk.


Oversikt over trusselmodell

Trussel Risiko Tiltak
Uautorisert tilgang til appen Barn endrer innstillinger eller avinstallerer PIN-kode med brute-force-beskyttelse
Datalekkasje fra enhet Skjermbilder eller rapporter på avveie AES-256-GCM kryptering av all lokal lagring
Avlytting av nettverkstrafikk Man-in-the-middle ved sending til AI TLS 1.2+ med sertifikatpinning
API-nøkler på avveie Tilgang til AI-tjenester DPAPI-kryptering (PC), Android Keystore (mobil)
Rapporter fanget opp under sending Sensitiv informasjon i rapporter Ende-til-ende-kryptering (RSA + AES)
Uautorisert tilgang til brukerkonto Noen logger inn som deg OAuth (Google/Vipps), JWT med utløp, sesjonsrevokering
Misbruk av chatbot Tømme token-kvote Rate limiting per bruker/IP
Databasen kompromittert (Android) Sensitiv data i lokal database SQLCipher med PBKDF2-avledet nøkkel
Gjenoppretting av slettede filer Foreldede skjermbilder hentes fra disk Sikker sletting med overskriving
For mye data lagret over tid Brudd på dataminimeringsprinsippet Automatisk sletting etter konfigurert periode
Personopplysninger sendt til AI OCR-tekst kan inneholde navn, e-post, tlf. Anonymisering av PII før AI-analyse

Lettfattelige forklaringer

Kryptering i hvile (data lagret lokalt)

PC — AES-256-GCM med DPAPI-beskyttet nøkkel

All sensitiv data som lagres lokalt på PC krypteres med AES-256-GCM. Krypteringsnøkkelen beskyttes av Windows DPAPI, som betyr at kun den innloggede Windows-brukeren kan dekryptere dataene -- selv ikke en administrator på en annen brukerkonto.

Hva som krypteres:

  • Skjermbilder (under analyse)
  • Flaggede skjermbilder og rapporter
  • AI-treningslogg
  • Telemetridata

Hva som beskyttes med DPAPI:

  • AI API-nøkkel
  • OAuth-tokens (autentiseringstokens fra Google/Vipps)
  • PIN-kode (hashet med PBKDF2-SHA256, 210 000 iterasjoner)

Android — SQLCipher + Android Keystore

Den lokale databasen på Android krypteres med SQLCipher. Krypteringsnøkkelen avledes via PBKDF2-SHA256 (210 000 iterasjoner) og lagres i Android Keystore via EncryptedSharedPreferences.

Hva som beskyttes:

  • Alle varsler og flaggede hendelser i Room-databasen
  • Offline-kø med ventende varsler
  • Fraselister (kryptert med AES-256-GCM i APK-en)
  • API-nøkler (Android Keystore)

Kryptering under transport (data i bevegelse)

TLS med sertifikatpinning

All nettverkskommunikasjon bruker TLS 1.2 eller nyere. I tillegg bruker Nettvakten sertifikatpinning (SPKI SHA-256) mot Anthropics API for å forhindre man-in-the-middle-angrep, selv om en sertifikatautoritet skulle bli kompromittert.

PC: Egendefinert SSL-kontekst som validerer sertifikatets fingeravtrykk mot en fastsatt liste.

Android: Konfigurert via network_security_config.xml med SHA-256-pinner og utløpsdato. Klartekst-trafikk (HTTP uten TLS) er blokkert for alle domener.

Ende-til-ende-kryptering av rapporter

Rapporter som sendes til Nettvaktens server krypteres med hybrid kryptering slik at kun serveren kan lese innholdet:

  1. En tilfeldig AES-256 sesjonsnøkkel genereres
  2. Rapporten krypteres med AES-256-GCM
  3. Sesjonsnøkkelen krypteres med Nettvaktens RSA-2048 offentlige nøkkel
  4. Kun serveren (med privat nøkkel) kan dekryptere

Samme algoritme brukes på PC og Android for konsistens.

E-postvarsler via backend

E-postvarsler sendes via Nettvaktens backend — ikke direkte fra brukerens enhet. Brukeren oppgir kun mottaker-epost; ingen SMTP-konfigurasjon eller e-postpassord kreves.

Ingen sensitiv informasjon i e-post

E-postvarsler inneholder aldri detaljer om hva som ble oppdaget. E-posten er kun en kort beskjed om at noe krever oppmerksomhet, med oppfordring om å sjekke Nettvakten Foresatte Dashboard (mobilappen) eller nettvakten.eu (brukerportalen). Dette sikrer at sensitiv informasjon aldri sendes via e-post, som ikke er ende-til-ende-kryptert.

Egenskap Beskrivelse
Avsender varsler@nettvakten.no via Nettvaktens server
Autentisering Forespørselen krever gyldig auth token (JWT)
Transport HTTPS med sertifikatpinning til Nettvakten API
Innhold Kun beskjed om at noe er flagget eller at en rapport er klar — aldri sensitiv informasjon. Detaljer ses i dashboardet
Feilhåndtering Varsler som ikke kan sendes lagres i lokal offline-kø og sendes automatisk når nett er tilgjengelig

Denne løsningen fjerner behovet for å lagre e-postpassord på enheten og eliminerer risikoen for at brukerens e-postkonto kompromitteres via appen.


Autentisering og tilgangskontroll

PIN-kode (lokal beskyttelse)

Egenskap PC Android
Lengde 4 siffer 4 siffer
Hashing PBKDF2-SHA256 (210 000 iterasjoner) PBKDF2-SHA256 (210 000 iterasjoner)
Brute-force-beskyttelse Maks 5 forsøk, deretter 5 min lockout Maks 5 forsøk, deretter 5 min lockout
Tilbakestilling Via engangskode fra nettvakten.eu Via engangskode til registrert e-post

PIN-koden beskytter mot at barnet endrer innstillinger, stopper overvåking eller avinstallerer appen.

Brukerkonto (backend)

  • Innlogging: OAuth via Google Sign-In eller Vipps Login — ingen passord lagres lokalt
  • Token-aktivering: PC-installeren kan lastes ned fra brukerens dashboard med en innbakt aktiveringstoken. Brukeren verifiserer med sin PIN-kode, og tokenet byttes mot en JWT-sesjon
  • Sesjoner: JWT-token (HS256) med 72 timers utløp, lagret som SHA-256-hash i database — token kan revokeres ved utlogging
  • Enhetsregistrering: 6-sifret engangskode, gyldig i 10 minutter, maks 3 koder per time

Innloggingsmetoder

  • Google Sign-In (OAuth 2.0 med PKCE)
  • Vipps Login (OAuth 2.0)
  • PIN-verifisering via aktiveringstoken (fra dashboard-nedlasting)

Rate limiting

Tjeneste Gratis bruker Betalende bruker
Chatbot 10 spørsmål/time (per IP) 50 spørsmål/time (per bruker-ID)
Aktiveringskoder 3 per time 3 per time
PIN-tilbakestilling Via innlogget konto Via innlogget konto

Rate limiting forhindrer misbruk av API-ressurser og token-forbruk.


Dataminimering og livssyklus

Automatisk sletting

Datatype Standard oppbevaring Konfigurerbar
Vanlige skjermbilder 24 timer Ja
Flaggede skjermbilder 30 dager Ja (7-90 dager)
AI-treningslogg 90 dager Nei
Telemetridata 30 dager Nei
Relasjonslogg 30 dager Nei
Løste varsler 7 dager Nei

Sikker sletting

Når filer slettes fra Nettvakten, overskrives innholdet med tilfeldige data før filen fjernes fra filsystemet. Dette forhindrer gjenoppretting med verktøy for datarekonstruksjon.

Anonymisering før AI-analyse

Før OCR-tekst sendes til AI for vurdering, fjernes:

  • E-postadresser
  • Telefonnumre
  • Personnumre (norsk format)

Teksten trunkeres også til maks 2000-3000 tegn for å begrense datamengden.

Kredensialfiltrering (passord og brukernavn)

Nettvakten har innebygd beskyttelse mot å fange opp innloggingsdata:

Mekanisme Hva den gjør
Maskert-tegn-deteksjon Gjenkjenner passordfelt (●●●●, ••••, ****) og forkaster dem
Innloggingsskjerm-deteksjon Gjenkjenner login-skjermer (passord/brukernavn-felt, «Logg inn»-knapper) og ekskluderer dem fra analyse
Kredensial-mønsterfilter Filtrerer ut tekst som matcher typiske passord-mønstre (blanding av store/små bokstaver, tall og spesialtegn)
Aldri lagret Filtrert tekst skrives aldri til disk, sendes aldri til server, og inkluderes aldri i rapporter

Resultat: Foreldre kan være trygge på at barnets passord og brukernavn aldri fanges opp eller lagres av Nettvakten.

Slett alle mine data

Brukeren kan når som helst slette alle data via innstillingene. Dette fjerner:

  • Alle skjermbilder og rapporter
  • Konfigurasjon og PIN-kode
  • AI-treningslogg og profiler
  • Relasjonsdata og telemetri
  • Offline varselkø

Infrastruktur

Backend (Cloudflare Workers + D1)

  • SQL-injeksjon: Forhindret med parameteriserte spørringer (prepared statements)
  • CORS: Strengt hviteliste-basert -- kun nettvakten.eu og godkjente domener
  • Hemmeligheter: API-nøkler og JWT-hemmelighet lagres som Cloudflare Secrets (aldri i kode)
  • Database: Cloudflare D1 med bruker-isolasjon via foreign keys

Android APK

  • Fraselister: Kryptert i APK med AES-256-GCM for å forhindre uttrekking
  • Debuggbar: Satt til false i release-bygg
  • Eksporterte komponenter: Ingen tjenester er eksportert -- kun systemet kan binde til dem
  • Nettverkssikkerhet: Klartekst blokkert, sertifikatpinning aktiv