Ganske vist er brugen af blokcifre til at konstruere hashfunktioner og meddelelsesgodkendelseskoder (MAC'er) en veletableret praksis inden for kryptografi. En blokchiffer er en symmetrisk nøgleciffer, der fungerer på datablokke i fast størrelse ved hjælp af en delt hemmelig nøgle. Eksempler på blokcifre omfatter Advanced Encryption Standard (AES) og Data Encryption Standard (DES). Disse cifre er primært designet til kryptering og dekryptering, men deres egenskaber kan udnyttes til at skabe andre kryptografiske primitiver såsom hash-funktioner og MAC'er.
Hash-funktioner fra Block Ciphers
En kryptografisk hash-funktion er en deterministisk algoritme, der kortlægger en vilkårlig mængde data til en streng af bytes med fast størrelse. Outputtet, kendt som hashværdien, bør have flere nøgleegenskaber: det bør være beregningsmæssigt umuligt at vende (preimage modstand), finde to forskellige input, der producerer det samme output (kollisionsmodstand), eller finde et andet input, der producerer det samme output som en given input (anden preimage modstand).
Merkle-Damgård Byggeri
En af de mest kendte metoder til at konstruere en hashfunktion ud fra en blokcifre er Merkle-Damgård-konstruktionen. Denne metode bruger en blokcifre i en specifik driftstilstand til at behandle inputdataene i blokke.
1. Initialisering: Start med en startværdi, kendt som initialiseringsvektoren (IV).
2. Behandles: Opdel inputmeddelelsen i blokke med fast størrelse. For hver blok skal du bruge blokchifferet til at transformere den aktuelle tilstand.
3. Afslutning: Efter behandling af alle blokke er den endelige tilstand hashværdien.
Lad for eksempel være en blokcifre,
en nøgle,
initialiseringsvektoren, og
beskeden opdelt i blokke
. Hash-funktionen
kan defineres som følger:
Denne konstruktion sikrer, at hash-funktionen arver sikkerhedsegenskaberne for den underliggende blokchiffer, forudsat at blokchifferen er sikker.
Davies-Meyer konstruktion
En anden populær metode er Davies-Meyer-konstruktionen, som bruger en blokchiffer på en feed-forward måde til at bygge en hash-funktion. Konstruktionen er defineret som følger:
Hvor er hashværdien efter behandling af
-th blok,
er blokkrypteringsfunktionen med nøgle
og
angiver den bitvise XOR-operation. Startværdien
er typisk sat til en fast konstant.
Message Authentication Codes (MAC'er) fra blokchiffer
En meddelelsesgodkendelseskode (MAC) er et kort stykke information, der bruges til at autentificere en meddelelse og sikre dens integritet. En MAC-algoritme tager som input en besked og en hemmelig nøgle og udsender et MAC-tag. Modtageren, som også besidder den hemmelige nøgle, kan verificere ægtheden af meddelelsen ved at genberegne MAC-tagget og sammenligne det med det modtagne mærke.
CBC-MAC
En af de enkleste og mest udbredte metoder til at konstruere en MAC ud fra en blokchiffer er CBC-MAC (Cipher Block Chaining Message Authentication Code). Denne metode bruger CBC-driftstilstanden for en blokchiffer til at behandle meddelelsen, og den sidste blok bruges som MAC-tag.
1. Initialisering: Start med en initialiseringsvektor (IV) sat til nul.
2. Behandles: Krypter hver blok i meddelelsen ved hjælp af blokchifferet i CBC-tilstand.
3. Afslutning: Outputtet af den endelige blokkryptering er MAC-tagget.
Lad f.eks være en blokcifre,
en nøgle,
beskeden opdelt i blokke
og
initialiseringsvektoren. CBC-MAC-tagget
beregnes som følger:
Sikkerheden i CBC-MAC er afhængig af meddelelsens længde og nøglens unikke karakter. For at sikre sikkerheden anbefales det at bruge forskellige nøgler til kryptering og MAC-generering.
HMAC
En anden meget brugt MAC-konstruktion er den Hash-baserede Message Authentication Code (HMAC), som kan bygges ved hjælp af en blokchiffer-baseret hash-funktion. HMAC giver bedre sikkerhedsegenskaber og er mere robust mod visse typer angreb.
HMAC er defineret som følger:
Hvor:
- er en hashfunktion (f.eks. en konstrueret ved hjælp af en blokcifre).
- er nøglen
polstret til hashfunktionens blokstørrelse.
- angiver den bitvise XOR-operation.
- og
er faste polstringskonstanter.
- betegner sammenkædning.
Sikkerhedsovervejelser
Når du bruger blokcifre til at konstruere hash-funktioner og MAC'er, skal der tages hensyn til flere sikkerhedshensyn:
1. Nøglehåndtering: Konstruktionernes sikkerhed er afhængig af nøglehemmeligheden. Korrekt nøglehåndteringspraksis skal følges for at sikre, at nøgler ikke kompromitteres.
2. Kollisionsmodstand: For hash-funktioner er kollisionsmodstand vigtig. Blokcifferet skal være sikret mod angreb, der kan føre til kollisioner i hash-funktionen.
3. Meddelelseslængde: For CBC-MAC kan sikkerheden kompromitteres, hvis den samme nøgle bruges til beskeder af forskellig længde. Det er vigtigt at sikre, at nøglen er unik for hver beskedlængde eller bruge yderligere teknikker til at håndtere beskeder med variabel længde.
4. Polstring: Der skal bruges korrekte udfyldningsskemaer for at sikre, at meddelelsesblokkene har den korrekte størrelse til blokchifferet. Forkert polstring kan føre til sikkerhedssårbarheder.
5. Performance: Konstruktionernes ydeevne afhænger af effektiviteten af den underliggende blokchiffer. Højtydende blokcifre såsom AES foretrækkes til praktiske implementeringer.
Praktiske eksempler
Eksempel på CBC-MAC
Overvej en blokcifre med en blokstørrelse på 128 bit og en nøgle
. Lad budskabet
være "Hej, verden!" polstret til nærmeste blokstørrelse. Beskeden er opdelt i blokke
, og CBC-MAC-tagget beregnes som følger:
1. Initialisering:
2. Behandles:
-
-
3. Afslutning:
Det resulterende tag bruges som MAC for beskeden.
Eksempel på HMAC
Overvej en hash-funktion konstrueret ved hjælp af en blokcifre med en blokstørrelse på 512 bit. Lad nøglen
være "secretkey" og beskeden
være "Hej, verden!". HMAC-tagget beregnes som følger:
1. Nøglepolstring: Pad nøglen til blokstørrelsen af hashfunktionen for at opnå
.
2. Indre Hash: Beregn den indre hash:
-
3. Ydre Hash: Beregn den ydre hash:
-
Det resulterende tag er HMAC for beskeden.
Blokcifre er alsidige kryptografiske primitiver, der kan bruges til at konstruere både hash-funktioner og MAC'er. Merkle-Damgård- og Davies-Meyer-konstruktionerne er populære metoder til at bygge hash-funktioner ud fra blokcifre, mens CBC-MAC og HMAC er meget brugte MAC-konstruktioner. Sikkerheden af disse konstruktioner afhænger af egenskaberne af den underliggende blokchiffer, korrekt nøglestyring og overholdelse af bedste praksis inden for kryptografisk implementering.
Andre seneste spørgsmål og svar vedr Anvendelser af blokkoder:
- Hvad bør en blokchiffer indeholde ifølge Shannon?
- Afhænger sikkerheden af blokchiffere af at kombinere forvirrings- og diffusionsoperationer mange gange?
- Betyder diffusion, at enkelte bits af krypteret tekst er påvirket af mange bits af klartekst?
- Opdeler ECB-tilstanden store input-klartekst i efterfølgende blokke
- Kan OFB-tilstand bruges som keystream-generatorer?
- Kan en indskrivning være deterministisk?
- Hvad er driftsformer?
- Hvad gør ECB-tilstanden ved simple blokcifre
- Kan PSRNG laves med blokcifre?
- Kan en MAC bygges med blokcifre?
Se flere spørgsmål og svar i Applications of block ciphers