Krypteringsnøkkel

**Krypteringsnøkkel** henviser til at innenfor kryptografi er en egen *[[nøkkel]]* et stykke informasjon (et parameter) som avgjør det funksjonelle resultatet av en kryptografisk algoritme. Uten en nøkkel, ville ikke algoritmen ha noe resultat. For kryptering spesifiserer nøkkelen tranformasjonen av klartekst til chiffertekst, eller omvendt når det gjelder dekryptering. Nøkler brukes også i andre kryptografiske algoritmer, slik som digitale signaturer og meldingsautentikasjon.

## Behov for hemmelighold
Ved utvikling av sikkerhetssystemer er det klokt å anta at detaljene i den kryptografiske algoritmen allerede er kjent for en angriper. Denne antagelsen er kjent som Kerckhoffs' prinsipp – *«kun [[hemmelighold]]else av nøkkelen gir sikkerhet»*, eller, reformulert som Shannons maxim, «fienden kjenner systemet». Krytpografiens historie beviser at det kan være meget vanskelig å holde detaljene i en velbrukt algoritme hemmelig. En nøkkel er ofte lettere å beskytte (den er typisk et lite stykke informasjon) enn en krypteringsalgoritme, og er enklere å endre hvis den har blitt kompromittert. Av den grunn er sikkerheten i et krypteringssystem ofte basert på at nøkler blir holdt hemmelige.

Å holde nøklene hemmelige er en av de vanskeligste problemene innen praktisk krytpografi. En angriper som får tak i nøkkelen (ved eksempelvis tyveri, utpressing, romstrering i søppelkasser eller ved å kikke på notatet som sitter klistret på siden av skjermen) kan få frem den opprinnelige klarteksten fra chifferteksten.

Krypteringsalgoritmer som bruker samme nøkkel for å kryptere og dekryptere er symmetriske krypteringsalgoritmer. En ny klasse av "offentlig nøkkel"-kryptering ble oppfunnet på 70-tallet, og den bruker et nøkkelpar, en for å kryptere og en annen for å dekryptere. Disse asymmetriske krypteringsalgoritmene gjør det mulig å publisere en nøkkel, og hemmeligholde den andre. Algoritmene er laget slik at det er ekstremt vanskelig å finne den hemmelige (private) nøkkelen, selv om den korresponderende offentlige nøkkelen er kjent. På denne måten kan man publisere krypteringsnøkkelen, og holde nøkkelen for dekryptering hemmelig, slik at envher kan sende kryptert informasjon kun til den som har nøkkelen for dekryptering tilgjengelig.

## Nøkkellengder

For et engangsnøkkelsystem må nøkkelen være minst like lang som meldingen som skal sifreres. I krypteringssystemer som bruker en sifreringsalgoritme, så kan meldingene være mye lengre enn nøkkelen. Nøkkelen må derimot være så lang at en angriper ikke kan forsøke alle mulige kombinasjoner.

En nøkkellengde på 80 bits innen symmetrisk kryptering er sett på som minimum for sterk kryptering. Tilsvarende sikkerhet for asymmetrisk krytpering er 1024 bits.

Nøklene som brukes innen offentlig nøkkelkryptering har en matematisk struktur. For eksempel så er offentlige nøkler som brukes i RSA produktet av to primtall. Av den grunn så krever offentlige nøkkelsystemer lengre nøkler enn symmetriske systemer for det samme nivå av sikkerhet. 3072 bits er den anbefalte nøkkellengden for systemer basert på faktorisering og heltalls diskrete logaritmer som har som mål å ha en sikkerhetsekvivalens tilsvarende en 128 bits symmetrisk nøkkel.

Elliptisk kurvekryptografi kan tillate kortere nøkkellengder med tilsvarende sikkerhet, men disse algoritmene har bare vært kjent i et relativt kort tidsrom, og gjeldende beregninger for hvor vanskelig det vi være å søke etter nøklene vil kanskje ikke holde mål. I 2004 ble en melding kryptert med en 109-bits nøkkel av elliptisk kurvealgoritme knekket ved å bruke et angrep av typen «brute force» Dagens tommelfingerregel er å bruke en elliptisk kurvekryptografisk nøkkel som er dobbelt så lang som den lengde en symmetrisk nøkkel vil gi ved ønsket sikkerhetsnivå. Bortsett fra den vilkårlige engangsnøkkelen, så har ikke sikkerheten i disse systemene blitt matematisk bevist (per 2008), så det er en teoretisk mulighet for at all informasjon kryptert med disse systemene kan bli lest som en åpen bok.

## Nøkkelvalg
For å unngå at en nøkkel skal bli funnet, må man generere virkelig tilfeldige nøkler, og de må ha tilstrekkelig entropi. Utfordringen ved å generere virkelig tilfeldige tall på en sikker måte er stor, og har blitt adressert ved hjelp av mange metoder av forskjellige kryptografiske systemer. Det finnes en RFC som omhandler det å generere slumptall. Noen operativsystemer inkluderer verktøy for å innhente entropi ved å ta tiden på uforutsebare operasjoner slik som bevegelser på lesehodet til en harddisk. For å generere små mengder med nøkkelmateriale, vil terningkast være en god kilde til tilfeldighet med høy kvalitet.

Når et passord brukes som krypteringsnøkkel, så vil det i velkonstruerte kryptosystemer først bli sendt gjennom en nøkkel-avledningsfunksjon, som legger til en initialisering, kalt *Salt*, og komprimerer eller ekspanderer sekvensen til den nøkkellengden som er ønsket.

## Referanser