Sikkerhet og Kryptografi
Det aller meste av kommunikasjon over internett består av meldinger som blir sendt mellom flere andre parter enn bare avsender og mottaker. Det er mange andre parter som i teorien kan lese meldingen underveis. Hvordan kan vi sikre at meldingen ikke kan bli lest og forstått av andre enn avsender og mottaker?
En forenklet metafor
Bob har lyst å sende en boks i posten til Alice. Bob vil at ingen andre enn Alice skal kunne åpne boksen. Hvordan kan Bob sikre at boksen ikke blir åpnet av noen andre enn Alice?
- Bob setter på en hengelås på boksen, og låser den med en nøkkel (
Nøkkel A
) som kun han har. - Bob sender boksen til Alice.
- Alice mottar boksen, og så setter hun en ny hengelås på boksen, og låser den med en nøkkel som kun hun har (
Nøkkel B
). - Alice sender boksen tilbake til Bob.
- Bob mottar boksen, og låser opp hengelåsen med sin nøkkel.
- Bob sender boksen tilbake til Alice.
- Alice mottar boksen, og låser opp hengelåsen med sin nøkkel.
Til slutt sitter Alice igjen med en boks som har vært låst på alle turene frem og tilbake, uten at Alice eller Bob har måtte dele sin private nøkkel.
Denne metaforen er en forenklet versjon av Diffie-Hellman.
Denne metoden av key exchange er ikke sikker mot "man in the middle attacks" - en tredje aktør kan sitte i midten av samtalen (eller i midten av en utveksling av bokser låst med hengelås) og late som den er en av partene. Derfor er det viktig å alltid sikre seg om at mottaker er den du tror det er.
Metaforen fungerer derimot fint for å illustrere enkelt hvordan man i teorien kan maskere informasjon sendt over internett slik at den kun skal være tilgjengelig for 2 parter.
Hvor lagres sensitiv informasjon?
På internett skiller man generelt sett mellom det man kaller en server og en klient. Kort fortalt så er klienten datamaskinen (eller mobilen, etc) som brukeren benytter for å interagere med applikasjonen, og serveren datamaskinen som tar imot forespørsler fra klienten og prater med databasen.
Det er viktig å forstå at klienten alltid er sårbar mot angrep. Det er ikke mulig å sikre seg mot at en bruker kan endre på koden som kjører på deres egen datamaskin. Det er derfor viktig at sensitiv informasjon ikke lagres på klienten, men heller på serveren.
Passord hashing
Man kan aldri være helt sikre på at databasen hvor passord er lagret ikke blir utsatt for innbrudd av en skummel aktør. Derfor er det viktig at passordene som lagres der, ikke lagres i det man kaller "plain text" (altså, at passordet er lagret akkurat slik som det er skrevet inn).
For å løse dette problemet brukes noe som heter password hashing.
Hashing er en funksjon som tar inn passordet i plain text, og returnerer en ny tekst som er unikt for det passordet. Det er ikke mulig å gå fra teksten tilbake til passordet, men hvis man gir funksjonen samme passord så vil den alltid returnere samme tekst.
Plain text | SHA2 Hash |
---|---|
123456 | e150a1ec81e8e93e1eae2c3a77e66ec6dbd6a3b460f89c1d08aecf422ee401a0 |
password | 6b3a55e0261b0304143f805a24924d0c1c44524821305f31d9277843b8a10f4e |
På grunn av dette, så trenger aldri nettsiden å egentlig vite hva passordet ditt er. Når du skriver inn passordet ditt, så hasher nettsiden det, og sammenligner hashen med hashen som er lagret i databasen. Hvis de er like, så vet nettsiden at du har skrevet inn riktig passord.
Hva er viktig når man sender en forespørsel over internett?