Hva er ende-til ende kryptering, og hvorfor er det viktig?

Hva er ende-til ende kryptering, og hvorfor er det viktig?

Nylig har digipost annonsert at de skal tilby ende-til-ende-kryptering. I denne posten blir det analysert hva som menes med ende-til-ende og hvorfor det er viktig. I del 2 analyseres hvordan digipost har valgt å løse dette og hva det betyr for brukeren.

End to end principle

End-to-end-principle er et designprinsipp som sier at applikasjons-spesifikk funksjonalitet bør implementeres i endenoder og ikke i mellomliggende noder. Dette kan også anvendes på sikkerhetsfunksjonalitet: dersom konfidensialitet og integritet er viktig for applikasjonen må dette implementeres i klient og tjener, uavhengig av evt mellomliggende noder som router, brannmur, lastbalansering etc.

I en internett-arkitektur hvor det er flere nettverkslag som er avhengig av hverandre, og det i stor grad er vanskelig å forutse eller anta noe om hvilke noder trafikk vil gå gjennom, er det slik at metadata på ulike nivå i nettverkstacken må være tilgjengelig for mellomliggende noder.

Den direkte konsekvensen av dette er at for å kunne implementere konfidensialitet og integritet i ende-nodene må det også ligge så langt opp i nettverkstacken som mulig.

Praktisk eksempel: epost

Et praktisk eksempel for å illustrere dette: hvis bruker A skal sende epost til bruker B (her vil "client" og "server" i figuren byttes ut med "bruker A" og "bruker B") vil denne meldingen gå gjennom minst 2 ulike epost-servere, samt et ukjent antall router-komponenter som router på applikasjonsnivå (SMTP), transportnivå (router med NAT, brannmur, lastbalansering etc), internetnivå (IP-router) og linknivå (switcher, broer etc). Alle disse komponentene trenger tilgang til adresse-informasjon, samt potensielt også annen metadata om trafikken for å kunne route trafikken riktig.

Ende-til-ende-sikkerhet i denne sammenhengen betyr at man velger sikkerhetsmekanismer som sikrer konfidensialitet og integritet uavhengig av hvilke mellomliggende noder trafikken går gjennom. Altså må man på øverste nivå kryptere og signere meldingen, slik at data er uleselig for alle komponenter som opererer på lavere nivå, samt at evt endringer underveis vil oppdages av mottaker.

Merk at dette ikke betyr at man kun skal bruke ende-til-ende-mekanismer. Et annet viktig prinsipp er defense in depth som tilsier at man skal implementere flere sikkerhetsmekanismer som fungerer uavhengig av hverandre.

Tilbake til eksempelet med epost kan man bruke STARTTLS for å sikre at trafikk er kryptert mellom epost-servere, og man kan bruke IMAP over TLS for å kryptere trafikk mellom klient og server, men det betyr at meldingen ligger i klartekst på serveren og kan leses av brukere med tilgang til denne.

Utfordringer med ende-til-ende-sikkerhet

Den viktigste utfordringen som må løses for å få til ende-til-ende-sikkerhet er nøkkelhåndtering: for at avsender skal kunne kryptere og signere en melding til mottaker må følgende være gjort å forhånd:

  • Både avsender og mottaker må ha laget et nøkkelpar med en privat og en offentlig nøkkel
  • Avsender må ha en kopi av mottakers offentlige nøkkel for å kunne kryptere
  • Mottaker må ha en kopi av avsenders offentlige nøkkel for å kunne verifisere signatur

Og gjemt i disse tre kravene er flere andre krav:

  • Sikkerheten er avhengig av at de private nøklene faktisk er hemmelig. Det betyr at brukeren må beskytte dem mot tyveri av hw, ondsinnet programvare etc.
  • Begge parter må være sikker på at den offentlige nøkkelen de har en kopi av faktisk tilhører den de tror den tilhører.
  • Dette innebærer videre at man må ha en definisjon av identitet. Hvis du har en kopi av nøkkelen til "Rolf", er du sikker på at det er rett "Rolf" og at det ikke er noen som utgir seg for å være "Rolf"?

For hemmelighold er typiske løsninger:

  • Nøkkel lagret i HW (typisk et smartkort eller en usb-device). Disse lages slik at nøkkelen aldri transporteres ut av sin egen HW, all bruk av nøkkelen (kryptering, signering) skjer inne i spesialisert HW og nøkkelen vil aldri være tilgjengelig for evt ondsinnet programvare. Dette er sikkert (gitt noen forutsetninger), men vanskelig å skalere fordi man må sende ut spesiell hw til alle brukere, ha egne drivere i operativsystemet etc, samt at det er ikke mulig å ta sikkerhetskopi.
  • Nøkkel lagret i SW (i praksis: i en fil). Dette er enklere og billigere å skalere, men krever at brukeren faktisk tar noen forhåndsregler for å beskytte denne filen som krever mye opplæring av brukere og disiplin i den daglige bruken.

