Kryptering og hashing. Forskel og anvendelse. Hvad er de vigtige punkter i kryptografiske hash-funktioner? Hvad er kravene til kryptografiske hash-funktioner?

Hash-funktioner finder deres anvendelse i en bred vifte af informationsteknologiindustrier. De er designet til på den ene side at forenkle udvekslingen af ​​data mellem brugere og behandlingen af ​​filer, der bruges til forskellige formål, og på den anden side at optimere algoritmer til at sikre adgangskontrol til relevante ressourcer. Hash-funktionen er et af nøgleværktøjerne til at sikre adgangskodebeskyttelse af data, samt organisere udvekslingen af ​​dokumenter, der er underskrevet ved hjælp af en elektronisk digital signatur. Der er et stort antal standarder, hvorigennem filcaching kan udføres. Mange af dem blev udviklet af russiske specialister. Hvilke typer hash-funktioner kan præsenteres i? Hvad er de vigtigste mekanismer for deres praktiske anvendelse?

Hvad er det?

Lad os først undersøge konceptet med en hashfunktion. Dette udtryk forstås normalt som en algoritme til at konvertere en vis mængde information til en kortere sekvens af tegn ved hjælp af matematiske metoder. Den praktiske betydning af hash-funktionen kan ses på en række forskellige områder. Således kan de bruges, når du kontrollerer filer og programmer for integritet. Kryptografiske hash-funktioner bruges også i krypteringsalgoritmer.

Egenskaber

Lad os overveje de vigtigste egenskaber ved de algoritmer, der undersøges. Blandt dem:

  • tilstedeværelsen af ​​interne algoritmer til at konvertere data af den oprindelige længde til en kortere sekvens af tegn;
  • åben for kryptografisk verifikation;
  • tilstedeværelsen af ​​algoritmer, der giver dig mulighed for pålideligt at kryptere de originale data;
  • tilpasningsevne til dekryptering ved brug af lille computerkraft.

Andre vigtige egenskaber ved hash-funktionen omfatter:

  • evne til at behandle indledende dataarrays af vilkårlig længde;
  • generere hash-blokke af en fast længde;
  • fordel funktionsværdierne ved udgangen jævnt.

De overvejede algoritmer antager også følsomhed over for inputdata på 1-bit niveau. Det vil sige, at selvom der relativt set er mindst 1 bogstavsændring i kildedokumentet, vil hash-funktionen se anderledes ud.

Krav til hash-funktioner

Der er en række krav til hash-funktioner beregnet til praktisk brug i et bestemt område. For det første skal den tilsvarende algoritme være følsom over for ændringer i den interne struktur af de hash-dokumenter. Det vil sige, at i hash-funktionen, hvis vi taler om en tekstfil, skal afsnitsomlægninger og bindestreger genkendes. På den ene side ændres indholdet af dokumentet ikke, på den anden side justeres dets struktur, og denne proces skal genkendes under hashing. For det andet skal den pågældende algoritme transformere dataene på en sådan måde, at den omvendte operation (konvertering af hashen til det originale dokument) er umulig i praksis. For det tredje skal hashfunktionen involvere brugen af ​​algoritmer, der praktisk talt eliminerer muligheden for dannelsen af ​​den samme sekvens af tegn i form af en hash, med andre ord fremkomsten af ​​såkaldte kollisioner. Vi vil se på deres essens lidt senere.

De bemærkede krav, som en hashfunktionsalgoritme skal opfylde, kan hovedsageligt opnås ved brug af komplekse matematiske tilgange.

Struktur

Lad os undersøge, hvordan strukturen af ​​de undersøgte funktioner kan være. Som vi bemærkede ovenfor, er et af hovedkravene til de overvejede algoritmer at sikre ensrettet kryptering. En person, der kun har en hash, burde praktisk talt være ude af stand til at få det originale dokument fra den.

I hvilken struktur kan en hashfunktion, der bruges til sådanne formål, repræsenteres? Et eksempel på dens sammensætning kunne være som følger: H (hash, det vil sige hash) = f (T (tekst), H1), hvor H1 er tekstbehandlingsalgoritmen T. Denne funktion hasheser T på en sådan måde, at uden viden af H1 kan den åbnes, da en fuldgyldig én-fil vil være næsten umulig.

Brug af hash-funktioner i praksis: download af filer

Lad os nu studere mere detaljeret mulighederne for at bruge hash-funktioner i praksis. Brugen af ​​passende algoritmer kan bruges, når man skriver scripts til download af filer fra internetservere.

I de fleste tilfælde bestemmes en vis kontrolsum for hver fil - dette er hashen. Det skal være det samme for objektet, der er placeret på serveren og downloadet til brugerens computer. Hvis dette ikke er tilfældet, åbner filen muligvis ikke eller starter muligvis ikke korrekt.

Hash-funktion og digital signatur

Brugen af ​​hash-funktioner er almindelig, når man organiserer udveksling af dokumenter, der indeholder en digital signatur. I dette tilfælde hashes filen, der signeres, så dens modtager kan bekræfte, at den er ægte. Selvom hash-funktionen ikke formelt er inkluderet i strukturen af ​​den elektroniske nøgle, kan den optages i flashhukommelsen på den hardware, der bruges til at signere dokumenter, såsom eToken.

En elektronisk signatur er kryptering af en fil ved hjælp af offentlige og private nøgler. Det vil sige, at en meddelelse, der er krypteret ved hjælp af en privat nøgle, vedhæftes kildefilen, og den digitale signatur verificeres ved hjælp af en offentlig nøgle. Hvis hash-funktionen af ​​begge dokumenter matcher, genkendes modtagerens fil som ægte, og afsenderens signatur genkendes som korrekt.

Hashing, som vi bemærkede ovenfor, er ikke direkte en komponent af den digitale signatur, men det giver mulighed for meget effektivt at optimere algoritmerne til brug af en elektronisk signatur. Så det er faktisk kun hashen, der kan krypteres, og ikke selve dokumentet. Som følge heraf øges hastigheden af ​​filbehandlingen betydeligt, og det bliver samtidig muligt at tilvejebringe mere effektive digitale signaturbeskyttelsesmekanismer, da vægten i computeroperationer i dette tilfælde ikke vil blive lagt på behandling af de originale data, men på at sikre signaturens kryptografiske styrke. Hash-funktionen gør det også muligt at signere en række forskellige datatyper, ikke kun tekst.

Kontrol af adgangskoder

Et andet muligt anvendelsesområde for hashing er organiseringen af ​​adgangskodebekræftelsesalgoritmer etableret for at begrænse adgangen til visse filressourcer. Hvordan kan visse typer hash-funktioner bruges til at løse sådanne problemer? Meget simpelt.

Faktum er, at på de fleste servere, hvor adgangen er underlagt begrænsninger, gemmes adgangskoder i form af hash-værdier. Dette er ret logisk - hvis adgangskoder blev præsenteret i almindelig tekstform, kunne hackere, der fik adgang til dem, nemt læse hemmelige data. Til gengæld er det ikke nemt at beregne en adgangskode ud fra en hash.

Hvordan verificeres brugeradgang ved brug af de pågældende algoritmer? Det kodeord, som brugeren indtaster, kontrolleres i forhold til det, der er registreret i hash-funktionen, som er gemt på serveren. Hvis værdierne af tekstblokkene matcher, får brugeren den nødvendige adgang til ressourcer.

Den enkleste hash-funktion kan bruges som et adgangskodekontrolværktøj. Men i praksis bruger it-specialister oftest komplekse flertrins kryptografiske algoritmer. Som regel suppleres de med brug af standarder for datatransmission over en sikker kanal - således at hackere ikke kan opdage eller beregne det kodeord, der sendes fra brugerens computer til serverne - før det kontrolleres mod hashed tekstblokke.

Hash funktion kollisioner

Teorien om hashfunktioner sørger for et sådant fænomen som kollision. Hvad er dens essens? En hash-kollision er en situation, hvor to forskellige filer har den samme hash-kode. Dette er muligt, hvis længden af ​​måltegnsekvensen er lille. I dette tilfælde vil sandsynligheden for et hash-match være højere.

For at undgå kollisioner anbefales det især at bruge en dobbeltalgoritme kaldet hashfunktions-hashing. Det involverer dannelsen af ​​åben og lukket kode. Mange programmører anbefaler, når de løser vigtige problemer, ikke at bruge hash-funktioner i tilfælde, hvor dette ikke er nødvendigt, og altid at teste de tilsvarende algoritmer for den bedste kompatibilitet med visse nøgler.

Udseendehistorie

Grundlæggerne af teorien om hashfunktioner kan betragtes som forskerne Carter, Wegman, Simonson og Bierbrauer. I de første versioner blev de tilsvarende algoritmer brugt som værktøjer til at generere unikke billeder af karaktersekvenser af vilkårlig længde med det efterfølgende formål at identificere dem og kontrollere for ægthed. Til gengæld skulle hashen, i overensstemmelse med de angivne kriterier, have en længde på 30-512 bit. En særlig nyttig egenskab ved de tilsvarende funktioner blev anset for at være dens egnethed til brug som en ressource til hurtigt at søge efter filer eller sortere dem.

Populære hashing-standarder

