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
- Hva er kryptering? — Store norske leksikon
- Ende-til-ende-kryptering forklart — NordVPN
- Trygg nettsurfing og HTTPS — NorSIS
- GDPR og lagringstid — Datatilsynet
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:
- En tilfeldig AES-256 sesjonsnøkkel genereres
- Rapporten krypteres med AES-256-GCM
- Sesjonsnøkkelen krypteres med Nettvaktens RSA-2048 offentlige nøkkel
- 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
falsei release-bygg - Eksporterte komponenter: Ingen tjenester er eksportert -- kun systemet kan binde til dem
- Nettverkssikkerhet: Klartekst blokkert, sertifikatpinning aktiv