Nøgleafledningsfunktion - Key derivation function

I kryptografi , en nøgle afledning funktion ( KDF ) er en kryptografisk hashfunktion at udleder en eller flere hemmelige nøgler fra en hemmelig værdi såsom en vigtigste nøgle, et password eller et løsen anvendelse af en pseudotilfældig funktion . KDF'er kan bruges til at strække nøgler til længere nøgler eller til at opnå nøgler i et påkrævet format, f.eks. Konvertering af et gruppeelement, der er resultatet af en Diffie -Hellman -nøgleudveksling til en symmetrisk nøgle til brug med AES . Kryptografiske hashfunktioner med nøgle er populære eksempler på pseudosluttelige funktioner, der bruges til nøgleudledning.

Nøgleudledning

Den oprindelige anvendelse for en KDF er nøgledivation, generering af nøgler fra hemmelige adgangskoder eller adgangskoder. Variationer på dette tema omfatter:

  • I forbindelse med ikke-hemmelige parametre for at udlede en eller flere nøgler fra en fælles hemmelig værdi (som undertiden også kaldes " nøglespredning "). Sådan anvendelse kan forhindre en angriber, der får en afledt nøgle, i at lære nyttig information om enten den inputhemmelige værdi eller en af ​​de andre afledte nøgler. En KDF kan også bruges til at sikre, at afledte nøgler har andre ønskelige egenskaber, såsom at undgå "svage nøgler" i nogle specifikke krypteringssystemer.
  • Som komponenter i flerpartsnøgle -aftaleprotokoller . Eksempler på sådanne centrale afledningsfunktioner inkluderer KDF1, defineret i IEEE Std 1363-2000 og lignende funktioner i ANSI X9.42.
  • At udlede nøgler fra hemmelige adgangskoder eller adgangssætninger (en adgangskodebaseret KDF ).
  • For at udlede nøgler af forskellig længde fra de leverede: et eksempel på KDF'er designet til dette formål er HKDF .
  • Nøgletrækning og nøgleforstærkning.

Nøgletrækning og nøgleforstærkning

Nøglederiveringsfunktioner bruges også i applikationer til at udlede nøgler fra hemmelige adgangskoder eller adgangssætninger, som typisk ikke har de ønskede egenskaber til at blive brugt direkte som kryptografiske nøgler. I sådanne applikationer anbefales det generelt, at nøglederiveringsfunktionen gøres bevidst langsom for at forstyrre brute-force-angreb eller ordbogsangreb på adgangskoden eller adgangsfraseindtastningsværdien.

En sådan anvendelse kan udtrykkes som DK = KDF (nøgle, salt, iterationer) , hvor DK er den afledte nøgle, KDF er nøglen afledning funktion , nøgle er den oprindelige nøgle eller adgangskode, salt er et tilfældigt tal, der virker som kryptografisk salt , og iterationer refererer til antallet af iterationer af en underfunktion. Den afledte nøgle bruges i stedet for den originale nøgle eller adgangskode som nøglen til systemet. Saltets værdier og antallet af iterationer (hvis det ikke er rettet) gemmes med den hashede adgangskode eller sendes som klar tekst (ukrypteret) med en krypteret besked.

Vanskeligheden ved et brutalt kraftangreb øges med antallet af iterationer. En praktisk grænse for iterationstællingen er brugernes uvilje til at tolerere en mærkbar forsinkelse i at logge ind på en computer eller se en dekrypteret besked. Brugen af salt forhindrer angriberne i at forberede en ordbog med afledte nøgler.

En alternativ tilgang, kaldet nøgleforstærkning , forlænger nøglen med et tilfældigt salt, men derefter (i modsætning til ved nøgletrækning) sletter saltet sikkert. Dette tvinger både angriberen og legitime brugere til at udføre en brute-force-søgning efter saltværdien. Selvom papiret, der introducerede nøgleudstrækning, henviste til denne tidligere teknik og bevidst valgte et andet navn, bruges udtrykket "nøgleforstærkning" nu (uden tvivl forkert) til at referere til nøgletrækning.

Adgangskode hash

På trods af deres oprindelige brug til nøgleudledning er KDF'er muligvis bedre kendt for deres brug i adgangskodehashing ( adgangskontrol ved hash -sammenligning ), som de bruges af passwd -filen eller skyggeadgangskodefil . Password-hashfunktioner bør være relativt dyre at beregne i tilfælde af brute-force-angreb, og nøgleudstrækningen af KDF'er giver tilfældigt denne egenskab. De ikke-hemmelige parametre kaldes " salt " i denne sammenhæng.