Lad os nu overveje, i hvilke populære standarder hash-funktioner kan repræsenteres. Blandt disse er CRC. Denne algoritme er en cyklisk kode, også kaldet en kontrolsum. Denne standard er kendetegnet ved enkelhed og samtidig universalitet - den kan bruges til at hash det bredeste udvalg af data. CRC er en af ​​de mest almindelige ikke-kryptografiske algoritmer.

Til gengæld er MD4- og MD5-standarderne meget brugt i kryptering. En anden populær kryptografisk algoritme er SHA-1. Den er især kendetegnet ved en hash-størrelse på 160 bit, hvilket er større end MD5 – denne standard understøtter 128 bit. Der er russiske standarder, der regulerer brugen af ​​hash-funktioner - GOST R 34.11-94, såvel som GOST R 34.11-2012, som erstattede det. Det kan bemærkes, at hashværdien leveret af de algoritmer, der er vedtaget i Den Russiske Føderation, er 256 bit.

De pågældende standarder kan klassificeres på forskellige grunde. For eksempel er der dem, der bruger blok og specialiserede algoritmer. Enkelheden af ​​beregninger baseret på den første type standarder er ofte ledsaget af deres lave hastighed. Som et alternativ til blokalgoritmer kan de, der kræver en mindre mængde nødvendige beregningsoperationer, derfor bruges. Højhastighedsstandarder omfatter normalt især de ovennævnte MD4, MD5 samt SHA. Lad os se nærmere på detaljerne ved specielle hashing-algoritmer, der bruger SHA som eksempel.

Funktioner i SHA-algoritmen

Brugen af ​​hash-funktioner baseret på SHA-standarden udføres oftest i udviklingen af ​​digitale signaturværktøjer til DSA-dokumenter. Som vi bemærkede ovenfor, understøtter SHA-algoritmen en hash på 160 bit (giver en såkaldt "digest" af tegnsekvensen). Til at begynde med opdeler den betragtede standard dataarrayet i blokke på 512 bit. Hvis det er nødvendigt, hvis længden af ​​den sidste blok ikke når det angivne ciffer, suppleres filstrukturen med 1 og det nødvendige antal nuller. Også i slutningen af ​​den tilsvarende blok er der skrevet en kode, der fastsætter længden af ​​meddelelsen. Algoritmen, der overvejes, bruger 80 logiske funktioner, hvorigennem 3 ord, præsenteret i 32 bit, behandles. SHA-standarden giver også mulighed for brug af 4 konstanter.

Sammenligning af hashing-algoritmer

Lad os studere, hvordan egenskaberne af hash-funktioner relateret til forskellige standarder korrelerer ved at bruge eksemplet med at sammenligne egenskaberne ved den russiske standard GOST R 34.11-94 og den amerikanske SHA, som vi undersøgte ovenfor. Først og fremmest skal det bemærkes, at algoritmen udviklet i Den Russiske Føderation forudsætter implementering af 4 krypteringsoperationer per 1 cyklus. Det svarer til 128 runder. Til gengæld forventes der i løbet af 1 runde, når SHA bruges, at blive beregnet omkring 20 kommandoer, mens der er 80 runder i alt. Således tillader brug af SHA 512 bits kildedata at blive behandlet inden for 1 cyklus. Mens den russiske standard er i stand til at udføre operationer i en cyklus på 256 bit data.

Specifikationer for den seneste russiske algoritme

Vi bemærkede ovenfor, at GOST R 34.11-94-standarden blev erstattet af en nyere - GOST R 34.11-2012 "Stribog". Lad os undersøge dets detaljer mere detaljeret.

Ved at bruge denne standard kan kryptografiske hash-funktioner implementeres, som i tilfældet med algoritmerne diskuteret ovenfor. Det kan bemærkes, at den seneste russiske standard understøtter en 512-bit input-datablok. De vigtigste fordele ved GOST R 34.11-2012:

  • højt niveau af sikkerhed mod brud på koder;
  • pålidelighed, understøttet af brugen af ​​gennemprøvede designs;
  • hurtig beregning af hash-funktionen, fravær af transformationer i algoritmen, der komplicerer designet af funktionen og bremser beregningen.

De bemærkede fordele ved den nye russiske kryptografiske krypteringsstandard gør det muligt at bruge den, når du organiserer dokumentflow, der opfylder de strengeste kriterier, der er foreskrevet i bestemmelserne i reguleringslovgivningen.

Specifikationer for kryptografiske hash-funktioner

Lad os se nærmere på, hvordan de typer algoritmer, vi udforsker, kan bruges inden for kryptografi. Nøglekravet til de tilsvarende funktioner er modstand mod kollisioner, som vi nævnte ovenfor. Det vil sige, at duplikerede hash-funktionsværdier ikke bør genereres, hvis disse værdier allerede er til stede i strukturen af ​​den tilstødende algoritme. Kryptografiske funktioner skal også opfylde de andre kriterier, der er nævnt ovenfor. Det er klart, at der altid er en eller anden teoretisk mulighed for at gendanne den originale fil baseret på hashen, især hvis et kraftfuldt computerværktøj er tilgængeligt. Et sådant scenario forventes dog at blive minimeret takket være pålidelige krypteringsalgoritmer. Det vil således være meget vanskeligt at beregne en hashfunktion, hvis dens beregningsmæssige styrke svarer til formlen 2^(n/2).

Et andet vigtigt kriterium for en kryptografisk algoritme er ændringen i hashen i tilfælde af korrektion af det originale dataarray. Vi bemærkede ovenfor, at krypteringsstandarder skal være 1-bit følsomme. Denne egenskab er således en nøglefaktor for at sikre pålidelig adgangskodebeskyttelse af adgang til filer.

Iterative skemaer

Lad os nu studere, hvordan kryptografiske hashing-algoritmer kan konstrueres. Blandt de mest almindelige ordninger til at løse dette problem er brugen af ​​en iterativ sekventiel model. Det er baseret på brugen af ​​den såkaldte komprimeringsfunktion, hvor antallet af input-bits er væsentligt større end dem, der fanges ved udgangen.

Selvfølgelig skal komprimeringsfunktionen opfylde de nødvendige kryptografiske styrkekriterier. I et interaktivt skema er den første operation til at behandle inputdatastrømmen opdelt i blokke, hvis størrelse beregnes i bits. Den tilsvarende algoritme bruger også midlertidige variabler af et givet antal bits. Et velkendt tal bruges som den første værdi, mens efterfølgende datablokke kombineres med værdien af ​​den pågældende funktion som output. Hashværdien bliver outputbits for den sidste iteration, som tager højde for hele inputstrømmen, inklusive den første værdi. Den såkaldte "lavineeffekt" af hashing er tilvejebragt.

Den største vanskelighed, der karakteriserer hashing implementeret som et iterativt skema, er, at hash-funktioner nogle gange er svære at konstruere, hvis inputstrømmen ikke er identisk med størrelsen af ​​den blok, som den oprindelige dataarray er opdelt i. Men i dette tilfælde kan hashing-standarden indeholde algoritmer, hvormed den oprindelige strøm kan udvides på en eller anden måde.

I nogle tilfælde kan såkaldte multi-pass algoritmer bruges i processen med databehandling inden for det iterative skema. De foreslår dannelsen af ​​en endnu mere intens "lavineeffekt." Et sådant scenarie involverer dannelsen af ​​gentagne datasæt, og først for det andet sker der ekspansion.

Bloker algoritme

Kompressionsfunktionen kan også være baseret på blokalgoritmen, hvormed kryptering udføres. For at øge sikkerhedsniveauet kan du således bruge datablokke, der er genstand for hashing ved den aktuelle iteration, som en nøgle, og resultatet af operationer opnået under udførelsen af ​​komprimeringsfunktionen før - som input. Som et resultat vil den sidste iteration give output fra algoritmen. Sikkerheden ved hashing vil korrelere med robustheden af ​​den anvendte algoritme.

Men som vi bemærkede ovenfor, i betragtning af forskellige typer hash-funktioner, er blokalgoritmer ofte ledsaget af behovet for at bruge stor computerkraft. Hvis de ikke er tilgængelige, er filbehandlingshastigheden muligvis ikke tilstrækkelig til at løse praktiske problemer forbundet med brugen af ​​hash-funktioner. Samtidig kan den nødvendige kryptografiske styrke opnås med et lille antal operationer med kildedatastrømme, især de algoritmer, vi har overvejet – MD5, SHA og russiske kryptografiske krypteringsstandarder – er tilpasset til at løse sådanne problemer.

Om MD5-hashværdier, og det accepterede svar forvirrede mig. En af hovedegenskaberne, som jeg forstår det, ved en kryptografisk hashfunktion er, at det er umuligt at finde to forskellige beskeder (input) med samme hashværdi.

Imidlertid er konsensussvaret på spørgsmålet: Hvorfor er MD5-hashværdier ikke reversible? Fordi et uendeligt antal input-linjer vil generere det samme output. Dette forekommer mig fuldstændigt modstridende.

Også det faktum, at algoritmerne er offentlige, men hashværdierne stadig er irreversible, er en smule undervældende for mig. Er det, fordi der altid er datatab i hash-funktionen, så der ikke er nogen måde at fortælle, hvilke data der blev smidt væk?

Hvad sker der, når størrelsen af ​​inputdataene er mindre end en fast størrelse af outputdataene (f.eks. hashing adgangskoden "abc")?

