Spørgsmålet om, hvorvidt en Pseudorandom Number Generator (PSRNG eller PRNG) kan konstrueres ved hjælp af blokcifre er et af væsentlig interesse inden for kryptografi. Blokcifre er fundamentale kryptografiske primitiver, der er meget brugt til at sikre data gennem kryptering. En blokchiffer tager en blok af klartekst i fast størrelse og en nøgle som input og producerer en blok af chiffertekst i fast størrelse som output. Nogle af de mest kendte blokcifre omfatter Advanced Encryption Standard (AES), Data Encryption Standard (DES) og Triple DES (3DES).
For at forstå, hvordan en blokciffer kan bruges til at skabe en PSRNG, er det vigtigt først at forstå de grundlæggende egenskaber og funktionaliteten af både blokciffer og pseudorandom-talgeneratorer.
En pseudorandom tal generator er en algoritme, der producerer en række tal, der kun tilnærmer egenskaberne af tilfældige tal. Sekvensen, der genereres af en PSRNG, bør være deterministisk, hvilket betyder, at givet det samme indledende frø, vil det altid producere den samme rækkefølge af tal. Denne determinisme er vigtig for applikationer, hvor reproducerbarhed er nødvendig, såsom i simuleringer og kryptografiske protokoller.
Sikkerheden af en PSRNG afhænger af dens evne til at producere sekvenser, der ikke kan skelnes fra ægte tilfældige sekvenser til enhver polynomisk tidsmodstander. Denne egenskab er kendt som kryptografisk sikkerhed. Derfor skal en kryptografisk sikker PSRNG (CSPRNG) opfylde følgende kriterier:
1. Deterministisk: Det samme frø vil altid producere den samme sekvens.
2. uforudsigelighed: Uden kendskab til frøet, burde det være beregningsmæssigt umuligt at forudsige ethvert fremtidigt output fra generatoren.
3. Ukendelighed: Outputtet skal ikke kunne skelnes fra en virkelig tilfældig sekvens.
Blokcifre kan udnyttes til at skabe en PSRNG gennem forskellige driftsformer. Driftsmåder er teknikker, der udvider brugen af en blokchiffer for at give sikkerhed for data af vilkårlig længde og kan også tilpasses til at generere pseudotilfældige sekvenser. Nogle af de almindelige driftsformer, der kan bruges til dette formål, omfatter:
1. Tæller (CTR) tilstand: I CTR-tilstand bruges en blokchiffer til at kryptere en tællerværdi. Tælleren øges for hver blok af output, der er nødvendig. Denne tilstand er særligt velegnet til at generere pseudorandom-tal, fordi den transformerer en simpel, lineær tæller til en kompleks, pseudorandom-sekvens ved hjælp af blokchifferet.
2. Output Feedback (OFB) tilstand: OFB-tilstand bruger blokchifferet til at generere en nøglestrøm, der kan bruges til at kryptere data. Selve nøglestrømmen genereres ved gentagne gange at kryptere en initialiseringsvektor (IV) og derefter bruge outputtet som det næste input til blokchifferet. Denne tilstand kan tilpasses til at generere en pseudotilfældig sekvens ved at bruge blokchiffer-output direkte.
3. Cipher Feedback (CFB) tilstand: I lighed med OFB-tilstand genererer CFB-tilstand en nøglestrøm ved at kryptere en IV og derefter bruge dele af outputtet til at generere det næste input. Nøglestrømmen kan bruges som en pseudorandom sekvens.
4. Elektronisk kodebog (ECB) tilstand: Selvom ECB-tilstand ikke er egnet til datakryptering på grund af dens manglende diffusion og modtagelighed for mønsterangreb, kan den bruges på en begrænset måde til at generere pseudotilfældige tal ved at kryptere en sekvens af tællerværdier eller andre strukturerede input.
Lad os overveje detaljerne for, hvordan blokcifre kan bruges i disse tilstande til at skabe en pseudorandom-talgenerator.
Tæller (CTR) tilstand
I CTR-tilstand krypterer blokchifferet en tællerværdi, der inkrementeres for hver outputblok. Den generelle proces er som følger:
1. Initialisering: Vælg en indledende tællerværdi (CTR_0) og en hemmelig nøgle (K).
2. Kryptering: For hver outputblok skal du øge tælleren og kryptere den ved hjælp af blokchifferet med den hemmelige nøgle:
hvor .
3. Pseudorandom sekvens: Sekvensen af krypterede tællerværdier danner den pseudotilfældige sekvens.
CTR-tilstand har flere fordele til at generere pseudorandom-tal. Det er meget paralleliserbart, hvilket betyder, at flere blokke kan genereres samtidigt, hvilket er nyttigt til højtydende applikationer. Derudover sikrer brugen af en tæller, at sekvensen er deterministisk og gentagelig, som det kræves for en PSRNG.
Output Feedback (OFB) tilstand
I OFB-tilstand genererer blokchifferet en nøglestrøm ved gentagne gange at kryptere en initialiseringsvektor (IV). Processen er som følger:
1. Initialisering: Vælg en initial IV og en hemmelig nøgle (K).
2. Keystream Generation: Krypter IV ved hjælp af blokchifferet og brug output som næste input:
3. Pseudorandom sekvens: Rækkefølgen af output danner den pseudorandom-sekvens.
OFB-tilstand er fordelagtig til at generere pseudotilfældige tal, fordi den sikrer, at den samme IV og nøgle altid vil producere den samme sekvens og opfylder determinismekravet. Derudover sikrer feedbackmekanismen, at outputsekvensen er kompleks og svær at forudsige.
Cipher Feedback (CFB) tilstand
CFB-tilstand ligner OFB-tilstand, men med en lille variation i, hvordan input til blokchiffer genereres. Processen er som følger:
1. Initialisering: Vælg en initial IV og en hemmelig nøgle (K).
2. Keystream Generation: Krypter IV ved hjælp af blokchifferet og brug en del af outputtet som næste input:
3. Pseudorandom sekvens: Rækkefølgen af output danner den pseudorandom-sekvens.
CFB-tilstand kan bruges til at generere pseudorandom-tal, men den er generelt mindre effektiv end CTR- og OFB-tilstande på grund af feedback-mekanismen, som kan introducere afhængigheder mellem blokke.
Elektronisk kodebog (ECB) tilstand
ECB-tilstand er den enkleste funktionsmåde for en blokchiffer. I ECB-tilstand krypteres hver blok af klartekst uafhængigt med den samme nøgle. Mens ECB-tilstand ikke er egnet til at kryptere data på grund af dens manglende diffusion og modtagelighed for mønsterangreb, kan den bruges til at generere pseudotilfældige tal ved at kryptere en sekvens af strukturerede input, såsom tællerværdier eller andre deterministiske sekvenser.
Fremgangsmåden er som følger:
1. Initialisering: Vælg en hemmelig nøgle (K).
2. Kryptering: For hver outputblok skal du kryptere et struktureret input ved hjælp af blokchifferet med den hemmelige nøgle:
3. Pseudorandom sekvens: Sekvensen af krypterede input danner den pseudotilfældige sekvens.
Mens ECB-tilstand kan bruges til at generere pseudotilfældige tal, anbefales det generelt ikke på grund af dens manglende sikkerhedsegenskaber sammenlignet med andre driftsformer.
Sikkerhedsovervejelser
Når du bruger blokcifre til at generere pseudotilfældige tal, er det vigtigt at overveje sikkerhedsegenskaberne for den valgte driftsmåde. Den genererede sekvens skal ikke kunne skelnes fra en virkelig tilfældig sekvens og uforudsigelig uden kendskab til den hemmelige nøgle og indledende parametre (f.eks. IV eller tæller).
1. Nøglehåndtering: Sikkerheden af den pseudotilfældige sekvens afhænger af nøglens hemmeligholdelse. Hvis nøglen er kompromitteret, kan hele sekvensen forudsiges.
2. Initialiseringsvektor (IV) eller tæller: Valget af IV eller tæller er kritisk. Genbrug af den samme IV eller tæller med den samme nøgle kan føre til sikkerhedssårbarheder. Det er vigtigt at sikre, at IV eller tælleren er unik for hver session eller instans af PSRNG.
3. Bloker Cipher Security: Den underliggende blokchiffer skal være sikker. Svagheder i blokchifferet kan kompromittere sikkerheden af den pseudotilfældige sekvens. Det anbefales at bruge veletablerede og bredt analyserede blokcifre såsom AES.
Eksempel: Brug af AES i CTR-tilstand til at oprette en PSRNG
For at illustrere, hvordan en blokchiffer kan bruges til at oprette en PSRNG, kan du overveje eksemplet med at bruge AES i CTR-tilstand:
1. Initialisering: Vælg en 128-bit hemmelig nøgle (K) og en indledende tællerværdi (CTR_0).
2. Kryptering: For hver outputblok skal du øge tælleren og kryptere den ved hjælp af AES med den hemmelige nøgle:
hvor .
3. Pseudorandom sekvens: Sekvensen af krypterede tællerværdier danner den pseudotilfældige sekvens.
Den resulterende sekvens vil være en serie af 128-bit blokke, der er pseudotilfældige og egnede til brug i kryptografiske applikationer. Sekvensens sikkerhed afhænger af nøglens hemmeligholdelse og tællerværdiernes unikke karakter.
Blokcifre kan faktisk bruges til at skabe pseudorandom-talgeneratorer gennem forskellige driftsformer. CTR-, OFB- og CFB-tilstande er særligt velegnede til dette formål, da de giver de nødvendige egenskaber for determinisme, uforudsigelighed og ude af skel. Valget af tilstand og styringen af nøgler og initialiseringsparametre er afgørende for at sikre sikkerheden af den genererede pseudotilfældige sekvens. Ved at udnytte styrken af veletablerede blokcifre såsom AES, er det muligt at konstruere en robust og sikker PSRNG, der er egnet til en bred vifte af kryptografiske applikationer.
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 vi bruge en blokchiffer til at bygge en hash-funktion eller MAC?
- 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 en MAC bygges med blokcifre?
Se flere spørgsmål og svar i Applications of block ciphers