2010-12-28

Veldig kort om krypto

Å kryptere data for sikker lagring er ikke så rett frem som man skulle tro.  I essens har man to måter å angripe problemet på:  man kan kryptere innhold med symmetrisk krypto eller asymmetrisk krypto.  Dette er en svært, svært forenklet fremstilling av disse to valgene.  Kryptografi er et krevende felt og i tillegg til alle de rent teoretiske aspektene er det også mange fallgruber i den praktiske anvendelsen av kryptografiske systemer.

Symmetrisk krypto

Ved symmetrisk kryptografi bruker man samme nøkkel, eller hemmelighet, for å både kryptere og dekryptere dataene.  Det vil si at denne hemmeligheten må være tilstede både når man leser og når man skriver dataene.  I verste fall løses dette ved å putte nøkkelen i en konfigurasjonsfil på alle systemer som skal skrive dataene.  Sikkerheten er da redusert til hvor vanskelig det er å få tak i denne konfigurasjonsfilen eller hvor vanskelig det er å snappe opp nøkkelen når den distribueres til de som trenger å vite den.

En annen måte å løse dette på er å taste inn nøkkelen hver gang systemet starter slik at nøkkelen aldri lagres i noen konfigurasjonsfil.  Dette er, som du sikker forstår, ganske upraktisk fordi man for å starte systemet manuelt må ha noen til å taste inn nøkkelen.  Hvis nøkkelen er lang trenger operatøren noe for å hjelpe seg med å huske nøkkelen.  Som f.eks å skrive den ned et sted.  Det er uheldig fordi det øker sannsynligheten for at den kommer på avveie.  Man kan selvsagt velge nøkler som er enklere å huske, men man vil fremdeles risikere at noen skriver den ned og man har samme problemet med risiko for at den blir snappet opp når den kommuniseres til de parter som trenger tilgang til den.

Det finnes systemer som forsøker å håndtere symmetriske nøkler på en sikker måte, men dette involverer gjerne spesialutstyr og jeg er ikke kjent med hvorvidt det finnes noen slike systemer i utbredt praktisk bruk som faktisk er vist å ha tilstrekkelig motstandsdyktighet overfor en ressurssterk angriper.

Ulempe: kunnskapen for å dekryptere data og kryptere dem er den samme.

Asymmetrisk krypto

I asymmetrisk kryptografi opererer man med to nøkler.  Én nøkkel for å kryptere informasjon og en annen som brukes for å dekryptere informasjon.

Dersom jeg vil at hvem som helst skal kunne sende meg meldinger som bare jeg kan lese kan jeg distribuere nøkkelen som brukes for å kryptere meldingen.  Denne kalles "offentlig nøkkel".  For å dekryptere disse meldingene trengs da en "privat nøkkel" som bare jeg innehar og som jeg ikke distribuerer til noen.  Sikkerheten baserer seg på at det er svært vanskelig å finne ut hva den private nøkkelen er gitt den offentlige nøkkelen.

Dette er veldig praktisk i systemer der man bare trenger å skrive data, men ikke trenger å lese dem igjen.  For å lese dem trenger man tilgang til den private nøkkelen, så dersom det er et krav om at data skal kunne både skrives og leses av samme system er vi praksis tilbake ved utgangspunktet med symmetrisk krypto og problemene rundt håndtering av nøkler.


Merk forøvrig at fremstillingen ovenfor er grovt forenklet.  Kryptering med offentlig nøkkel er bitelitt mer komplisert enn som så i praksis, men la oss ikke henge oss opp i detaljer.

Ulempe: kunnskapen for å dekryptere data er separat fra kunnskapen for å kryptere data.  Trenger man å både lese og skrive data på et system er det praktiske sikkerhetsnivået omtrent ekvivalent med symmetrisk krypto. 


Fallgruber.

Som nevnt innledningsvis er kryptografi et svært krevende felt og djevelen er i detaljene.  For eksempel er det ikke uvanlig at implementasjoner av matematisk sunne metoder inneholder svakheter som ødelegger sikkerheten.  Det kan være ved at programmene "lekker" informasjon om sin interne tilstand, at de gjør forutsigbare valg ved generering av nøkler etc.

Det kan også være noe så banalt som at det er mulig å skaffe seg tilgang til nøkler i klartekst fra minnet på maskinen eller at dette minnet skrives til ubeskyttede disker under visse forutsetninger.

Hvis det er snakk om store mengder data med lik struktur og forholdsvis likt innhold kan dette gi en angriper fordeler dersom vedkommende ønsker å angripe problemet med mer dyptgående analyse.  For eksempel er det ikke sikkert det er nødvendig å dekryptere dataene, men å gjette på innhold og verifisere at innholdet man gjettet på var tilstede i de krypterte dataene.

Du kan lese mer om kryptoanalyse på Wikipedia.

Andre metoder

Det finnes selvsagt andre metoder for å sikre data.  En av disse metodene er å splitte data i flere deler slik at alle delene trengs for å kunne rekonstruere de opprinnelige dataene.  I 1994 publiserte Moni Naor and Adi Shamir en morsom metode for å kunne utføre dekrypteringen visuelt uten hjelp av en datamaskin.  Dette er selvsagt en kuriositet, men prinsippet kan anvendes for å dele opp informasjon på en slik måte at man må ha alle delene for å kunne få tilbake det opprinnelige innholdet. (Men som illustrasjon er metoden til Shamir og Naor morsom).

Det attraktive med denne metoden er at dersom man distribuerer kunnskapen til flere parter vil hver av disse partene i praksis ha en "vetorett":  opprinnelig melding kan ikke rekonstrueres uten at alle delene er tilstede.  Dette kan være attraktivt når partene ikke stoler på hverandre.

Man kan selvsagt også se for seg at disse dataene kan obfuskeres på ulike måter ved å klemme dem gjennom irreversible matematiske fuksjoner slik at man kan bruke de lagrede dataene til å verifisere påstander, men ikke å direkte få dataene tilbake som klartekst.  Dette kan ha en viss nytteverdi, men er ikke nødvendigvis så veldig sikkert og det introduserer veldig store begrensninger på hva man kan gjøre med dataene.

Uansett:  å kryptere data i et online-system er en ikke-triviell oppgave, det er vanskelig å balansere behovet for sikkerhet med praktiske hensyn og det skal veldig lite til for å kompromittere data selv ved bruk av teknikker som på papiret ser bombesikre ut.

Merk at jeg ikke på noen måte er noen autoritet på kryptografi.  Jeg har ørlittegrann teoretisk bakgrunnskunnskap samt litt praktisk erfaring med kryptografi, men dette representerer på ingen måte noen form for ekspertise.  Det viktigste jeg vet om kryptografi er at dette er et felt der praktisk anvendelse er ekstremt vanskelig.

No comments:

Post a Comment