Okay, lad mig se om jeg har ret:

  • Det er faktisk meget svært at udlede fra en hash fordi der er et uendeligt antal input linjer, der vil generere det samme output(irreversibel ejendom).
  • Imidlertid Søg selv en enkelt forekomst af flere inputstrenge, der genererer det samme output, er også meget tungt (kollisionstolerant egenskab).

6 svar

Du kan blive forvirret, fordi svaret på det spørgsmål, du citerer, er forvirrende. Et af kravene til en kryptografisk hashfunktion er, at den skal være preimage-resistent. Det vil sige, at hvis du kender MD5(x), men ikke beskeden x, så er det svært at finde nogen x" (enten lig med x eller forskellig fra x), sådan at MD5(x") = MD5(x).

Preimage stabilitet er en anden egenskab end reversibilitet. Funktionen er inverterbar, givet y = f(x), er der præcis et x, der passer (let eller ej). Lad os f.eks. definere f (x) = x mod 10. Så er f ikke inverterbar. Fra f(x) = 7 kan du ikke se, om x var 17, 27 eller noget andet. Men f er ikke preimage stabil, da værdierne af x" er sådan, at f(x) = 7 er let at finde. x" = 17, 27, 12341237 osv. alle arbejder.

Når du laver kryptografi, vil du normalt have funktioner, der er preimage-resistente (og andre egenskaber som kollisionsmodstand), ikke kun ting, der ikke er inverterbare.

Advarsel: langt svar

Jeg tror, ​​at alle disse svar mangler en meget vigtig egenskab ved kryptografiske hash-funktioner: ikke alene er det umuligt at beregne den oprindelige meddelelse, der blev hashed for at producere en given hash, det er umuligt at beregne enhver meddelelse, der vil hash-værdien. Dette kaldes modstandens forsyn.

(Med "umuligt" - jeg mener, at ingen ved, hvordan det skal gøres på kortere tid, end det tager at gætte alle mulige beskeder, indtil du gætter den, der er blevet hashed i din hash.)

(På trods af den populære overbevisning om, at MD5 er upålidelig, er MD5 stadig præimage-resistent. Enhver, der ikke tror på mig, kan give mig noget, der hashes til . Hvad MD5 ikke har, er kollisionsmodstand, hvilket er noget helt andet.)

Hvis den eneste grund til, at du ikke kunne "arbejde baglæns" i en kryptografisk hash-funktion, var, fordi hash-funktionen kasserer data for at skabe hashen, så garanterer det ikke forsynsmodstand: du kan stadig "arbejde baglæns" , og bare indsæt tilfældige data overalt, hvor hash-funktionen kasserer data, og indtil du kommer med en original besked, vil du stadig komme med en besked, der hashes den ønskede hash-funktionsværdi. Men det kan du ikke.

Så spørgsmålet opstår: hvorfor ikke? (Eller med andre ord, hvordan gør man et funktions preimage stabilt?)

Svaret er, at kryptografiske hashfunktioner efterligner kaotiske systemer. De tager din besked, deler den op i blokke, blander de blokke rundt, blokerer nogle af blokkene, blander de blokke rundt og gentager dette mange gange (godt, en kryptografisk hash-funktion gør dette, andre har deres egne metoder). Da blokke interagerer med hinanden, skal blok C ikke kun interagere med blok D for at skabe blok A, men den skal interagere med blok E for at skabe blok B. Nu kan du selvfølgelig finde værdierne af blokke C, D , E, som vil generere blokke A og B i din hashværdi, men når du går længere tilbage skal du bruge en blok F, der interagerer med C for at gøre D og med E for at gøre B, og sådan en blok kan ikke gøre som i kl. den samme tid! Du må have gættet de forkerte værdier for C, D og E.

Selvom ikke alle kryptografiske hash-funktioner er nøjagtigt som den, der er beskrevet ovenfor med blokkommunikation, har de samme idé: Hvis du prøver at "arbejde baglæns", vil du ende med en masse blindgyder og spildtid, når du prøver nok værdier at oprette et preimage , er i størrelsesordenen hundreder til millioner af år (afhængigt af hash-funktionen), ikke meget bedre end den tid, det ville tage at prøve beskeder, indtil du finder en, der virker.

1: Hovedformålet med en hash er at kortlægge et meget, meget stort rum til et mindre, men stadig meget stort rum (som MD5, som tager "hvad som helst" og konverterer det til et 2^128 rum - stort, men ikke så stor som alef-0.)

Ud over andre funktioner fylder gode hashes destinationsrummet ensartet. Dårlige hashes fylder rummet på en klumpet måde og kommer med den samme hash for mange almindelige input.

Forestil dig en dum sum() hash-funktion, der bare tilføjer alle cifrene i inputnummeret: det lykkes at kortlægge ned, men der er en masse kollisioner (input med samme output som 3 og 12 og 21) i den nederste ende af outputrummet, og den øverste ende af rummet er næsten tom. Som følge heraf udnytter den meget dårlig plads, bliver let hacket osv.

Så en god hash, der endda bruger destinationsrummet, vil gøre det svært at finde to input med samme output, ganske enkelt ved en tilfældighed: hvis MD5 er perfekt, vil sandsynligheden for, at to input har samme output være 2^-128. Det er ret anstændige odds: det bedste du kan gøre uden at ty til mere outputplads. (I sandhed er MD5 ikke perfekt, hvilket er en af ​​de ting, der gør den sårbar.)

Men det vil stadig være sandt, at et enormt antal input vil afbildes til enhver given hash, da inputrummet er "uendeligt", og at dividere uendeligt med 2^128 stadig giver dig uendeligt.

2: Ja, hashes forårsager altid datatab, medmindre dit output-rum er det samme som eller større end dit input-rum - i så fald behøver du sandsynligvis ikke hash!

3: For mindre indløb er den bedste praksis et saltvandsindløb. Faktisk er dette god praksis for enhver kryptografisk hashing, for ellers kan en angriber give dig specifikke input og forsøge at finde ud af, hvilken hash du bruger. Et "salt" er blot en masse ekstra information, som du tilføjer (eller tilføjer) til dit input; så får du resultatet.

redigere. I kryptografi er det også vigtigt, at hash-funktionen er modstandsdygtig over for preimage-angreb, det er svært at gætte input for et givet output, selv om man kender mange andre input/output-par. men da det ødelægger data, er det måske ikke nemt at fortryde).

Disse er egenskaber ved hash-funktioner generelt.

En advarsel, dog bør MD5 ikke længere bruges på grund af sårbarheder fundet i den. Tjek sektionen sårbarheder og eksterne links, der beskriver disse angreb. http://en.wikipedia.org/wiki/Md5 Du kan lave MD5-kollision ved kun at ændre 128 bits i meddelelsen.

SHA-1 er sikker til simpel hash, selvom der er nogle angreb, der vil gøre det svagere for velfinansierede organisationer (regeringer, store virksomheder).

SHA-256 er et sikkert udgangspunkt for teknologier over de næste par årtier.

Hash funktion hedder envejsfunktion, beregnet til at modtage fordøje eller "fingeraftryk" af en fil, besked eller en eller anden blok af data.

Hash kode oprettet af funktion H:

Hvor M er et budskab af vilkårlig længde og h er hash-kode fast længde.

Lad os overveje de krav, der skal opfyldes hash funktion så det kan bruges som autentificering Beskeder. Lad os se på et meget simpelt eksempel hash-funktioner. Derefter vil vi analysere flere tilgange til konstruktion hash-funktioner.

Hash funktion H, som bruges til meddelelsesgodkendelse, skal have følgende egenskaber:

1. Hash funktion H skal gælde for en datablok af enhver længde.

2. Hash funktion H skaber et output med fast længde.

3. H (M) er relativt let (i polynomiel tid) at beregne for enhver værdi af M.

4. For enhver given værdi hash-kode h det er beregningsmæssigt umuligt at finde M således, at H (M) = h.

5. For et givet x er det beregningsmæssigt umuligt at finde ud af, at H(y) = H(x).

6. Det er beregningsmæssigt umuligt at finde et vilkårligt par (x, y), således at H (y) = H (x).

Det kræver de tre første ejendomme hash funktion oprettet hash-kode for enhver besked.

Den fjerde egenskab definerer kravet om ensidighed hash-funktioner: let at oprette hash-kode for denne besked, men det er umuligt at gendanne beskeden for denne hash-kode. Denne egenskab er vigtig, hvis godkendelse bruger hash-funktioner omfatter hemmelig værdi. Selve den hemmelige værdi må ikke sendes, dog hvis hash funktion er ikke ensidig, kan modstanderen let afsløre den hemmelige værdi som følger. Når en transmission opsnappes, modtager angriberen beskeden M og hash-kode C = H (SAB || M). Hvis angriberen kan vende om hash funktion, saa kan han derfor faa S AB || M = H-1 (C). Da angriberen nu kender både M og S AB || M, at få S AB er ret nemt.

Den femte egenskab sikrer, at det er umuligt at finde en anden besked, hvis værdi hash-funktioner ville matche betydningen hash-funktioner af denne besked. Dette forhindrer forfalskning autentificering ved brug af krypteret hash-kode. I dette tilfælde kan modstanderen læse beskeden og derfor oprette den hash-kode. Men da fjenden ikke ejer hemmelig nøgle, har den ingen mulighed for at ændre beskeden, uden at modtageren opdager den. Hvis denne egenskab ikke er opfyldt, har angriberen mulighed for at udføre følgende rækkefølge af handlinger: opsnappe meddelelsen og dens krypterede hash-kode, Beregn hash-kode beskeder, skal du oprette en alternativ besked med den samme hash-kode, udskift den originale besked med en falsk. Fordi hash-koder disse beskeder matcher, vil modtageren ikke opdage erstatningen.

