Protokoller og brannmurer
Sikker e-post, TLS, IPsec, trådløs sikkerhet og brannmurer — fra teori til praktiske sikkerhetsprotokoller.
Sikker e-post
Tre mål: konfidensialitet, integritet og autentisering — og Alice bruker tre forskjellige nøkler for å oppnå dem alle.
E-post er det perfekte eksempelet for å sette sammen alle «puslespillbitene» vi har lært så langt. Tenk deg at Alice vil sende en e-post til Bob som er (1) konfidensiell — bare Bob kan lese den, (2) autentisert — Bob kan verifisere at det er Alice som har skrevet den, og (3) integritetssjekket — innholdet kan ikke endres underveis. La oss bygge opp løsningen trinn for trinn.
Steg 1: Bare konfidensialitet
Alice kunne kryptere hele meldingen med Bobs offentlige nøkkel, men det er altfor tregt for en lang e-post. I stedet gjør hun noe smart:
- Generer en tilfeldig symmetrisk sesjonsnøkkel KS
- Krypter meldingen med KS (raskt, med f.eks. AES)
- Krypter KS med Bobs offentlige nøkkel KB+ (tregt, men KS er kort)
- Send både KS(m) og KB+(KS) til Bob
Bob bruker sin private nøkkel til å dekryptere KS, og bruker deretter KS til å dekryptere selve meldingen. Dette er hybridkryptering — det beste fra begge verdener.
Steg 2: Bare integritet og autentisering
Noen ganger trenger ikke meldingen å være hemmelig, men mottakeren skal kunne verifisere hvem som sendte den. Alice beregner H(m), signerer hashen med sin egen private nøkkel KA-, og sender både meldingen (i klartekst) og signaturen KA-(H(m)). Bob verifiserer med Alices offentlige nøkkel.
Steg 3: Alt sammen
For full sikkerhet kombinerer Alice de to teknikkene. Hun bruker tre nøkler:
1. KA- (Alices private nøkkel) — signerer H(m) for integritet og autentisering.
2. KS (tilfeldig symmetrisk sesjonsnøkkel) — krypterer meldingen + signaturen for konfidensialitet.
3. KB+ (Bobs offentlige nøkkel) — krypterer KS slik at bare Bob kan dekryptere.
Bob gjør de komplementære operasjonene i omvendt rekkefølge: dekrypter KS med sin private nøkkel, dekrypter meldingen med KS, sjekk signaturen med Alices offentlige nøkkel.
Sikker e-post fra Alice til Bob (kap. 8.5.1)
KB+(KS) — sesjonsnøkkel kryptert for Bob
KS(m, KA-(H(m))) — melding + signatur, alt med KS
Byggeklosser: symmetrisk KS for hastighet, KB+ for konfidensialitet, KA- for digital signatur på H(m).
TLS: sikring av TCP-forbindelser
Det mest utbredte sikkerhetslaget på Internett — det som gjør HTTPS mulig.
Transport Layer Security (TLS) er protokollen som legger et sikkerhetslag oppå TCP. Når du ser hengelåsen i nettleseren og «https» i URL-en, er det TLS som arbeider under panseret. TLS gir de tre klassiske egenskapene — konfidensialitet (via symmetrisk kryptering), integritet (via kryptografisk hashing) og autentisering (via offentlig nøkkelkryptografi og sertifikater) — med alle teknikkene vi allerede har lært.
Hvor bor TLS i protokollstabelen?
TLS er ikke et eget lag i tradisjonell forstand — det er et sublag som ligger mellom TCP og applikasjonslaget. Applikasjonen (f.eks. en nettleser) skriver data til en «TLS socket» i stedet for en vanlig TCP-socket. TLS krypterer dataene og sender dem ned til TCP som vanlige TCP-segmenter. For TCP og IP under ser alt normalt ut — de vet ikke at innholdet er kryptert.
Fire faser i en TLS-forbindelse
Vi kan forstå TLS ved å bygge en forenklet «toy-TLS» (t-tls) og se hva hver fase trenger:
Læreboken (kap. 8.6) presenterer TLS i to nivåer. Først en forenklet «almost-TLS» (8.6.1) som viser de tre fasene handshake → key derivation → data transfer; deretter et mer fullstendig bilde (8.6.2) der nonces, algoritmeforhandling og handshake-beskyttelse er med. Pensum-modellen er den klassiske: klienten genererer en Pre-Master Secret og sender den kryptert med serverens offentlige RSA-nøkkel fra sertifikatet. (TLS 1.3 i den virkelige verden bruker som regel ephemeral Diffie–Hellman og AEAD i stedet — det er nevnt nederst som tilleggsinfo, men er ikke det 8.6 beskriver.)
Fase 1 av 4
Nøkkelutledning (key derivation)
Etter håndtrykket har Alice og Bob en felles «master secret». Men det anses som dårlig praksis å bruke én nøkkel til alt. Derfor utleder de fire separate nøkler fra master secret:
- EA — krypteringsnøkkel for data fra Alice til Bob
- EB — krypteringsnøkkel for data fra Bob til Alice
- MA — MAC-nøkkel for data fra Alice til Bob
- MB — MAC-nøkkel for data fra Bob til Alice
Beskyttelse av selve håndtrykket
Et siste, kritisk steg i håndtrykket: etter at MS er utledet sender begge parter en HMAC over alle håndtrykksmeldingene de har sendt og mottatt — beregnet med de nye HMAC-nøklene. Hvorfor? Den aller første meldingen (ClientHello) inneholder en liste over chiffer klienten støtter, og denne listen sendes i klartekst (ingen nøkler er avtalt enda). Trudy som mann-i-midten kunne strippe vekk de sterke algoritmene fra listen og tvinge partene til å velge en svak chiffer — et såkalt nedgraderingsangrep. Men når både klient og server etterpå sender en HMAC over hele håndtrykket, vil enhver slik manipulasjon gi forskjellige HMAC-er hos de to, og forbindelsen avbrytes.
Hvorfor nonces? Connection replay attack
Sekvensnumrene beskytter mot at enkeltpakker spilles av på nytt midt i en aktiv økt — men ikke mot at en hel økt spilles av på nytt en annen dag. Forestill deg at Trudy avlytter alle TLS-meldingene mellom Alice og Bob i dag. I morgen kobler hun seg mot Alice og spiller av nøyaktig den samme sekvensen av meldinger som Bob sendte. Uten nonces ville Alice utlede de samme sesjonsnøklene som i går, integritetssjekkene ville passere, og Alice (om hun er en e-handelsserver) ville registrert det samme kjøpet på nytt. Nonces løser dette: fordi klient og server velger nye, ferske nonces hver økt, blir master secret — og dermed alle sesjonsnøklene — forskjellige hver gang. De gamle records vil da feile integritetssjekken, og «connection replay»-angrepet stoppes.
Nonces beskytter mot replay av en hel forbindelse mellom økter.
Sekvensnumre beskytter mot replay (eller omorganisering) av enkeltpakker innen samme aktive forbindelse.
Record-basert kryptering
TCP gir en byte-strøm, men TLS kan ikke kryptere strømmen fortløpende — for da ville MAC-en først komme på slutten, og mottakeren ville ikke kunne sjekke integriteten før hele forbindelsen lukkes. Løsningen: TLS deler strømmen opp i records. Hver record består av et type-felt (handshake-melding, applikasjonsdata, eller signal om at forbindelsen lukkes), et versjon-felt, et lengde-felt, selve dataene og en HMAC. Type, versjon og lengde sendes i klartekst — mottakeren trenger lengden for å plukke recordene ut av TCP-strømmen — mens data og HMAC krypteres med sesjonsnøkkelen før det hele gis til TCP.
Et viktig poeng: MAC-en beregnes ikke bare over selve dataene i recorden — den inkluderer også et sekvensnummer. Selv om sekvensnummeret ikke sendes eksplisitt i recorden, holder begge parter en intern teller. Uten sekvensnumre kunne Trudy fange opp en record og spille den av på nytt (replay-angrep), eller omorganisere rekkefølgen på records uten at mottakeren oppdager det. Med sekvensnummeret i MAC-beregningen vil enhver slik manipulasjon føre til at MAC-verifiseringen feiler.
TLS 1.3 og cipher suites
En «cipher suite» er et sett av algoritmer som brukes sammen: én for nøkkelutveksling, én for kryptering, én for MAC og én for digital signatur. TLS 1.3 (RFC 8446, 2018) er den nyeste versjonen og har strammet inn valgene kraftig.
I TLS 1.3 brukes ofte AEAD (Authenticated Encryption with Associated Data): kryptering og integritet i én operasjon, i stedet for eldre oppsett med separat MAC over payload. Record-struktur og behovet for integritet og beskyttelse mot replay er likevel de samme prinsippene som i «toy-TLS»-forklaringen over.
IPsec og VPN
Sikkerhet på nettverkslaget — der hele IP-datagrammer krypteres og autentiseres.
TLS sikrer enkelttransportforbindelser (én TCP-forbindelse om gangen). Men hva om du vil sikre all trafikk mellom to nettverk — uansett applikasjon, uansett port? Da trenger du sikkerhet på nettverkslaget, og det er der IPsec kommer inn. IPsec gir kryptering, autentisering og integritetskontroll på datagram-nivå, for både brukerdata og kontrolltrafikk (BGP, DNS, osv.).
To moduser
| Modus | Hva krypteres | Bruk |
|---|---|---|
| Transport | Bare payloaden i IP-datagrammet | Mellom to endepunkter (host-to-host) |
| Tunnel | Hele det opprinnelige datagrammet, pakket inn i nytt | Mellom to gateways (VPN) — vanligst i praksis |
Tunnel-modus er fundamentet for VPN (Virtual Private Network). Tenk på et selskap med kontorer i Oslo og Trondheim. Begge kontorene er koblet til Internett, og mellom gateway-ruterne på hvert kontor settes det opp en IPsec-tunnel. All trafikk mellom de to kontornettene pakkes inn i krypterte IP-datagrammer og tunneleres over det offentlige Internett. For brukerens PC ser det ut som om den er på samme lokalnett — men i virkeligheten er alt kryptert underveis.
Hva er forskjellen mellom IPsec transport-modus og tunnel-modus?
Sikkerhet i trådløse nett
Hvordan WiFi (802.11) og mobilnett (4G/5G) autentiserer enheter og krypterer trafikk over lufta.
Alt vi har sett så langt — kryptering, signaturer, CA-er — er generelle mekanismer. Men trådløse nettverk har et spesielt behov: enheten som kobler seg til må autentisere seg før den får noen som helst tilgang til nettverket, og all trafikk over lufta må krypteres fordi radiobølger er trivielt enkle å avlytte. La oss se hvordan WiFi og 4G/5G løser dette.
Fra WEP til WPA3
| Mekanisme | Kort forklaring |
|---|---|
| WEP | Tidlig 802.11-kryptering med svake nøkler og svak IV-bruk; regnes som brutt og er ikke brukbar i praksis. |
| WPA2 (802.11i) | CCMP basert på AES; lenge industristandard. Krever sterkt passord fordi PSK fortsatt kan utsettes for ordbokangrep. |
| WPA3 | Sterkere håndtrykk (SAE m.m.), bedre beskyttelse av passord og enklere sikre oppsett — det er dette kapittelet vektlegger. |
802.11 WiFi: fire steg til sikker kommunikasjon
Når en mobilenhet kobler seg til et WiFi-nettverk med WPA3, gjennomgår den fire steg:
Steg 1 av 4
WPA3-håndtrykket i detalj
Steg 2 (gjensidig autentisering og nøkkelutledning) er det mest interessante. Målet er en felles sesjonsnøkkel KM-AP uten at det forhåndsdelte passordet forlater enhetene i klartekst. Passordet inngår bare i lokale beregninger; over lufta sendes verdier som er avledet av passordet, men som ikke avslører passordet direkte — en angriper må fortsatt gjette eller teste passordet (derfor teller sterke passord).
I denne forenklede beskrivelsen (som samsvarer med fire-stegs-oversikten over) skjer utvekslingen slik:
- AS sender NonceAS — et tilfeldig engangsnummer — til mobilenheten. Verdien er offentlig i den forstand at den avlyttes i klartekst, men den binder denne økten til et bestemt tidspunkt og hindrer enkelt gjenbruk av gamle meldinger (replay).
- Mobilenheten trekker sitt eget tilfeldige NonceM og kjører en avtalt nøkkelutledning (KDF) lokalt: den blander passordet (som bare finnes på enheten), NonceAS, NonceM og typisk MAC-adressene til stasjon og tilgangspunkt. Resultatet er KM-AP og kryptografisk materiale til å lage en bekreftelse. Enheten sender NonceM og en HMAC tilbake. HMAC-en er en kort autentiseringskode basert på hash og delt hemmelighet — ikke en asymmetrisk signatur med privat nøkkel fra PKI — men den viser likevel at avsenderen kan ha brukt samme hemmelige grunnlag som mottakeren forventer etter å ha blandet inn riktig passord og riktige nonce-verdier.
- AS gjør samme KDF med samme ingredienser, beregner forventet HMAC og sammenligner med det som ble mottatt. Stemmer de, er partene gjensidig overbevist om at den andre kjenner passordet, og de deler nå KM-AP — uten at passordet noensinne ble sendt over lufta.
4G LTE: autentisering med SIM-kort
Mobilnett er fundamentalt annerledes enn WiFi fordi identiteten ligger i SIM-kortet, ikke i et passord. SIM-kortet inneholder en globalt unik identifikator (IMSI) og en forhåndsdelt hemmelig nøkkel KHSS-M som bare SIM-kortet og hjemmenettverkets HSS (Home Subscriber Server) kjenner.
Autentiseringsflyten i 4G involverer flere aktører:
| Komponent | Rolle |
|---|---|
| UE (mobilenhet) | Inneholder SIM med IMSI og forhåndsdelt nøkkel |
| eNode-B (basestasjon) | Videreformidler autentiseringsmeldinger |
| MME | Tar autentiseringsbeslutningen i besøkt nett |
| HSS | Endelig autoritet — kjenner alle abonnenter og deres nøkler |
Autentiseringsflyt (forenklet)
- a) Mobilen sender attach-melding med IMSI via basestasjon og MME til HSS i hjemmenettverket.
- b) HSS bruker den forhåndsdelte nøkkelen KHSS-M til å beregne et auth_token og en forventet respons xresHSS. Auth_token inneholder kryptert informasjon som bare mobilenheten kan verifisere. HSS sender begge til MME.
- c) MME sender auth_token videre til mobilen. Mobilen verifiserer auth_token med sin egen nøkkel — og vet dermed at nettverket er ekte. Mobilen beregner sin egen respons resM og sender den tilbake.
- d) MME sammenligner resM med xresHSS. Hvis de stemmer, er mobilen autentisert. MME informerer basestasjon og genererer sesjonsnøkler.
- e) Mobilen og basestasjonen utleder krypteringsnøkler KBS-M for å kryptere all videre kommunikasjon over 4G-linken (typisk med AES).
Fra 4G til 5G: viktige endringer
| 4G LTE | 5G | |
|---|---|---|
| Autentiseringsbeslutning | MME i besøkt nett | Hjemmenettverket |
| Nøkkeltype | Forhåndsdelte nøkler | Støtter også nøkler for IoT |
| IMSI-beskyttelse | Sendes i klartekst | Krypteres med public-key |
Den mest bemerkelsesverdige forbedringen i 5G er at IMSI nå krypteres — i 4G ble den sendt i klartekst, noe som muliggjorde IMSI-catchers (falske basestasjoner som fanger opp mobil-identiteter).
Brannmurer
Den første forsvarslinjen mellom det interne nettverket og det ville Internett.
Kryptografi beskytter innholdet i kommunikasjonen, men det er ikke alltid nok. En organisasjon trenger også å kontrollere hvilken trafikk som i det hele tatt slipper inn og ut av nettverket. Det er jobben til en brannmur (firewall): den sitter mellom organisasjonens interne nettverk og det offentlige Internett, og filtrerer pakker basert på et sett med regler.
Hvorfor brannmur?
- Forhindre DoS-angrep: f.eks. SYN-flooding der en angriper fyller opp serverens forbindelsesmessige ressurser med falske TCP-forespørsler.
- Forhindre uautorisert tilgang: blokkere tilgang til interne tjenester som ikke skal eksponeres for Internett.
- Tillate bare autorisert trafikk: begrense tilgangen til et sett av godkjente brukere, protokoller og porter.
Tre typer brannmurer
1. Tilstandsløs pakkefiltrering (stateless)
Den enkleste formen: brannmuren ser på hver pakke isolert og bestemmer om den skal slippes gjennom eller droppes, basert på informasjon i headeren:
- Kilde- og destinasjons-IP-adresse
- Kilde- og destinasjonsportnummer (TCP/UDP)
- ICMP-meldingstype
- TCP SYN- og ACK-flagg
Reglene uttrykkes i en Access Control List (ACL) — en tabell der reglene sjekkes fra topp til bunn, og første treff avgjør:
| Handling | Kilde | Dest | Proto | Kilde-port | Dest-port | Flagg |
|---|---|---|---|---|---|---|
| allow | 222.22/16 | 100.22/16 | TCP | >1023 | 80 | any |
| allow | 100.22/16 | 222.22/16 | TCP | 80 | >1023 | ACK |
| allow | 222.22/16 | 100.22/16 | UDP | >1023 | 53 | --- |
| allow | 100.22/16 | 222.22/16 | UDP | 53 | >1023 | --- |
| deny | all | all | all | all | all | all |
Blokker all innkommende UDP: drop alle pakker med IP-protokollfelt = 17. Resultat: ingen UDP-trafikk (f.eks. DNS-forespørsler utenfra) slipper inn.
Blokker all Telnet: drop alle TCP-segmenter med destinasjonsport 23. Resultat: ingen kan opprette Telnet-forbindelser til interne maskiner.
Blokker innkommende TCP-forbindelser: drop innkommende TCP-segmenter med ACK=0. Resultat: eksterne klienter kan ikke opprette TCP-forbindelser innover, men interne klienter kan koble seg ut.
2. Tilstandsfull pakkefiltrering (stateful)
Problemet med tilstandsløs filtrering er at den er for grovkornet. Den slipper gjennom pakker som «ser riktige ut» men ikke tilhører noen reell forbindelse — f.eks. en pakke med ACK-flagg satt som ser ut som et svar, men ingen forespørsel ble noensinne sendt.
En tilstandsfull brannmur løser dette ved å holde styr på alle aktive TCP-forbindelser. Den sporer oppsett (SYN), nedrigging (FIN), og timeout for inaktive forbindelser. En innkommende pakke slippes bare gjennom hvis den tilhører en forbindelse som allerede er satt opp i forbindelsestabellen.
3. Applikasjonsgateway
En applikasjonsgateway filtrerer ikke bare på IP/TCP-headere, men inspiserer også applikasjonsdata. For eksempel: kun utvalgte interne brukere tillates å bruke Telnet. Alle Telnet-forbindelser må gå gjennom gatewayen, som verifiserer brukeridentiteten før den setter opp en viderekoblet forbindelse til det endelige målet.
Begrensninger
Brannmurer er ingen magisk løsning:
- IP-spoofing: ruteren kan ikke verifisere at kilde-IP er ekte.
- Skalerbarhet: hver applikasjon som trenger spesialbehandling krever sin egen gateway.
- Alt-eller-ingenting for UDP: vanskelig å skille «god» fra «dårlig» UDP-trafikk.
- Avveining: jo strengere filtrering, jo mer begrenses også legitim kommunikasjon.
En tilstandsløs brannmur slipper gjennom en innkommende TCP-pakke med dest-port 80 og ACK-flagg satt. Hva er problemet?