I 2013 blev der annonceret en Password Hashing -konkurrence om at vælge en ny, standardalgoritme til password -hash. Den 20. juli 2015 sluttede konkurrencen, og Argon2 blev annonceret som den endelige vinder. Fire andre algoritmer modtog særlig anerkendelse: Catena, Lyra2, Makwa og yescrypt.

Historie

Den første bevidst langsomme (nøgleudstrækning) adgangskodebaserede nøglederiveringsfunktion blev kaldt " krypt " (eller "krypt (3)" efter dens man-side ) og blev opfundet af Robert Morris i 1978. Den ville kryptere en konstant (nul) , ved hjælp af de første 8 tegn i brugerens adgangskode som nøgle ved at udføre 25 iterationer af en modificeret DES- krypteringsalgoritme (hvor et 12-bit tal læst fra real-time computerur bruges til at forstyrre beregningerne). Det resulterende 64-bit nummer kodes som 11 udskrivbare tegn og gemmes derefter i Unix- adgangskodefilen. Selvom det var et stort fremskridt dengang, har stigninger i processorhastigheder siden PDP-11- æra gjort brute-force-angreb mod krypt mulig, og fremskridt inden for lagring har gjort 12-bit salt utilstrækkeligt. Kryptfunktionens design begrænser også brugeradgangskoden til 8 tegn, hvilket begrænser nøglerummet og gør stærke adgangssætninger umulige.

Selvom høj gennemstrømning er en ønskelig egenskab i generelle hashfunktioner, er det modsatte tilfældet i adgangskode-sikkerhedsprogrammer, hvor forsvar mod brute-force-revner er en primær bekymring. Den voksende brug af massivt parallelle hardware såsom GPU'er, FPGA'er og endda ASIC'er til brute-force cracking har gjort valget af en passende algoritme endnu mere kritisk, fordi den gode algoritme ikke kun skal håndhæve en vis beregningsomkostning ikke kun på CPU'er, men modstår også omkostnings-/ydelsesfordelene ved moderne massivt parallelle platforme til sådanne opgaver. Forskellige algoritmer er designet specielt til dette formål, herunder bcrypt , scrypt og for nylig Lyra2 og Argon2 (sidstnævnte er vinderen af Password Hashing Competition ). Det store Ashley Madison-databrud , hvor omkring 36 millioner passwords-hash blev stjålet af angribere, illustrerede betydningen af ​​valg af algoritme til sikring af adgangskoder. Selvom bcrypt blev anvendt til at beskytte hash (hvilket gør storskala brute-force-krakning dyrt og tidskrævende), indeholdt en betydelig del af regnskaberne i de kompromitterede data også en password-hash baseret på den hurtige generelle MD5- algoritme, som gjorde det er muligt for over 11 millioner af adgangskoderne at blive revnet i løbet af få uger.

I juni 2017 udsendte The US National Institute of Standards and Technology (NIST) en ny revision af deres retningslinjer for digital godkendelse, NIST SP 800-63B-3, hvoraf det fremgik, at: "Verifikatorer SKAL gemme hukommelser udenad (dvs. adgangskoder) i en form der er modstandsdygtig over for offlineangreb. Memoriserede hemmeligheder SKAL saltes og hashes ved hjælp af en passende envejs nøglederiveringsfunktion. Nøglerederivationsfunktioner tager et kodeord, et salt og en omkostningsfaktor, da input derefter genererer en password-hash. Deres formål er at gøre hvert forsøg på at gætte en adgangskode af en angriber, der har fået en hash -kode til en adgangskode, dyrt og derfor omkostningerne ved et gætende angreb høje eller uoverkommelige. "

Moderne adgangskodebaserede nøglederiveringsfunktioner , såsom PBKDF2 (specificeret i RFC 2898), er baseret på en anerkendt kryptografisk hash, såsom SHA-2 , bruger mere salt (mindst 64 bit og tilfældigt valgt) og et højt iterationstal. NIST anbefaler et minimum af iteration på 10.000. "For særligt kritiske nøgler eller for meget kraftfulde systemer eller systemer, hvor brugeropfattet ydeevne ikke er kritisk, kan en iterationstælling på 10.000.000 være passende."

Referencer

Yderligere læsning