Hash funktion, som opfylder de første fem ejendomme kaldes simpel eller svag hash-funktion . Hvis derudover den sjette egenskab er opfyldt, kaldes en sådan funktion stærk hash-funktion . Den sjette egenskab beskytter mod en klasse af angreb kendt som "angreb". fødselsdag ".

Slut på arbejde -

Dette emne hører til sektionen:

Forelæsningsnotater om disciplinen hardware og software til informationssikkerhed, grundlæggende begreber og definitioner

Emne.. grundlæggende begreber og definitioner.. I løbet af de sidste par årtier har krav til informationssikkerhed ændret sig betydeligt før starten på udbredt...

Hvis du har brug for yderligere materiale om dette emne, eller du ikke fandt det, du ledte efter, anbefaler vi at bruge søgningen i vores database over værker:

Hvad vil vi gøre med det modtagne materiale:

Hvis dette materiale var nyttigt for dig, kan du gemme det på din side på sociale netværk:

Alle emner i dette afsnit:

Aktivt angreb
Et aktivt angreb er et angreb, hvor fjenden har mulighed for at ændre sendte beskeder og indsætte sine egne beskeder. Der skelnes mellem følgende typer:

Sikkerhedstjenester
De vigtigste sikkerhedstjenester er følgende: Fortrolighed - forebyggelse af passive angreb på transmitterede eller lagrede data.

Netværksinteraktionsmodel
Modellen for sikker netværksinteraktion generelt kan repræsenteres som følger:

Sikkerhedsmodel for informationssystem
Der er andre sikkerhedsrelaterede situationer, der ikke passer til netværkssikkerhedsmodellen beskrevet ovenfor. Det generelle mønster for disse situationer kan illustreres som følger:

Feistel netværk
Blokalgoritmen konverterer en n-bit blok af klartekst til en n-bit blok af chiffertekst. Antallet af blokke med længden n er 2n. For at transformationen skal være

Krypteringsanalyse
Processen med at forsøge at finde ud af X, K eller begge kaldes kryptoanalyse. Et af de mulige angreb på krypteringsalgoritmen er et brute force angreb, dvs.

Differentiel og lineær kryptoanalyse
Lad os generelt overveje den grundlæggende tilgang, der bruges i differentiel og lineær kryptoanalyse. I begge tilfælde antages det, at et tilstrækkeligt stort antal

Kriterier, der bruges ved udvikling af algoritmer
Under hensyntagen til ovenstående krav antages det generelt, at en symmetrisk krypteringsalgoritme bør: Manipulere data i store blokke, helst i størrelse 16

Designprincipper
Den mest almindelige og bedst kendte symmetriske krypteringsalgoritme er DES (Data Encryption Standard). Algoritmen blev udviklet i 1977, i 1980


Overvej nu rækkefølgen af ​​transformationer brugt i hver runde.

Dekryptering
Dekrypteringsprocessen ligner krypteringsprocessen. Indtastningen til algoritmen er chiffertekst, men Ki-tasterne bruges i omvendt rækkefølge. K16 er brugt

Ulemper ved Double DES
Den enkleste måde at øge nøglelængden på er at genbruge DES med to forskellige nøgler. Krypter ved hjælp af en ukrypteret besked P og to nøgler K1 og K2

Triple DES med to nøgler
En oplagt modforanstaltning til et møde-i-midten-angreb er at bruge en tredje-trins kryptering med tre forskellige nøgler. Dette hæver omkostningerne ved et frontalangreb til 2168

Blowfish algoritme
Blowfish er et Feistel-netværk, hvis antal iterationer er 16. Bloklængden er 64 bit, nøglen kan være en hvilken som helst længde inden for 448 bit. Skønt før

Generering af undernøgler
Undernøgler beregnes ved hjælp af selve Blowfish-algoritmen. 1. Initialiser det første P-array og fire S-bokse med en fast streng. 2. Udfør handlingen

Kryptografisk styrke
Følgende egenskaber ved IDEA karakteriserer dens kryptografiske styrke: 1. Bloklængde: Bloklængden skal være tilstrækkelig til at skjule alle statistiske data.