Begge alternativer stiller høye krav til brukeren: han/hun må forstå hva som foregår og ta ansvar for sikker forvaltning av nøkler. Det stiller også høye krav til utforming av brukergrensesnitt i den programvaren som brukes, slik at det er færrest mulig momenter brukeren må passe på selv, at det er åpenbart hva som faktisk skjer og at det er både fornuftig og sikker håndtering av alle mulige feilsituasjoner.

For tilknytning av identitet til offentlig nøkkel finnes det også noen løsninger:

  • PKI og X.509: her finnes en tiltrodd tredjepart som utsteder sertifikater. Et sertifikat er i denne sammenhengen et dokument som knytter en identitet til en offentlig nøkkel, og dette dokumentet er signert av tredjeparten.
  • For sertifikat utstedt i tråd med kravspesifikasjon for PKI i offentlig sektor inneholder sertifikatet enten organisasjonsnummer (fra brønnøysundregisterret) eller fødselsnummer (fra folkeregisteret), slik at identiteten i sertifikatet er knyttet til en offentlig definert identitet.
  • PGP benytter en modell som kalles "web of trust" hvor sertifikat kan signeres av et vilkårlig antall andre brukere, og brukeren må vurdere for hvert sertifikat hvorvidt man stoler på dette sertifikatet, gitt hvem som har signert det.
  • Keybase er en tjeneste hvor sertifikat knyttes til internett-tjenester som twitter, github, reddit etc. Denne kan altså brukes til å verifisere at en gitt nøkkel tilhører samme person som kontrollerer en gitt twitter-konto (men ikke hvem dette er).

Det er også noen arkitekturmessige problemer som følger av ende-til-ende kryptering og signering.

Hvis meldingen er signert av avsender er det ikke mulig for en mellomliggende node å modifisere den uten at det oppdages, det er hensikten med signering. Dette er ikke så veldig relevant for epost, men det betyr at løsninger for transformasjon av XML (for eksempel i en tjenestebuss) vil bryte sikkerheten.

Hvis meldingen er kryptert med mottakers nøkkel vil det være umulig å implementere sikkerhetsmekanismer som ser på innholdet i meldingen. For eksempel betyr det at man ikke kan gjøre viruskontroll av vedlegg før de er hos sluttbrukeren, eller "data loss prevention" som skal hindre at konfidensiell informasjon sendes ut ved en feiltagelse.

Til slutt må det også nevnes at ende-til-ende-sikkerhet gir ikke en perfekt løsning. Som vi har sett over må metadata knyttet til meldingen være tilgjengelig for mellomliggende noder. På ulike nivå er dette for eksempel MAC-adresser, IP-adresser, DNS-adresser og epost-adresser. Videre vil en observatør kunne se størrelsen på meldinger og frekvensen av meldinger uavhengig av om innholdet er uleselig. Det betyr at en angriper som har mulighet til å overvåke kommunikasjonen din kan se hvem du kommuniserer med, hvor ofte, når på døgnet og om du sender med vedlegg. Dette kan være vel så nyttig informasjon som det faktiske innholdet i meldingen.

Oppsummert

Som vi har sett er det nødvendig med ende-til-ende-sikkerhet for å hindre at nettverksnoder som router trafikk mellom avsender og mottaker (eller brukere som kontrollerer disse nodene) å lese innholdet i trafikken. Dette har dog en del utfordringer man må kjenne til og ta høyde for:

  • Brukerne må oppbevare og forvalte sine private nøkler på en sikker måte.
  • Brukerne må selv verifisere at offentlige nøkler de bruker til kryptering eller validering av signaturer tilhører den de tror den tilhører, og vurdere i hvilken grad de stoler på mekanismen som er brukt til å distribuere denne nøkkelen.
  • Det reduserer muligheten for å la mellomliggende noder filtrere eller transformere innhold i meldinger.
  • Det reduserer muligheten for å implementere generelle sikkerhetsmekanismer i nettverket, for eksempel som perimetersikring.
  • Ende-til-ende sikkerhet gir ikke anonymitet og en angriper kan få tak i mye potensielt sensitiv informasjon ved å overvåke metadata.
comments powered by Disqus