Sekvens af transformationer af en enkelt runde
Lad os overveje sekvensen af ​​transformationer af en separat runde. Et af hovedelementerne i algoritmen, der sikrer diffusion, er en struktur kaldet MA (multiply/s

Oprettelse af undernøgler
52 16-bit undernøgler oprettes fra 128-bit krypteringsnøglen som følger. De første otte undernøgler, som vi betegner som Z1, Z2, ...,

Dekryptering
Dekrypteringsprocessen ligner krypteringsprocessen. Dekryptering består i at bruge chifferteksten som input til den samme IDEA-struktur, men med et andet sæt

Algoritme GOST 28147
GOST 28147-algoritmen er en indenlandsk standard for symmetriske krypteringsalgoritmer. GOST 28147 blev udviklet i 1989 og er en blokalgoritme

Udførelsesmåder for symmetriske krypteringsalgoritmer
For enhver symmetrisk blokkrypteringsalgoritme er fire udførelsestilstande defineret. ECB - elektronisk kodebog - hver blok på 64 bit er ukrypteret

ECB-tilstand
Denne tilstand er den enkleste tilstand, hvor almindelig tekst behandles sekventielt, blok for blok. Hver blok er krypteret med den samme nøgle. Hvis beskeden er til

CBC-tilstand
For at overvinde manglerne ved ECB anvendes en metode, hvor identiske ukrypterede blokke konverteres til forskellige krypterede. For at gøre dette skal du bruge som input til algoritmen

CFB-tilstand
Blokalgoritmen er designet til at kryptere blokke af en vis længde. Det er dog muligt at konvertere blokalgoritmen til en strømkrypteringsalgoritme ved at bruge de to sidstnævnte tilstande. In-line

OFB-tilstand
Denne tilstand ligner CFB-tilstand. Forskellen er, at outputtet fra algoritmen i OFB-mode føres tilbage i registeret, mens resultatet i CFB-mode føres tilbage i registeret.

Ulykke
Typisk, når man opretter en række pseudorandom-tal, antages det, at den givne talrække skal være tilfældig i en bestemt statistisk forstand. Næste


Kilder til virkelig tilfældige tal er svære at finde. Fysiske støjgeneratorer såsom ioniserende strålingshændelsesdetektorer, gasudladningsrør og utætte kondensatorer kan være

Pseudo-tilfældige tal generatorer
Den første udbredte teknologi til at generere et tilfældigt tal var algoritmen foreslået af Lechmer, som er kendt som den lineære kongruente metode. Denne algoritme er parametriseret af fire tal

Round-robin kryptering
Ris. 3.14.Cyklisk kryptering I dette tilfælde

ANSI X9.17 pseudorandom tal generator
En af de mest kraftfulde pseudorandom-talgeneratorer er beskrevet i ANSI X9.17. Applikationer, der bruger denne teknologi, omfatter finansiel sikkerhed og PGP-applikationer.

Historisk reference
Den 2. januar 1997 annoncerede NIST starten på udviklingen af ​​AES, og den 12. september 1997 blev der stillet formelle algoritmekrav til rådighed. Disse krav anførte, at formålet med NI

Finalistoversigt
Alle fem finalister er iterative blokkrypteringsalgoritmer: De definerer en transformation, der gentages et vist antal gange over en blok af data, der skal krypteres eller dekrypteres. Shi

Evalueringskriterium
I september 1997, med annonceringen af ​​kandidatalgoritmerne, definerede NIST et fælles kriterium, som skulle bruges ved sammenligning af algoritmer. Evalueringskriteriet ville være

Kvalitativt eller kvantitativt kriterium
På et af de første planlægningsmøder for anden fase af diskussioner blev muligheden for en kvantitativ tilgang overvejet, hvorved hver algoritme eller kombination af algoritmer ville modtage

Antal AES-algoritmer
Under den første og anden runde af diskussioner blev der fremført flere argumenter vedrørende antallet af algoritmer, der skulle udvælges til inklusion i AES. Derudover blev der gjort

Fallback algoritme
Som bemærket er der en sammenhæng mellem diskussioner om problemet med multiple AES-algoritmer og valget af en fallback-algoritme, især i tilfælde af en enkelt AES-algoritme. Backu

Ændring af algoritmer
Under den første og anden fase af diskussionen blev der noteret interesse for at øge antallet af runder i nogle algoritmer. I mange tilfælde blev stigningen i antallet af runder forklaret. Altså om Rijndael

Maskinordstørrelse
Et af de problemer, der opstår i softwareimplementeringer, er den underliggende arkitektur. De platforme, som NIST udførte test på, er fokuseret på

Softwareimplementeringssprog
Eksekvering afhænger også af brugen af ​​et bestemt sprog (f.eks. assembler, kompileret eller fortolket sprog på højt niveau). I nogle tilfælde spiller specifik software en rolle. Eksisterer

Skift udførelseshastighed afhængigt af nøglelængde
Softwareudførelsen af ​​MARS, RC6 og Serpent ændrer sig ikke ret meget afhængigt af nøglelængden. Men for Rijndael og Twofish, at etablere nøglen eller chifferen

Sammenfatning af eksekveringshastighed på større softwareplatforme
En enorm mængde information er blevet indsamlet om finalisternes hastighed på forskellige softwareplatforme. Disse platforme omfatter 32-bit processorer (implementeringer i C og Java), 64-bit processorer

Miljøer med pladsbegrænsninger
I nogle miljøer, der har små mængder RAM og/eller ROM til formål såsom lagring af kode (normalt i ROM), der repræsenterer dataobjekter såsom S-bokse (som kan

Noter til finalisterne
MARS har visse vanskeligheder på grund af rundens heterogene struktur (fire forskellige typer af runder). S-bokse kræver 2 Kbytes ROM, hvilket ikke er et problem,

Grundlæggende krav til asymmetriske krypteringsalgoritmer
Skabelsen af ​​asymmetriske krypteringsalgoritmer er den største og måske den eneste revolutionerende bedrift i kryptografiens historie. Åbne krypteringsalgoritmer

Krypteringsanalyse af offentlige nøglealgoritmer
Som med symmetrisk kryptering er den offentlige nøglekrypteringsalgoritme sårbar over for brute force-angreb. Modforanstaltningen er standard: brug store nøgler. Kryptosi

Grundlæggende brug af offentlige nøglealgoritmer
De vigtigste anvendelser af offentlige nøglealgoritmer er kryptering/dekryptering, signaturoprettelse og -verifikation og nøgleudveksling. Kryptering med o

Beskrivelse af algoritmen
Algoritmen udviklet af Rivest, Shamir og Adleman bruger eksponentudtryk. Data er krypteret i blokke, hver blok betragtes som et tal mindre end et tal n. Chiffer

Oprettelse af nøgler
Oprettelse af nøgler involverer følgende opgaver: 1. Bestem to primtal p og q. 2. Vælg e og beregn d. Lad os først og fremmest overveje problemerne forbundet med valget af p og q

Diskussion af kryptoanalyse
Vi kan definere fire mulige tilgange til krypteringsanalyse af RSA-algoritmen: 1. Frontalt angreb: prøv alle mulige private nøgler. 2. Dekomponér n i to simple udtryk

Diffie-Hellman nøgleudvekslingsalgoritme
Den første udgivelse af denne offentlige nøglealgoritme dukkede op i et papir af Diffie og Hellman, som introducerede de grundlæggende begreber for offentlig nøglekryptografi og skitserede

Simple hash-funktioner
Alle hash-funktioner udføres som følger. Indgangsværdien (meddelelse, fil osv.) betragtes som en sekvens af n-bit blokke. Indtastningsværdien behandles af efterfølgeren

Brug af en krypteret blokkæde
Der er forskellige hash-funktioner baseret på at skabe en kæde af krypterede blokke, men uden brug af en hemmelig nøgle. En sådan hash-funktion blev foreslået af Rabin.

Trin 4: Bearbejd en sekvens af 512-bit (16-ord) blokke
Grundlaget for algoritmen er et modul bestående af fire cykliske behandlinger, betegnet som HMD5. De fire sløjfer har en lignende struktur, men hver sløjfe bruger en anden elementær logik fu

Trin 5: Afslut
Efter at have behandlet alle L 512-bit blokke, er outputtet fra det L-te trin en 128-bit meddelelsessammenfatning. Lad os se nærmere på logikken i hver af de fire udførelsescyklusser af en 512

MD4 algoritme
MD4-algoritmen er en tidligere udvikling af den samme forfatter, Ron Rivest. Denne algoritme blev oprindeligt offentliggjort i oktober 1990, en let ændret version er blevet offentliggjort

Styrkelse af algoritmen i MD5
MD5-algoritmen har følgende egenskab: hver bit af hashkoden er en funktion af hver bit af inputtet. Kompleks gentagelse af elementære funktioner fF, fG, fH

Trin 4: Behandl beskeden i 512-bit (16-ord) blokke
Grundlaget for algoritmen er et modul bestående af 80 cykliske behandlinger, betegnet som HSHA. Alle 80 cykliske behandlinger har samme struktur.

Trin 5: Afslut
Efter bearbejdning af alle 512-bit blokke er outputtet fra det L-te trin en 160-bit beskedsammenfatning. Lad os se nærmere på logikken i hver af de 80 behandlingscyklusser af en 512-bit

Sammenligning af SHA-1 og MD5
Begge algoritmer, SHA-1 og MD5, stammer fra MD4, så de har meget til fælles. De vigtigste forskelle mellem algoritmerne kan opsummeres. &nbs

Krav til digital signatur
Autentificering beskytter to deltagere, der udveksler beskeder, mod at blive eksponeret for en tredjepart. Enkel autentificering beskytter dog ikke deltagerne mod hinanden

Direkte og voldgift digitale signaturer
Ved brug af en direkte digital signatur er det kun deltagerne selv, der interagerer, dvs. afsender og modtager. Det forudsættes, at modtageren kender afsenderens offentlige nøgle

DSS tilgang
DSS bruger en algoritme, der er designet til kun at blive brugt som en digital signatur. I modsætning til RSA kan den ikke bruges til kryptering eller nøgleudveksling

Signaturbekræftelse
Modtageren udfører signaturverifikation ved hjælp af følgende formler. Det skaber en værdi v, som er en funktion af komponenterne i den delte offentlige nøgle, den offentlige nøgle vil sende

Formulering af problemet

Hash-funktioner, der længe har været brugt i datalogi, er funktioner, matematiske eller på anden måde, der tager som input en streng med variabel længde (kaldet et præbillede) og transformerer den til en streng med en fast, normalt mindre, længde (kaldet en hashværdi) . En simpel hash-funktion kan opfattes som en funktion, der tager et preimage og returnerer en byte, der er en XOR af alle input-bytes. Betydningen af ​​hash-funktionen er at opnå et karakteristisk træk, en pre-image-value, ved hjælp af hvilken forskellige pre-images analyseres ved løsning af det omvendte problem. Da en hash-funktion typisk er et mange-til-én-forhold, er det umuligt at sige med sikkerhed, at to strenge er ens, men de kan bruges til at opnå et rimeligt skøn over nøjagtigheden. En envejs-hash-funktion er en hash-funktion, der kun virker i én retning. Det er nemt at beregne en hashværdi ud fra et preimage, men det er svært at lave et preimage, hvis hashværdi er lig med en given værdi. De tidligere nævnte hash-funktioner er generelt ikke envejs: givet en specifik byte, er det ikke svært at skabe en streng af bytes, der XOR til den givne værdi. Dette er ikke muligt med en envejs hash-funktion. Hash-funktionen er åben, der er ingen hemmelighed bag dens beregning. Sikkerheden ved en envejs hashfunktion ligger netop i dens envejs karakter. Outputtet har ingen synlig afhængighed af input. Ændring af én bit af preimage ændrer (i gennemsnit) halvdelen af ​​bits af hashværdien, som også er kendt som lavineeffekten. Det er beregningsmæssigt umuligt at finde et preimage, der matcher en given hashværdi

Krav

For at få hash-funktionen H betragtes som kryptografisk stærk, skal den opfylde tre grundlæggende krav, som de fleste anvendelser af hash-funktioner i kryptografi er baseret på:

  • Irreversibilitet eller modstand mod restaurering af prototypen: for en given hashværdi m det skal være beregningsmæssigt umuligt at finde en datablok x, for hvilket H(X)=m .
  • Modstand mod kollisioner af den første slags eller restaurering af anden prototype: for en given besked M det må være beregningsmæssigt umuligt at opfange en anden besked N, for hvilket H(N)=H(M) .
  • Modstand mod kollisioner af den anden slags: Det burde være beregningsmæssigt umuligt at matche et par meddelelser (M, M"), der har den samme hash.

Disse krav er ikke uafhængige:

  • En inverterbar funktion er ikke modstandsdygtig over for kollisioner af den første og anden slags.
  • En funktion, der ikke er modstandsdygtig over for kollisioner af den første slags, er ikke modstandsdygtig over for kollisioner af den anden type; det omvendte er ikke sandt.

Det skal bemærkes, at eksistensen af ​​irreversible hash-funktioner, for hvilke det er teoretisk umuligt at beregne et omvendt billede af en given hashværdi, ikke er blevet bevist. Typisk er det kun en beregningsmæssigt vanskelig opgave at finde det omvendte.

Konstruktionsprincipper

Iterativt sekventielt kredsløb

Generelt er konstruktionen af ​​en hash-funktion baseret på et iterativt sekventielt skema (Merkle-Damgard-struktur). Kernen i algoritmen er kompressionsfunktion- transformation k indgang til n output bits, hvor n er længden af ​​hash-funktionen, og k- et hvilket som helst tal større n. I dette tilfælde skal komprimeringsfunktionen opfylde alle kryptografiske styrkebetingelser.

Indgangsstrømmen er opdelt i blokke iflg (k-n) lidt. Algoritmen bruger en midlertidig størrelsesvariabel n bit, hvis begyndelsesværdi antages at være et vilkårligt tal. Hver efterfølgende blok af data kombineres med outputværdien af ​​komprimeringsfunktionen ved den foregående iteration. Hashværdien er outputtet n sidste iterationsbit. Hver bit af hashfunktionens outputværdi afhænger af hele inputdatastrømmen og startværdien. På denne måde opnås en lavineeffekt.

Når man designer hash-funktioner baseret på et iterativt skema, opstår der et problem med størrelsen af ​​inputdatastrømmen. Størrelsen af ​​inputdatastrømmen skal være et multiplum af (k-n). Som regel udvides dataene før starten af ​​algoritmen på en tidligere kendt måde.

Ud over single-pass algoritmer findes der multi-pass algoritmer, hvor lavineeffekten forstærkes yderligere. I dette tilfælde bliver dataene først gentaget og derefter udvidet til den ønskede størrelse.

Kompressionsfunktion baseret på symmetrisk blokalgoritme

En symmetrisk blokkrypteringsalgoritme kan bruges som en komprimeringsfunktion. For at sikre større sikkerhed kan du bruge datablokken beregnet til hashing ved denne iteration som nøglen og resultatet af den tidligere komprimeringsfunktion som input. Så vil resultatet af den sidste iteration være outputtet af algoritmen. I dette tilfælde er hashfunktionens sikkerhed baseret på sikkerheden for den anvendte algoritme.

Normalt, når man konstruerer en hash-funktion, bruges et mere komplekst system. Et generaliseret diagram af en symmetrisk blokkrypteringsalgoritme er vist i fig. 2

Således får vi 64 muligheder for at konstruere en kompressionsfunktion. De fleste af dem er enten trivielle eller usikre. Nedenfor er de fire mest sikre ordninger til alle typer angreb.

Den største ulempe ved hash-funktioner designet baseret på blokalgoritmer er deres lave driftshastighed. Den nødvendige kryptografiske styrke kan opnås med færre operationer på inputdataene. Der er hurtigere hashing-algoritmer designet uafhængigt, fra bunden, baseret på kryptografiske styrkekrav (de mest almindelige af dem er MD5, SHA-1, SHA-2 og GOST R 34.11-94).

Ansøgninger

Elektronisk digital signatur

Elektronisk digital signatur (EDS) er i bund og grund kryptering af en besked ved hjælp af en offentlig nøglealgoritme. Teksten krypteret med den hemmelige nøgle kombineres med den originale besked. Derefter verifikation af signaturen - dekryptering med en offentlig nøgle, hvis den resulterende tekst ligner den originale tekst - er signaturen korrekt.

Ved at bruge en hash-funktion kan du optimere denne algoritme. Det er ikke selve beskeden, der er krypteret, men hashfunktionsværdien taget fra beskeden. Denne metode giver følgende fordele:

  • Reduceret beregningsmæssig kompleksitet. Typisk er et dokument væsentligt større end dets hash.
  • Øget kryptografisk styrke. En kryptoanalytiker kan ikke ved hjælp af en offentlig nøgle vælge en signatur til en besked, men kun for dens hash.
  • Sikring af kompatibilitet. De fleste algoritmer opererer på strenge af databits, men nogle bruger andre repræsentationer. En hash-funktion kan bruges til at konvertere vilkårlig inputtekst til et passende format.

Adgangskodebekræftelse

I de fleste tilfælde gemmes adgangssætninger ikke på mål, kun deres hashværdier gemmes. Det er upraktisk at gemme selve adgangskoderne, da angriberen i tilfælde af uautoriseret adgang til en fil med adgangskoder modtager dem i åben form og umiddelbart klar til brug, og ved lagring af hashværdier lærer han kun hashværdier, der ikke er reversible til originale data. Under godkendelsesproceduren beregnes hashværdien af ​​den indtastede adgangskode og sammenlignes med den gemte.

Et eksempel i dette tilfælde ville være GNU/Linux og Microsoft Windows. De gemmer kun hash-værdier af adgangssætninger fra brugerkonti.

Dette system involverer at sende en besked over en sikker kanal, det vil sige en kanal, hvorfra det er umuligt for en kryptoanalytiker at opsnappe beskeder eller sende sine egne. Ellers kan han opsnappe adgangskodens hashværdi og bruge den til yderligere ulovlig godkendelse. Du kan beskytte dig selv mod sådanne angreb ved at bruge "triple handshake"-metoden.

Lad en bestemt klient, ved navn navn, godkende ved hjælp af en adgangssætning, passere, på en bestemt server. Serveren gemmer hash-funktionsværdien H(pass,R2), hvor R2 er et pseudo-tilfældigt, forudvalgt tal. Klienten sender en anmodning (navn, R1), hvor R1 er et pseudo-tilfældigt tal, nyt hver gang. Som svar sender serveren værdien R2. Klienten beregner hash-funktionsværdien H(R1,H(pass,R2)) og sender den til serveren. Serveren beregner også værdien af ​​H(R1,H(pass,R2)) og sammenligner den med den modtagne. Hvis værdierne stemmer overens, er godkendelsen korrekt.

I en sådan situation bliver adgangskoden ikke gemt åbent på serveren, og selv ved at opsnappe alle meddelelser mellem klienten og serveren, kan kryptanalytikeren ikke gendanne adgangskoden, og den transmitterede hashværdi er forskellig hver gang.

Tilfældigt Oracle

Genkald shuffling-egenskaben, der er iboende for hashing-funktionen: for ethvert argument kan en hash ikke skelnes fra en streng af bit, der er ensartet fordelt over funktionens værdiområde. Hvis vi erstatter det sidste udtryk med sætningen "tilhører en population af ensartet fordelte værdier", får vi en meget kraftig hypotetisk funktion kaldet et tilfældigt orakel. Det har tre egenskaber: determinisme, effektivitet, ensartet fordeling af resulterende værdier. Men alle kendte beregningsmodeller i en eller anden grad svarer ikke til den tilfældige orakelmodel. Ensartetheden og determinismen af ​​mængderne beregnet af et tilfældigt orakel betyder, at entropien af ​​dets resultater er højere end entropien af ​​de tal, der modtages som input. Da blandingsegenskaberne for en hashfunktion kun er en beregningsantagelse, skal en reel hashfunktion kun give beregningsmæssig udskillelighed, det vil sige, at resultaterne skal have en vis sandsynlighedsfordeling i værdiområdet, der ikke kan bestemmes i polynomiel tid. Så rigtige hashing-funktioner imiterer kun adfærden af ​​et tilfældigt orakel, omend med høj nøjagtighed.

Fødselsdags paradoks angreb

Lad os antage, at hash-funktionen h faktisk er et tilfældigt orakel. Kvadratrodsangrebet (Birthday Paradox attack) antager, at for at detektere kollisioner med en sandsynlighed ikke nul, er det tilstrækkeligt at udføre 2 i potensen af ​​|h|/2 tilfældige beregninger af værdien af ​​hashing-funktionen. For at lancere et fødselsdags paradoks angreb skal angriberen generere meddelelses-hashed værdipar, indtil der findes to meddelelser m og m`, der opfylder betingelserne m er ikke lig med m`, h(m)=h(m`). Sådan et meddelelsespar kaldes en kollision af hashing-funktionen h. For eksempel, for SHA-1 hashing-funktionen er betingelsen |h|=160 opfyldt, hvilket betyder, at dens modstand baseret på fødselsdagsparadokset er estimeret til 2 80 .

Sammenlignende egenskaber af de mest berømte funktioner

Der er en lang liste af kryptografiske hash-funktioner, selvom mange har vist sig at være sårbare og ikke bør bruges. Selvom hash-funktionen aldrig er blevet knækket, kan et vellykket angreb mod en svækket variant underminere eksperternes tillid og føre til, at hash-funktionen opgives. For eksempel blev der i august 2004 fundet fejl i en række hash-funktioner, der var populære på det tidspunkt, herunder SHA-0, RIPEMD og MD5. Dette har sat spørgsmålstegn ved den langsigtede sikkerhed af senere algoritmer, der er afledt af disse hash-funktioner – specifikt SHA-1 (en stærk version af SHA-0), RIPEMD-128 og RIPEMD-160 (begge stærke versioner af RIPEMD ). Hverken SHA-0 eller RIPEMD er meget brugt, da de er blevet erstattet af stærkere versioner. Fra 2009 er de to mest anvendte kryptografiske hash-funktioner MD5 og SHA-1. MD5 er dog blevet knækket, og et angreb mod det blev også brugt til at knække SSL i 2008. SHA-0- og SHA-1-funktionerne blev udviklet af NSA. I februar 2005 blev det rapporteret, at et vellykket angreb på SHA-1 blev udført, hvor der blev fundet kollisioner i cirka 2 69 hash-operationer i stedet for de 2 80, der forventes for en 160-bit hash-funktion. I august 2005 blev endnu et vellykket angreb på SHA-1 rapporteret: at finde en kollision i 263 operationer. Nye applikationer kan undgå disse SHA-1-funktionssikkerhedsproblemer ved at bruge mere avancerede medlemmer af SHA-familien, såsom SHA-2. Men for at sikre den langsigtede pålidelighed af applikationer, der bruger hash-funktioner, blev der afholdt en konkurrence for at finde det bedste design til at erstatte SHA-2. Den 2. oktober 2012 blev Keccak udvalgt som vinder i en konkurrence arrangeret af NIST. En version af denne algoritme forventes at blive en FIPS-standard i 2014 kaldet SHA-3. Nogle af følgende algoritmer bruges ofte i kryptografiapplikationer. Bemærk venligst, at denne liste ikke inkluderer kandidater i den aktuelle NIST-konkurrence.

Algoritme Output størrelse Intern tilstandsstørrelse Blokstørrelse Længde Ordstørrelse Antal runder Angreb
(sværhedsgrad: runder)
Fødselsdagsangreb Finde
anden prototype
At finde prototypen
GOST 34.11-45 256 256 256 256 32 256 Ja (2 105) Ja (2 192 ]) Ja (2.192)
HAVAL 256/224/192/160/128 256 1,024 64 32 160/128/96 Ja Ingen Ingen
MD2 128 384 128 - 32 864 Ja (2 63,3 ]) Ja (2 73 ]) Ja (2sup>73])
MD4 128 128 512 64 32 48 Ja (3) Ja (2 64) Ja (2 78,4)
MD5 128 128 512 64 32 64 Ja (2 20,96) Ja (2 123,4) Ja (2 123,4)
PANAMA 256 8,736 256 - 32 - Ja Ingen Ingen
RIPEMD 128 128 512 64 32 48 Ja (2 18) Ingen Ingen
RIPEMD-128/256 128/256 128/256 512 64 32 64 Ingen Ingen Ingen
RIPEMD-160 160 160 512 64 32 80 Ja (2 51) Ingen Ingen
RIPEMD-320 320 320 512 64 32 80 Ingen Ingen Ingen

9.1. Hash-funktioner baseret på blokcifre

Hash-funktioner er et nødvendigt element i en række kryptografiske skemaer. Dette udtryk refererer til funktioner, der kortlægger meddelelser af vilkårlig længde (nogle gange er meddelelseslængden begrænset, men med et ret stort antal) til værdier med fast længde. Sidstnævnte kaldes ofte hash-koder. Enhver hashfunktion h har således et stort antal kollisioner, dvs. værdipar x≠y, således at h(x)=h(y). Det vigtigste krav, som kryptografiske applikationer stiller til hash-funktioner, er manglen på effektive kollisionsdetektionsalgoritmer.

Elektroniske signaturordninger er den vigtigste anvendelse af hash-funktioner i kryptografi. Da de elektroniske signaturordninger, der anvendes i praksis, ikke er egnede til at signere meddelelser af vilkårlig længde, og proceduren, der består i at opdele meddelelsen i blokke og generere en signatur for hver blok separat, er yderst ineffektiv, synes den eneste rimelige løsning at være at anvende en signaturskema til meddelelsens hash-kode. Det er let at forstå, at tilstedeværelsen af ​​effektive metoder til at søge efter kollisioner for en hash-funktion underminerer styrken af ​​den elektroniske signaturprotokol. Hash-funktioner bruges også i nogle autentificeringsprotokoller for at reducere deres kommunikationskompleksitet, dvs. for at reducere længden af ​​sendte beskeder, og i nogle andre kryptografiske protokoller.

Se mere i læseren

En hash-funktion er en transformation, der tager data af en vilkårlig længde til en værdi (foldning) af en fast længde. De enkleste eksempler er kontrolsummer (f.eks. crc32). Der er kryptografiske og programmør-hasher. En kryptografisk hash adskiller sig fra en programmør-hash i følgende to egenskaber: irreversibilitet og kollisionsfrihed. Lad os betegne m som de oprindelige data og h(m) som deres hash. Irreversibilitet betyder, at hvis tallet h0 er kendt, så er det svært at vælge m således, at h(m) = h0. Kollisionsfri betyder, at det er svært at finde m1 og m2 således, at m1 ikke er lig med m2, men h(m1) = h(m2).

Kryptografiske hash-funktioner er opdelt i to klasser:

  • hash-funktioner uden en nøgle (MDC (Modification (Manipulation) Detect Code)-koder),
  • hash-funktioner med en nøgle (MAC-koder (Message Authentication Code)).
  • Nøgleløse hash-funktioner er opdelt i to underklasser:
  • svage hash-funktioner,
  • stærke hash-funktioner.

En svag hashfunktion er en envejsfunktion H(x), der opfylder følgende betingelser:

  1. argument x
  2. betyder H(x)
  3. betyder H(x) let at beregne;
  4. for enhver fast x er det beregningsmæssigt umuligt at finde en anden x"!=x, sådan at H(x")=H(x). Par x"!=x, Hvornår H(x")=H(x) kaldes hashfunktionskollision.

En stærk hashfunktion er en envejsfunktion H(x), der opfylder betingelser 1–3 for en svag hashfunktion og egenskab 4": 4") det er beregningsmæssigt umuligt at finde et par x"!=x således at H( x")=H (x).

Da egenskaber 1-2 indebærer, at definitionssættet af en hashfunktion er meget bredere end værdisættet, skal der eksistere kollisioner. Egenskab 4 kræver, at det er næsten umuligt at finde dem for en given værdi af x. Krav 4" betyder, at det er beregningsmæssigt umuligt for en stærk hashfunktion at finde nogen kollision overhovedet.

En hashfunktion med en tast (MAC) er en funktion H(k,x), der opfylder følgende egenskaber:

  1. argument x funktioner H(k, x) kan være en smule streng af vilkårlig længde;
  2. betyder H(k, x) skal være en bitstreng med fast længde;
  3. for enhver k Og x let at beregne H(k, x);
  4. for enhver x må være svær at beregne H(k, x), ikke at vide k;
  5. må være svær at bestemme k selv med et stort antal ukendte par (x, H(k, x)) med det valgte sæt x eller regn ud fra disse oplysninger H(k, x") Til x"!=x.

Hvorfor er der brug for en hash-funktion? Faktum er, at mange kryptografiske transformationer (især beregning og verifikation af en elektronisk digital signatur, EDS) udføres på data af en fast størrelse. Derfor, før du placerer en elektronisk signatur under en multi-megabyte fil, beregnes hash-funktionsværdien fra den normalt, og den digitale signatur beregnes ud fra denne værdi. Derudover er det praktisk, for eksempel at gemme adgangskoder i databasen ikke i klar tekst, men i hash-form (dette gøres i alle Unixes).

Nogle hash-funktionsalgoritmer:

  • MD 2. Message Digest. Kryptografisk afstemningsalgoritme. Genererer en 128-bit blok fra en besked af vilkårlig længde.
  • MD 4. Endnu en foldningsalgoritme. Genererer en 128-bit blok.
  • MD 5. Væsentlig redesignet MD 4. Forfatteren er den samme - Riverst.
  • SHA. Den resulterende hash er 160-bit.
  • GOST R34,11-94. Russisk algoritme. Længden af ​​foldningen er 256 bit (meget praktisk til at generere en nøgle til GOST 28147–89 ved hjælp af en adgangskode).

Den grundlæggende idé bag brug af kryptografiske funktioner er, at hash-værdier tjener som en kompakt repræsentation af en binær inputstreng og kan bruges, som om de var unikt identificeret med den streng, dog for definitionsdomænet D og intervaller R Med (betyder kardinaliteter af mængder), en funktion af typen "mange-en" indebærer, at eksistensen kollisioner (par af input med samme output) er uundgåelig. Omfanget af hash-funktionen er ikke klart defineret: den bruges "til at implementere elektroniske digitale signaturer (EDS) procedurer ved transmission, behandling og lagring af information i automatiserede systemer."

- et sæt binære strenge af længde n bit;

— binær streng bestående af n nuller;

- tilføjelse af binære ord EN Og B Ved .

Meddelelser af vilkårlig længde kan komprimeres ved hjælp af en hash-funktion med en fast inputstørrelse ved hjælp af to metoder:

  • sekventiel (iterativ);
  • parallel.

9.2. De vigtigste praktisk brugte persistente hash-funktioner

Skaberne af GOST R34.11-94 tog den første vej og brugte den sekventielle hashmetode ved hjælp af en hashfunktion med en fast inputstørrelse (se fig. 1), dvs. en komprimeringsfunktion med en koefficient på 2.

Ris. 1. Sekventiel hashing-metode.

Hvis du har brug for at hash beskeden , så udføres hashing som følger:

Her er kompressionsfunktionen, og – koblingsvariabel.

Hvis den sidste blok indeholder mindre end n bit, så "fyldes" den, indtil den når længden n. I modsætning til standardantagelser, som antager, at meddelelsen allerede tidligere er blevet opdelt i blokke, og at den sidste blok er blevet "fyldt" (dette svarer til formateringen af ​​inputmeddelelsen a priori), før hashing begynder, i GOST R34.11–94 hashing-proceduren venter på slutningen af ​​meddelelsen (formatering af inputmeddelelserne a posteriori). "Padding" udføres som følger: den sidste blok flyttes til højre, og derefter fyldes de frigjorte bits med nuller, indtil en længde på 256 bit er nået. Hashing-algoritmen i henhold til GOST R34.11–94 kan klassificeres som kollisionsbestandig ( n= 256, derfor ville et fødselsdags paradoks angreb kræve omtrentlig hashing-operationer) kode, samt detektering af ændringer ( Kollision Modstandsdygtig Hash Fungere, CRHF). Hash-funktionen i overensstemmelse med GOST R34.11–94 kan nemt konverteres til en meddelelsesgodkendelseskode ved hjælp af en hvilken som helst kendt metode (f.eks. HMAC, hemmeligt præfiks, suffiks, shell osv.).

Se mere i læseren

Udviklerne har dog givet yderligere beskyttelsesforanstaltninger, som de parallelt beregner:

De beregnede værdier i den endelige komprimeringsfunktion bruges til at beregne den endelige hash (se figur 2).

Ris. 2. Generelt diagram over hashing-funktionen i henhold til GOST R34.11–94.

Note 1 ("fyldning"). Det er ikke nødvendigt at angive i den transmitterede meddelelse, hvor mange nuller der blev tilføjet til den sidste blok, da længden af ​​meddelelsen er involveret i hashing.

Ris. 3. "Udfyld" beskeden.

Note 2. Ifølge GOST R34.11-94, initial vektor IV vilkårligt fast ord 256 bit langt ). I dette tilfælde, hvis det ikke er kendt på forhånd forren, skal det transmitteres sammen med meddelelsen med en integritetsgaranti. For små beskeder kan fjendens opgave gøres vanskeligere, hvis vektoren IV vælg fra et lille sæt gyldige værdier (men dette øger sandsynligheden for, at en modstander gætter hashværdien). Det kan også indstilles inden for en organisation eller domæne som en konstant (normalt som i testeksemplet).

Secure Hash Algorithm - 1 (SHA-1) blev udviklet af National Institute of Standards and Technology (NIST) og udgivet som en føderal informationsstandard (FIPS PUB 180) i 1993.

Algoritmen modtager en besked med maksimal bitlængde som input og producerer en beskedsammenfatning på 160 bit som output. Algoritmen indeholder en række trin.

Trin 1: Tilføj manglende bits. Meddelelsen tilføjes, så dens længde er et multiplum af 448 mod 512 (længde 448 mod 512). Tilføjelse udføres altid, selvom meddelelsen allerede har den nødvendige længde. Antallet af bit, der skal tilføjes, varierer således fra 1 til 512. Tilføjelsen består af en et efterfulgt af det nødvendige antal nuller.

Trin 2: Tilføj længde. En blok på 64 bit er tilføjet meddelelsen. Denne blok behandles som et usigneret 64-bit heltal og indeholder længden af ​​den oprindelige meddelelse, før den tilføjes. Resultatet af de første to trin er en meddelelse, hvis længde er et multiplum af 512 bit. Den udvidede meddelelse kan repræsenteres som en sekvens af 512-bit blokke Y0, Y1,..., YL-1. Den samlede længde af den udvidede meddelelse er således L * 512 bit (resultatet er et multiplum af seksten 32-bit ord).

Trin 3: Initialiser SHA-1-bufferen. En 160-bit buffer bruges til at gemme de mellemliggende og endelige resultater af hash-funktionsberegningen. Bufferen kan repræsenteres som fem 32-bit registre til lagring af tallene A, B, C, D og E. Disse registre initialiseres med følgende hexadecimale tal: A=67452301; B=EFCDAB 89; C=98BADCFE; D=10325476; E=C3D2E1F0.

Trin 4: Behandl beskeden i 512-bit (16-ord) blokke. Grundlaget for algoritmen er et modul bestående af 80 cykliske behandlinger, betegnet som HSHA. Alle 80 behandlingscyklusser i hver blok har samme struktur.

Ris. 4. Behandler den næste 512-bit blok.

Hver sløjfe tager som input den aktuelle 512-bit blok, der behandles, og 160-bit værdien af ​​ABCDE bufferen og modificerer indholdet af denne buffer. Hver sløjfe bruger en ekstra konstant, der kun tager fire forskellige værdier:

5A827999 (heltalsdel);

6 ED 9 EBA 1 (heltalsdel);

8 F 1 BBCDC (heltalsdel);

CA 62 C 1 D 6 (heltal del af tallet).

For at opnå output fra den 80. cyklus lægges til værdien. Modulo-addition udføres uafhængigt for hvert af de fem ord i bufferen med hvert af de tilsvarende ord i .

Trin 5: Afslut. Efter at have behandlet alle 512-bit beskedblokke, er outputtet fra det L-te trin i algoritmen en 160-bit beskedsammenfatning. Lad os se nærmere på driftslogikken i hver af de 80 behandlingscyklusser for en 512-bit blok. Nye (beregnede) værdier for variable A, B, C, D, E ved udgangen af ​​hver behandlingscyklus kan repræsenteres som følger:

Her: A, B, C, D, E – fem 32-bit ord fra bufferen; t – cyklusnummer 0 ≤t ≤79; – elementær logisk funktion; – cyklisk venstreforskydning af et 32-bit argument med s bit; – et 32-bit ord opnået fra den aktuelle input 512-bit blok; – yderligere konstant; tegn "+" - modulo addition.

Ris. 5. Logik til at udføre en separat løkke.

Hver atomfunktion tager tre 32-bit ord som input og producerer et 32-bit ord som output. En elementær funktion udfører et sæt bitvise logiske operationer, dvs. den n'te bit af outputtet er en funktion af den n'te bit af de tre inputs. Funktionerne af ft (B, C, D) er som følger:

Cyklus nummer

ft (B, C, D)

I praksis bruges kun tre forskellige funktioner. For 0 ≤t ≤19 er funktionen betinget: hvis B så C ellers D. For 20 ≤t ≤39 og 60 ≤t ≤79 skaber funktionen en paritetsbit. For 40 ≤t ≤59 er funktionen sand, hvis to eller tre argumenter er sande. 32-bit ord opnås fra den næste 512-bit beskedblok som følger.

Ris. 6. Indhentning af variable inputværdier for hver sløjfe
fra den næste (aktuelle) 512-bit behandlede blok.

De første 16 værdier er taget direkte fra de 16 ord i den aktuelle blok. De resterende værdier bestemmes som følger: . I de første 16 behandlingscyklusser består inputtet af et 32-bit ord i den givne blok. I de resterende 64 cyklusser består inputtet af XORing af flere ord fra meddelelsesblokken.

SHA-1-algoritmen kan opsummeres som følger:

hvor IV er startværdien af ​​bufferen af ​​variable A, B, C, D, E;

– resultatet af behandlingen af ​​den q. beskedblok;

L – antal blokke i meddelelsen, inklusive tilføjelses- og længdefelter;

Σ 32 – modulo sum, udført separat for hvert ord i bufferen;

SHA – message digest værdi.

Password hashing er en metode, der tillader brugere at huske ikke 128 bytes, dvs. 256 hexadecimale cifre i en nøgle, men et meningsfuldt udtryk, ord eller sekvens af tegn kaldet en adgangskode. Når man udvikler en kryptografisk algoritme, bør det faktisk tages i betragtning, at slutbrugeren af ​​systemet i halvdelen af ​​tilfældene er en person og ikke et automatisk system. Dette rejser spørgsmålet om, hvorvidt det er praktisk og endda realistisk for en person at huske en 128-bit nøgle (32 hexadecimale cifre). Grænsen for mindelighed ligger på grænsen af ​​8-12 lignende symboler, og derfor, hvis vi tvinger brugeren til at arbejde med nøglen, vil vi praktisk talt tvinge ham til at skrive nøglen på et stykke papir eller elektroniske medier, f.eks. i en tekstfil. Dette reducerer naturligvis systemets sikkerhed kraftigt.

For at løse dette problem er der udviklet metoder, der konverterer en talt meningsfuld streng af vilkårlig længde - et kodeord - til en specificeret nøgle af en forudbestemt længde. I langt de fleste tilfælde bruges såkaldte hash-funktioner til denne operation (fra engelsk hashing - finskæring og blanding).

En hashfunktion er en matematisk eller algoritmisk transformation af en given datablok, der har følgende egenskaber:

  1. hash-funktionen har et uendeligt domæne;
  2. en hash-funktion har et begrænset område;
  3. det er irreversibelt;
  4. ændring af input-informationsstrømmen med 1 bit ændrer omkring halvdelen af ​​alle bits af outputstrømmen, dvs. resultatet af hash-funktionen.

Disse egenskaber giver dig mulighed for at indtaste adgangskoder til hash-funktionen, dvs. tekststrenge af vilkårlig længde på ethvert nationalt sprog, og ved at begrænse rækken af ​​værdier for funktionen til området , hvor N er længden af ​​nøglen i bits , for ved udgangen at opnå informationsblokke nogenlunde jævnt fordelt over rækken af ​​værdier – nøgler.

Det er let at se, at krav svarende til punkt 3 og 4 i hashfunktionskravene er opfyldt af blokcifre. Dette indikerer en af ​​de mulige måder at implementere stærke hash-funktioner på - at udføre blokkryptografiske transformationer på adgangskodestrengmaterialet. Denne metode bruges i forskellige variationer i næsten alle moderne kryptosystemer. Adgangskodestrengsmaterialet bruges gentagne gange sekventielt som en nøgle til at kryptere en eller anden kendt blok af data - outputtet er en krypteret blok af information, der entydigt kun afhænger af adgangskoden og samtidig har ret gode statistiske egenskaber. En sådan blok eller flere sådanne blokke bruges som en nøgle til yderligere kryptotransformationer.

Arten af ​​brugen af ​​en blokchiffer til hashing bestemmes af forholdet mellem blokstørrelsen af ​​den anvendte kryptografiske algoritme og bitdybden af ​​det påkrævede hashresultat.