Algoritmen voor gegevenscodering - hoe u uw eigen cijfer kunt bedenken. Moderne encryptie-algoritmen Doel van encryptie

Sergej Panasenko,
Hoofd van de softwareontwikkelingsafdeling bij Ankad,
[e-mailadres beveiligd]

Basisconcepten

Het proces van het omzetten van open data in gecodeerde gegevens en vice versa wordt gewoonlijk encryptie genoemd, en de twee componenten van dit proces worden respectievelijk encryptie en decryptie genoemd. Wiskundig gezien wordt deze transformatie weergegeven door de volgende afhankelijkheden die acties beschrijven met de originele informatie:

C = Ek1(M)

M" = Dk2(C),

waarbij M (bericht) open informatie is (in de literatuur over informatiebeveiliging wordt dit vaak “brontekst” genoemd);
C (cijfertekst) - de cijfertekst (of cryptogram) verkregen als resultaat van codering;
E (codering) - een coderingsfunctie die cryptografische transformaties op de brontekst uitvoert;
k1 (sleutel) - parameter van functie E, de coderingssleutel genoemd;
M" - informatie verkregen als resultaat van decodering;
D (decodering) - decoderingsfunctie die inverse cryptografische transformaties op de cijfertekst uitvoert;
k2 is de sleutel die wordt gebruikt om informatie te decoderen.

Het concept van ‘sleutel’ in de GOST 28147-89-standaard (symmetrisch encryptie-algoritme) wordt als volgt gedefinieerd: ‘een specifieke geheime status van enkele parameters van een cryptografisch transformatie-algoritme, die de selectie van één transformatie uit een reeks mogelijke transformaties voor een bepaald algoritme.” Met andere woorden: de sleutel is een uniek element waarmee je de resultaten van het versleutelingsalgoritme kunt wijzigen: dezelfde brontekst wordt anders versleuteld als je verschillende sleutels gebruikt.

Om ervoor te zorgen dat het decoderingsresultaat overeenkomt met het originele bericht (dat wil zeggen, voor M" = M), moet tegelijkertijd aan twee voorwaarden worden voldaan. Ten eerste moet de decoderingsfunctie D overeenkomen met de coderingsfunctie E. Ten tweede moet de decoderingssleutel k2 overeenkomen met de codering. sleutel k1.

Als voor de versleuteling een cryptografisch sterk versleutelingsalgoritme wordt gebruikt, is het bij afwezigheid van de juiste sleutel k2 onmogelijk om M" = M te verkrijgen. Cryptografische sterkte is het belangrijkste kenmerk van versleutelingsalgoritmen en geeft vooral de mate van complexiteit aan van het verkrijgen van het origineel. tekst uit een gecodeerde tekst zonder sleutel k2.

Versleutelingsalgoritmen kunnen worden onderverdeeld in twee categorieën: symmetrische en asymmetrische versleuteling. Voor de eerste wordt de verhouding tussen encryptie- en decryptiesleutels gedefinieerd als k1 = k2 = k (dat wil zeggen dat de functies E en D dezelfde encryptiesleutel gebruiken). Bij asymmetrische encryptie wordt de encryptiesleutel k1 zodanig berekend uit de sleutel k2 dat de omgekeerde transformatie onmogelijk is, bijvoorbeeld met behulp van de formule k1 = ak2 mod p (a en p zijn de parameters van het gebruikte algoritme).

Symmetrische codering

Symmetrische encryptie-algoritmen dateren uit de oudheid: het was deze methode om informatie te verbergen die in de 1e eeuw voor Christus werd gebruikt door de Romeinse keizer Gaius Julius Caesar. e., en het algoritme dat hij heeft uitgevonden staat bekend als het ‘Caesar-cryptosysteem’.

Momenteel is het bekendste symmetrische encryptie-algoritme DES (Data Encryption Standard), ontwikkeld in 1977. Tot voor kort was dit de “Amerikaanse standaard”, omdat de regering van dit land het gebruik ervan aanbeveelde voor de implementatie van verschillende data-encryptiesystemen. Ondanks het feit dat DES oorspronkelijk niet langer dan 10 tot 15 jaar zou worden gebruikt, begonnen de pogingen om het te vervangen pas in 1997.

We zullen DES niet in detail bekijken (bijna alle boeken op de lijst met aanvullend materiaal hebben een gedetailleerde beschrijving ervan), maar zullen ons wenden tot modernere encryptie-algoritmen. Het is alleen de moeite waard om op te merken dat de belangrijkste reden voor het wijzigen van de encryptiestandaard de relatief zwakke cryptografische kracht ervan is. De reden hiervoor is dat de DES-sleutellengte slechts 56 significante bits bedraagt. Het is bekend dat elk sterk versleutelingsalgoritme kan worden gekraakt door alle mogelijke versleutelingssleutels uit te proberen (de zogenaamde brute force-aanval). Het is gemakkelijk te berekenen dat een cluster van 1 miljoen processors, die elk 1 miljoen sleutels per seconde berekenen, in bijna 20 uur 256 varianten van DES-sleutels zullen controleren. En aangezien dergelijke rekenkracht naar huidige maatstaven vrij realistisch is, is het duidelijk dat een sleutel van 56 bits te kort is en dat het DES-algoritme moet worden vervangen door een sterkere sleutel.

Tegenwoordig worden er steeds vaker twee moderne, sterke encryptie-algoritmen gebruikt: de binnenlandse standaard GOST 28147-89 en de nieuwe Amerikaanse cryptostandaard - AES (Advanced Encryption Standard).

Standaard GOST 28147-89

Het algoritme gedefinieerd door GOST 28147-89 (Fig. 1) heeft een coderingssleutellengte van 256 bits. Het codeert informatie in blokken van 64 bits (dergelijke algoritmen worden blokalgoritmen genoemd), die vervolgens worden verdeeld in twee subblokken van 32 bits (N1 en N2). Subblok N1 wordt op een bepaalde manier verwerkt, waarna de waarde ervan wordt opgeteld bij de waarde van subblok N2 (de optelling wordt uitgevoerd modulo 2, d.w.z. de logische XOR-bewerking wordt toegepast - "exclusief of"), en vervolgens worden de subblokken verwisseld. Deze transformatie wordt een bepaald aantal keren (“rondes”) uitgevoerd: 16 of 32, afhankelijk van de werkingsmodus van het algoritme. In elke ronde worden twee operaties uitgevoerd.

De eerste is sleutelen. De inhoud van deelblok N1 wordt modulo 2 opgeteld met het 32-bits deel van de sleutel Kx. De volledige coderingssleutel wordt weergegeven als een aaneenschakeling van 32-bits subsleutels: K0, K1, K2, K3, K4, K5, K6, K7. Tijdens het versleutelingsproces wordt één van deze subsleutels gebruikt, afhankelijk van het ronde getal en de werkingsmodus van het algoritme.

De tweede operatie is het vervangen van de tafel. Na het intoetsen wordt subblok N1 verdeeld in 8 delen van 4 bits, waarvan de waarde wordt vervangen in overeenstemming met de vervangingstabel voor dit deel van het subblok. Het subblok wordt vervolgens 11 bits naar links geroteerd.

Tabelvervangingen(Substitutiebox - S-box) worden vaak gebruikt in moderne coderingsalgoritmen, dus het is de moeite waard om uit te leggen hoe een dergelijke operatie is georganiseerd.

De uitvoerwaarden van de blokken worden in de tabel vastgelegd. Een datablok van een bepaalde afmeting (in ons geval 4-bit) heeft zijn eigen numerieke representatie, die het nummer van de uitgangswaarde bepaalt. Als de S-box er bijvoorbeeld uitziet als 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 en het 4-bits blok “0100” kwam naar de invoer (waarde 4), dan zal de uitvoerwaarde volgens de tabel 15 zijn, d.w.z. "1111" (0 a 4, 1 a 11, 2 a 2 ...).

Het algoritme, gedefinieerd door GOST 28147-89, biedt vier werkingsmodi: eenvoudige vervanging, gamma, gamma met feedback en het genereren van imitatiebijlagen. Ze gebruiken dezelfde encryptietransformatie die hierboven is beschreven, maar omdat het doel van de modi verschillend is, wordt deze transformatie in elk ervan anders uitgevoerd. In modus gemakkelijke vervanging

Om elk 64-bits informatieblok te coderen, worden de hierboven beschreven 32 ronden uitgevoerd. In dit geval worden 32-bits subsleutels in de volgende volgorde gebruikt:

K0, K1, K2, K3, K4, K5, K6, K7, K0, K1, etc. - in rondes 1 tot en met 24;

Decodering in deze modus wordt op precies dezelfde manier uitgevoerd, maar met een iets andere volgorde van het gebruik van subsleutels:

K0, K1, K2, K3, K4, K5, K6, K7 - in rondes 1 tot en met 8;

K7, K6, K5, K4, K3, K2, K1, K0, K7, K6, etc. - in rondes 9 tot en met 32.

Alle blokken worden onafhankelijk van elkaar gecodeerd, dat wil zeggen dat het encryptieresultaat van elk blok alleen afhankelijk is van de inhoud ervan (het overeenkomstige blok van de originele tekst). Als er meerdere identieke blokken originele (platte) tekst zijn, zullen de overeenkomstige cijfertekstblokken ook identiek zijn, wat aanvullende nuttige informatie oplevert voor een cryptanalyticus die het cijfer probeert te kraken. Daarom wordt deze modus voornamelijk gebruikt voor het versleutelen van de versleutelingssleutels zelf (er worden heel vaak schema's met meerdere sleutels geïmplementeerd, waarbij om een ​​aantal redenen de sleutels op elkaar worden versleuteld). Twee andere bedrijfsmodi zijn bedoeld voor het coderen van de informatie zelf: gamma en gamma met feedback.

IN gamma-modus Elk leesbare tekstblok wordt bit voor bit modulo 2 toegevoegd aan een 64-bits gecodeerd gammablok. Het gammacijfer is een speciale reeks die wordt verkregen als resultaat van bepaalde bewerkingen met registers N1 en N2 (zie figuur 1).

1. Hun initiële vulling wordt naar de registers N1 en N2 geschreven - een 64-bits waarde die een synchronisatiebericht wordt genoemd.

2. De inhoud van registers N1 en N2 (in dit geval synchronisatieberichten) wordt gecodeerd in de eenvoudige vervangingsmodus.

3. De inhoud van register N1 wordt modulo (232 - 1) opgeteld met de constante C1 = 224 + 216 + 28 + 24, en het resultaat van de optelling wordt naar register N1 geschreven.

4. De inhoud van register N2 wordt modulo 232 opgeteld met de constante C2 = 224 + 216 + 28 + 1, en het resultaat van de optelling wordt naar register N2 geschreven.

5. De inhoud van registers N1 en N2 wordt uitgevoerd als een 64-bits gammablok van het cijfer (in dit geval vormen N1 en N2 het eerste gammablok).

Als het volgende gammablok nodig is (d.w.z. de codering of decodering moet doorgaan), wordt teruggekeerd naar stap 2.

Voor decodering wordt gamma op een vergelijkbare manier gegenereerd, en vervolgens worden de cijfertekst en gammabits opnieuw XORed. Omdat deze bewerking omkeerbaar is, wordt bij een correct ontwikkelde schaal de originele tekst (tabel) verkregen.

Codering en decodering in gammamodus

Om het cijfer te ontwikkelen dat nodig is om het gamma te ontsleutelen, moet de gebruiker die het cryptogram ontsleutelt dezelfde sleutel en dezelfde waarde van het synchronisatiebericht hebben die werden gebruikt bij het versleutelen van de informatie. Anders is het niet mogelijk om de originele tekst uit de gecodeerde tekst te halen.

In de meeste implementaties van het GOST 28147-89-algoritme is het synchronisatiebericht niet geheim, maar er zijn systemen waarbij het synchronisatiebericht hetzelfde geheime element is als de coderingssleutel. Voor dergelijke systemen wordt de effectieve sleutellengte van het algoritme (256 bits) vergroot met nog eens 64 bits van het geheime synchronisatiebericht, dat ook als een sleutelelement kan worden beschouwd.

In de feedback-gammamodus wordt voor het vullen van de N1- en N2-registers, beginnend bij het tweede blok, niet het vorige gammablok gebruikt, maar het resultaat van het coderen van het vorige leesbare tekstblok (Fig. 2). Het eerste blok in deze modus wordt volledig op dezelfde manier gegenereerd als het vorige.

Rijst. 2. Ontwikkeling van een cipher-gamma in de gamma-modus met feedback.

Gezien de modus het genereren van imitatievoorvoegsels moet het concept van het onderwerp generatie worden gedefinieerd. Een voorvoegsel is een cryptografische controlesom die wordt berekend met behulp van een coderingssleutel en is ontworpen om de integriteit van berichten te verifiëren. Bij het genereren van een imitatievoorvoegsel worden de volgende bewerkingen uitgevoerd: het eerste 64-bits blok van de informatiearray, waarvoor het imitatievoorvoegsel wordt berekend, wordt naar de registers N1 en N2 geschreven en gecodeerd in de gereduceerde eenvoudige vervangingsmodus (de eerste 16 van de 32 ronden worden uitgevoerd). Het resulterende resultaat wordt modulo 2 opgeteld bij het volgende informatieblok en het resultaat wordt opgeslagen in N1 en N2.

De cyclus herhaalt zich tot het laatste informatieblok. De resulterende 64-bits inhoud van de registers N1 en N2 of een deel daarvan als gevolg van deze transformaties wordt het imitatievoorvoegsel genoemd. De grootte van het imitatievoorvoegsel wordt geselecteerd op basis van de vereiste betrouwbaarheid van berichten: met de lengte van het imitatievoorvoegsel r bits is de kans dat een verandering in het bericht onopgemerkt blijft 2-r. er wordt een bitimitatievoorvoegsel gebruikt, d.w.z. de helft van de inhoud van de registers. Dit is voldoende, omdat, zoals elke controlesom, de imitatiebijlage in de eerste plaats bedoeld is om te beschermen tegen onbedoelde vervorming van informatie. Ter bescherming tegen opzettelijke wijziging van gegevens worden andere cryptografische methoden gebruikt, voornamelijk een elektronische digitale handtekening.

Bij het uitwisselen van informatie dient het imitatievoorvoegsel als een soort extra controlemiddel. Het wordt berekend voor de leesbare tekst wanneer informatie is gecodeerd en samen met de cijfertekst wordt verzonden. Na decodering wordt een nieuwe waarde van het imitatievoorvoegsel berekend en vergeleken met de verzonden waarde. Als de waarden niet overeenkomen, betekent dit dat de cijfertekst tijdens de verzending beschadigd is of dat er tijdens de decodering onjuiste sleutels zijn gebruikt. Het imitatievoorvoegsel is vooral handig voor het controleren van de juiste decodering van sleutelinformatie bij gebruik van schema's met meerdere sleutels.

Het GOST 28147-89-algoritme wordt als een zeer sterk algoritme beschouwd - op dit moment zijn er geen effectievere methoden voorgesteld voor de openbaarmaking ervan dan de hierboven genoemde "brute force" -methode. De hoge veiligheid wordt voornamelijk bereikt door de grote sleutellengte - 256 bits. Bij gebruik van een geheim synchronisatiebericht neemt de effectieve sleutellengte toe tot 320 bits, en het versleutelen van de vervangingstabel voegt extra bits toe. Bovendien hangt de cryptografische sterkte af van het aantal transformatierondes, dat volgens GOST 28147-89 32 zou moeten zijn (het volledige effect van de verspreiding van invoergegevens wordt bereikt na 8 ronden).

AES-standaard

In tegenstelling tot het GOST 28147-89-algoritme, dat lange tijd geheim bleef, werd de Amerikaanse AES-coderingsstandaard, ontworpen om DES te vervangen, geselecteerd via een open competitie, waarbij alle geïnteresseerde organisaties en individuen de kandidaat-algoritmen konden bestuderen en becommentariëren.

Een wedstrijd ter vervanging van DES werd in 1997 aangekondigd door het Amerikaanse National Institute of Standards and Technology (NIST - National Institute of Standards and Technology). Voor de wedstrijd werden 15 kandidaat-algoritmen ingezonden, ontwikkeld door zowel bekende organisaties op het gebied van cryptografie (RSA Security, Counterpane, etc.) als particulieren. De resultaten van de wedstrijd werden in oktober 2000 bekend gemaakt: de winnaar was het Rijndael-algoritme, ontwikkeld door twee cryptografen uit België, Vincent Rijmen en Joan Daemen.

Het Rijndael-algoritme is niet vergelijkbaar met de meeste bekende symmetrische encryptie-algoritmen, waarvan de structuur het “Feistel-netwerk” wordt genoemd en vergelijkbaar is met de Russische GOST 28147-89. De bijzonderheid van het Feistel-netwerk is dat de invoerwaarde wordt verdeeld in twee of meer subblokken, waarvan een deel in elke ronde volgens een bepaalde wet wordt verwerkt, waarna deze over onverwerkte subblokken wordt gesuperponeerd (zie figuur 1).

In tegenstelling tot de binnenlandse encryptiestandaard vertegenwoordigt het Rijndael-algoritme een datablok in de vorm van een tweedimensionale byte-array met de grootte 4X4, 4X6 of 4X8 (het gebruik van verschillende vaste groottes van het gecodeerde informatieblok is toegestaan). Alle bewerkingen worden uitgevoerd op individuele bytes van de array, maar ook op onafhankelijke kolommen en rijen.

Het Rijndael-algoritme voert vier transformaties uit: BS (ByteSub) - tabelvervanging van elke byte van de array (Fig. 3); SR (ShiftRow) - verschuiving van arrayrijen (Fig. 4). Met deze bewerking blijft de eerste regel ongewijzigd en wordt de rest cyclisch byte voor byte naar links verschoven met een vast aantal bytes, afhankelijk van de grootte van de array. Voor een 4X4-array worden de lijnen 2, 3 en 4 bijvoorbeeld respectievelijk met 1, 2 en 3 bytes verschoven. Vervolgens komt MC (MixColumn) - een bewerking op onafhankelijke arraykolommen (Fig. 5), waarbij elke kolom wordt vermenigvuldigd met een vaste matrix c(x) volgens een bepaalde regel. En tot slot AK (AddRoundKey) - een sleutel toevoegen. Elke bit van de array wordt modulo 2 opgeteld bij de overeenkomstige bit van de ronde sleutel, die op zijn beurt op een bepaalde manier wordt berekend op basis van de encryptiesleutel (Fig. 6).


Rijst. 3. Operatie BS.

Rijst. 4. Operatie SR.

Rijst. 5. Operatie MC.

Het aantal encryptierondes (R) in het Rijndael-algoritme is variabel (10, 12 of 14 ronden) en hangt af van de blokgrootte en de encryptiesleutel (er zijn ook meerdere vaste groottes voor de sleutel).

Decodering wordt uitgevoerd met behulp van de volgende omgekeerde bewerkingen. Een tabelinversie en tabelvervanging worden uitgevoerd op een inverse tabel (ten opzichte van de tabel die wordt gebruikt tijdens de codering). De omgekeerde bewerking van SR is het roteren van rijen naar rechts in plaats van naar links. De inverse bewerking voor MC is vermenigvuldiging met dezelfde regels met een andere matrix d(x) die voldoet aan de voorwaarde: c(x) * d(x) = 1. Het optellen van de sleutel AK is het omgekeerde van zichzelf, omdat het alleen de XOR gebruikt operatie. Deze omgekeerde bewerkingen worden tijdens de decodering toegepast in de omgekeerde volgorde van de volgorde die tijdens de codering wordt gebruikt.

Rijndael is de nieuwe standaard voor data-encryptie geworden vanwege een aantal voordelen ten opzichte van andere algoritmen. Allereerst biedt het een hoge coderingssnelheid op alle platforms: zowel software- als hardware-implementatie. Het onderscheidt zich door onvergelijkbaar betere mogelijkheden voor het parallelliseren van berekeningen vergeleken met andere algoritmen die aan de concurrentie zijn voorgelegd. Bovendien zijn de bronvereisten voor de werking ervan minimaal, wat belangrijk is bij gebruik op apparaten met beperkte computermogelijkheden.

Het enige nadeel van het algoritme kan worden beschouwd als het inherente onconventionele schema ervan. Feit is dat de eigenschappen van algoritmen gebaseerd op het Feistel-netwerk goed zijn onderzocht, en Rijndael kan daarentegen verborgen kwetsbaarheden bevatten die pas kunnen worden ontdekt nadat er enige tijd is verstreken sinds het wijdverbreide gebruik ervan begon.

Asymmetrische encryptie

Asymmetrische encryptie-algoritmen gebruiken, zoals reeds opgemerkt, twee sleutels: k1 - de encryptiesleutel, of openbaar, en k2 - de decryptiesleutel, of geheim. De publieke sleutel wordt berekend op basis van het geheim: k1 = f(k2).

Asymmetrische versleutelingsalgoritmen zijn gebaseerd op het gebruik van eenrichtingsfuncties. Per definitie is een functie y = f(x) unidirectioneel als: het gemakkelijk te berekenen is voor alle mogelijke waarden van x en het voor de meeste mogelijke waarden van y vrij moeilijk is om een ​​waarde van x te berekenen zodat y = f(x).

Een voorbeeld van een eenrichtingsfunctie is de vermenigvuldiging van twee grote getallen: N = P*Q. Op zichzelf is een dergelijke vermenigvuldiging een eenvoudige handeling. De inverse functie (ontleding van N in twee grote factoren), die volgens moderne tijdschattingen factorisatie wordt genoemd, is echter een tamelijk complex wiskundig probleem. Factorisatie N met een dimensie van 664 bits bij P ? Voor Q zijn ongeveer 1023 bewerkingen nodig, en om x omgekeerd te berekenen voor de modulaire exponent y = ax mod p met bekende a, p en y (met dezelfde afmetingen van a en p) moet je ongeveer 1026 bewerkingen uitvoeren. Het laatste gegeven voorbeeld heet het Discrete Logaritme Probleem (DLP), en dit soort functie wordt vaak gebruikt in asymmetrische versleutelingsalgoritmen, maar ook in algoritmen die worden gebruikt om een ​​elektronische digitale handtekening te creëren.

Een andere belangrijke klasse van functies die bij asymmetrische encryptie worden gebruikt, zijn eenrichtingsachterdeurfuncties. Hun definitie stelt dat een functie unidirectioneel is met een achterdeur als deze unidirectioneel is en het mogelijk is om efficiënt de inverse functie x = f-1(y) te berekenen, dat wil zeggen als de "achterdeur" (een geheim nummer, toegepast op asymmetrische codering) algoritmen - de waarde van de geheime sleutel).

One-way backdoor-functies worden gebruikt in het veelgebruikte asymmetrische encryptie-algoritme RSA.

RSA-algoritme

Het werd in 1978 ontwikkeld door drie auteurs (Rivest, Shamir, Adleman) en dankt zijn naam aan de eerste letters van de achternaam van de ontwikkelaars. De betrouwbaarheid van het algoritme is gebaseerd op de moeilijkheid van het ontbinden van grote getallen en het berekenen van discrete logaritmen. De belangrijkste parameter van het RSA-algoritme is de systeemmodule N, die wordt gebruikt om alle berekeningen in het systeem uit te voeren, en N = P*Q (P en Q zijn geheime willekeurige priemgetallen, meestal van dezelfde dimensie).

De geheime sleutel k2 wordt willekeurig gekozen en moet aan de volgende voorwaarden voldoen:

1

waarbij GCD de grootste gemene deler is, d.w.z. k1 moet coprime zijn ten opzichte van de waarde van de Euler-functie F(N), waarbij de laatste gelijk is aan het aantal positieve gehele getallen in het bereik van 1 tot N coprime tot N, en wordt berekend als F(N) = (P - 1)*(Q - 1).

Uit de relatie wordt de publieke sleutel k1 berekend (k2*k1) = 1 mod F(N), en voor dit doel wordt het gegeneraliseerde Euclidische algoritme (algoritme voor het berekenen van de grootste gemene deler) gebruikt. Versleuteling van datablok M met behulp van het RSA-algoritme wordt als volgt uitgevoerd: C=M [tot de macht k1] mod N. Merk op dat, aangezien in een echt cryptosysteem dat RSA gebruikt, het getal k1 erg groot is (momenteel kan de afmeting oplopen tot 2048 bits), directe berekening van M [tot de macht k1] onrealistisch. Om dit te verkrijgen wordt een combinatie van herhaalde kwadratering van M en vermenigvuldiging van de resultaten gebruikt.

Inversie van deze functie voor grote afmetingen is niet haalbaar; met andere woorden, het is onmogelijk om M te vinden gegeven de bekende C, N en k1. Als je echter een geheime sleutel k2 hebt, kun je met behulp van eenvoudige transformaties M = Ck2 mod N berekenen. Uiteraard is het, naast de geheime sleutel zelf, noodzakelijk om de geheimhouding van de parameters P en Q te garanderen. Als een aanvaller hun waarden verkrijgt , zal hij de geheime sleutel k2 kunnen berekenen.

Welke encryptie is beter?

Het grootste nadeel van symmetrische encryptie is de noodzaak om sleutels ‘van hand tot hand’ over te dragen. Dit nadeel is zeer ernstig, omdat het het onmogelijk maakt om symmetrische encryptie te gebruiken in systemen met een onbeperkt aantal deelnemers. Voor het overige heeft symmetrische encryptie echter enkele voordelen die duidelijk zichtbaar zijn tegen de achtergrond van de ernstige nadelen van asymmetrische encryptie.

De eerste daarvan is de lage snelheid van coderings- en decoderingsbewerkingen, vanwege de aanwezigheid van resource-intensieve bewerkingen. Een ander nadeel is ‘theoretisch’: de cryptografische kracht van asymmetrische encryptie-algoritmen is niet wiskundig bewezen. Dit komt voornamelijk door het probleem van de discrete logaritme - het is nog niet bewezen dat de oplossing ervan binnen een acceptabele tijd onmogelijk is. Er worden ook onnodige problemen gecreëerd door de noodzaak om publieke sleutels te beschermen tegen vervanging. Door de publieke sleutel van een legale gebruiker te vervangen, kan een aanvaller een belangrijk bericht versleutelen met zijn publieke sleutel en dit vervolgens gemakkelijk ontsleutelen met zijn privésleutel.

Deze tekortkomingen verhinderen echter niet het wijdverbreide gebruik van asymmetrische encryptie-algoritmen. Tegenwoordig zijn er cryptosystemen die de certificering van publieke sleutels ondersteunen en symmetrische en asymmetrische encryptie-algoritmen combineren. Maar dit is een onderwerp voor een apart artikel.

Aanvullende informatiebronnen

Voor die lezers die serieus geïnteresseerd zijn in encryptie, raadt de auteur aan om hun horizon te verbreden met behulp van de volgende boeken.

  1. Brassard J. "Moderne cryptologie."
  2. Petrov A. A. "Computerbeveiliging: cryptografische beschermingsmethoden."
  3. Romanets Yu V., Timofeev P.A., Shangin V.F. "Informatiebescherming in moderne computersystemen."
  4. Sokolov A.V., Shangin V.F. "Informatiebescherming in gedistribueerde bedrijfsnetwerken en -systemen."

Een volledige beschrijving van versleutelingsalgoritmen kunt u vinden in de volgende documenten:

  1. GOST 28147-89. Informatieverwerkingssysteem. Cryptografische bescherming.
  2. Cryptografisch conversie-algoritme. - M.: Staatsnorm van de USSR, 1989.
  3. AES-algoritme: http://www.nist.gov/ae.

RSA-algoritme: http://www.rsasecurity.com/rsalabs/pkcs/pkcs-1.

Het DES-algoritme is opgebouwd volgens de Feistel-netwerkmethodologie en bestaat uit een afwisselende reeks permutaties en substituties. Het DES-algoritme codeert 64-bits gegevensblokken met behulp van een 64-bits sleutel, waarbij 56 bits significant zijn (de overige 8 zijn pariteitscontrolebits).

Het versleutelingsproces bestaat uit een initiële permutatie van de bits van een blok van 64 bits, zestien versleutelingscycli (ronden) en ten slotte een uiteindelijke permutatie van de bits (figuur 6.2).

Rijst. 6.2.

Decodering in DES is de omgekeerde bewerking van codering en wordt uitgevoerd door de coderingsbewerkingen in omgekeerde volgorde te herhalen.

De belangrijkste voordelen van het DES-algoritme:

  • er wordt slechts één 56-bits sleutel gebruikt;
  • de relatieve eenvoud van het algoritme zorgt voor een hoge verwerkingssnelheid;
  • Nadat u een bericht met één softwarepakket hebt gecodeerd, kunt u elk ander softwarepakket gebruiken dat voldoet aan het DES-algoritme voor decodering;
  • De cryptografische kracht van het algoritme is ruim voldoende om de informatiebeveiliging van de meeste commerciële toepassingen te garanderen.

Moderne microprocessortechnologie maakt het mogelijk om binnen een redelijk tijdsbestek symmetrische blokcijfers met een sleutellengte van 40 bits te kraken. Voor dergelijk hacken wordt de brute force-methode gebruikt: een totale test van alle mogelijke sleutelwaarden (de ‘brute force’-methode). Tot voor kort werd DES beschouwd als een relatief veilig versleutelingsalgoritme.

Er zijn veel manieren om blokalgoritmen te combineren om nieuwe, robuustere algoritmen te creëren. Eén zo'n manier is meerdere codering - meerdere keren een blokalgoritme gebruiken met verschillende sleutels om hetzelfde blok leesbare tekst te coderen. Met drievoudige codering kunnen drie verschillende sleutels worden gebruikt.

Het 3-DES-algoritme (Triple DES) wordt gebruikt in situaties waarin de betrouwbaarheid van het DES-algoritme als onvoldoende wordt beschouwd.

Tegenwoordig worden er steeds vaker twee moderne, krachtige encryptie-algoritmen gebruikt: de binnenlandse encryptiestandaard GOST 28147-89 en de nieuwe Amerikaanse cryptostandaard - AES (Advanced Encryption Standard).

De encryptiestandaard GOST 28147-89 is bedoeld voor hardware- en software-implementatie, voldoet aan cryptografische vereisten en legt geen beperkingen op aan de mate van geheimhouding van de beschermde informatie. Het gegevensversleutelingsalgoritme, gedefinieerd door GOST 28147-89, is een 64-bits blokalgoritme met een 256-bits sleutel.

De te versleutelen gegevens worden verdeeld in blokken van 64 bits. Deze blokken zijn onderverdeeld in twee subblokken Nx En N2 Elk 32 bits (Fig. 6.3). Het /V-deelblok wordt op een bepaalde manier verwerkt, waarna de waarde ervan wordt opgeteld bij de waarde van het deelblok N2(optelling wordt uitgevoerd modulo 2, d.w.z. de logische bewerking XOR wordt toegepast - "exclusief of"), en vervolgens


Rijst. 6.3.

subblokken worden verwisseld. Deze transformatie wordt een bepaald aantal keren ("rondes") uitgevoerd - 16 of 32, afhankelijk van de werkingsmodus van het algoritme.

In elke ronde worden twee operaties uitgevoerd.

De eerste operatie is de sleuteltoepassing. De inhoud van het /V-subblok wordt modulo 2 32 toegevoegd met het 32-bits deel van de sleutel Kx. De volledige coderingssleutel wordt weergegeven als een aaneenschakeling van 32-bits subsleutels: K 0, K (, K 2, K 3, K 4, K 5, K 6, K 7. Tijdens het versleutelingsproces wordt één van deze subsleutels gebruikt, afhankelijk van het ronde getal en de werkingsmodus van het algoritme.

De tweede operatie is het vervangen van de tafel. Na het toepassen van het sleutelsubblok N ( is verdeeld in 8 delen van 4 bits, waarvan de waarde wordt vervangen in overeenstemming met de vervangingstabel voor dit deel van het subblok. Het subblok wordt vervolgens 11 bits naar links geroteerd.

Vervangingen van tafels. De 5-box substitutiebox wordt vaak gebruikt in moderne encryptie-algoritmen, dus het is de moeite waard om uit te leggen hoe een dergelijke operatie is georganiseerd.

Het vervangingsblok met 5 vakken bestaat uit acht vervangende knooppunten (5-vervangingsblokken) 5, S2,..., 5 8 met elk 64 bit geheugen. Aangekomen bij het vervangingsblok S De 32-bits vector is verdeeld in 8 opeenvolgende 4-bits vectoren, die elk door het overeenkomstige vervangingsknooppunt worden omgezet in een 4-bits vector. Elk vervangend knooppunt kan worden weergegeven als een permutatietabel van 16 binaire getallen van 4 bits in het bereik 0000... 1111. De invoervector specificeert het adres van een rij in de tabel, en het getal in die rij is de uitvoervector. De 4-bits uitgangsvectoren worden vervolgens opeenvolgend gecombineerd tot een 32-bits vector. Vervangingsknooppunten (permutatietabellen) zijn sleutelelementen die gemeenschappelijk zijn voor het computernetwerk en zelden veranderen. Deze vervangende knooppunten moeten geheim worden gehouden.

Het algoritme gedefinieerd door GOST 28147-89 biedt vier bedrijfsmodi: eenvoudige vervanging, gamen, gamen met feedback En het genereren van imitatievoorvoegsels. Ze gebruiken dezelfde encryptietransformatie die hierboven is beschreven, maar omdat het doel van de modi verschillend is, wordt deze transformatie in elk ervan anders uitgevoerd.

Het algoritme, gedefinieerd door GOST 28147-89, biedt vier werkingsmodi: eenvoudige vervanging, gamma, gamma met feedback en het genereren van imitatiebijlagen. Ze gebruiken dezelfde encryptietransformatie die hierboven is beschreven, maar omdat het doel van de modi verschillend is, wordt deze transformatie in elk ervan anders uitgevoerd. In modus Om elk 64-bits informatieblok te coderen, worden de hierboven beschreven 32 ronden uitgevoerd. In dit geval worden 32-bits subsleutels in de volgende volgorde gebruikt:

K 0, K (, K 2, K 3, K 4, K 5, K 6, K 7, K 0,/G, enz. - in rondes 1 tot en met 24;

K 7, K b, K 5, K 4, K 3, K 2, K x, K 0 - in rondes 25 tot en met 32.

Decodering in deze modus wordt op precies dezelfde manier uitgevoerd, maar met een iets andere volgorde van het gebruik van subsleutels:

K0, AG, K 2, K 3, K 4, K 5, K b, K 7 - in rondes 1 tot en met 8;

K 7, K 6, K 5, K 4, K 3, K 2, K (, K 0, K 7, K b etc. - in rondes van 9 tot 32.

Alle blokken worden onafhankelijk van elkaar gecodeerd, dat wil zeggen dat het resultaat van het coderen van elk blok alleen afhankelijk is van de inhoud ervan (het overeenkomstige blok van de originele tekst). Als er meerdere identieke blokken originele (platte) tekst zijn, zullen de overeenkomstige cijfertekstblokken ook identiek zijn, wat aanvullende nuttige informatie oplevert voor een cryptanalyticus die het cijfer probeert te kraken. Daarom wordt deze modus voornamelijk gebruikt voor het versleutelen van de versleutelingssleutels zelf (er worden heel vaak schema's met meerdere sleutels geïmplementeerd, waarbij om een ​​aantal redenen de sleutels op elkaar worden versleuteld). Twee andere bedrijfsmodi zijn bedoeld voor het coderen van de informatie zelf: gamma en gamma met feedback.

IN gamma-modus Elk leesbare tekstblok wordt bit voor bit modulo 2 toegevoegd aan een 64-bits gecodeerd gammablok. Cipher-gamma - dit is een speciale reeks die wordt verkregen als resultaat van bepaalde bewerkingen met registers N1 En S 2(Afb. 6.9):

  • 1. Naar registers N^ En 1U 2 hun initiële vulling wordt geregistreerd - een 64-bits waarde die een synchronisatiebericht wordt genoemd.
  • 2. De inhoud van de registers is gecodeerd N1 En M2(in dit geval - berichten synchroniseren) in de eenvoudige vervangingsmodus.
  • 3. Registreer inhoud N^ wordt modulo (2 32 - 1) opgeteld met constante C, = 2 24 + 2 16 + 2 8 + 2 4, en het resultaat van de optelling wordt naar het register geschreven N1 .
  • 4. De inhoud van register CU 2 wordt modulo 232 opgeteld met de constante C 2 = 2 24 + 2 16 + 2 8 + 1, en het resultaat van de optelling wordt naar register CU 2 geschreven.
  • 5. Inhoud registers N, En S 2 uitvoer als een 64-bits gecodeerd gammablok (in dit geval N^ en VU 2 vormen het eerste blok van de schaal).

Als het volgende gammablok nodig is (d.w.z. de codering of decodering moet doorgaan), wordt teruggekeerd naar stap 2.

Om te decoderen wordt de gamma op een vergelijkbare manier gegenereerd, en vervolgens wordt de X(G)-bewerking opnieuw toegepast op de cijfertekst en gammabits. Omdat deze bewerking omkeerbaar is, wordt in het geval van een correct gegenereerde gamma de originele tekst verkregen (Tabel 6.1).

Tabel 6.1. Codering en decodering in gammamodus

Om het cijfer te ontwikkelen dat nodig is om het gamma te ontsleutelen, moet de gebruiker die het cryptogram ontsleutelt dezelfde sleutel en dezelfde waarde van het synchronisatiebericht hebben die werden gebruikt bij het versleutelen van de informatie. Anders is het niet mogelijk om de originele tekst uit de gecodeerde tekst te halen.

In de meeste implementaties van het GOST 28147-89-algoritme is het synchronisatiebericht niet geheim, maar er zijn systemen waarbij het synchronisatiebericht hetzelfde geheime element is als de coderingssleutel. Voor dergelijke systemen wordt de effectieve sleutellengte van het algoritme (256 bits) vergroot met nog eens 64 bits van het geheime synchronisatiebericht, dat ook als een sleutelelement kan worden beschouwd.

IN gammamodus met feedback om de L"- en IU 2-registers te vullen, beginnend bij het tweede blok, wordt niet het vorige gammablok gebruikt, maar het resultaat van het coderen van het vorige leesbare tekstblok (Fig. 6.4). Het eerste blok in deze modus wordt volledig op dezelfde manier gegenereerd als de vorige.

Gezien de modus het genereren van imitatievoorvoegsels, het concept van het onderwerp generatie moet worden gedefinieerd. Imitatie voorvoegsel - is een cryptografische controlesom berekend met behulp van

Rijst. 6.4.

Het aanroepen van een encryptiesleutel en ontworpen om de integriteit van berichten te verifiëren. Bij het genereren van een imitatievoorvoegsel worden de volgende bewerkingen uitgevoerd: het eerste 64-bits blok van de informatiearray, waarvoor het imitatievoorvoegsel wordt berekend, wordt naar de registers ^ en A^ 2 geschreven en gecodeerd in de gereduceerde eenvoudige vervanging modus (de eerste 16 van de 32 ronden worden uitgevoerd). Het verkregen resultaat wordt modulo 2 opgeteld bij het volgende informatieblok, waarbij het resultaat wordt opgeslagen in L", en S 2.

De cyclus herhaalt zich tot het laatste informatieblok. De resulterende 64-bits inhoud van de registers A^ en A^2 of een deel ervan wordt een imitatievoorvoegsel genoemd. De grootte van de imitatiebijlage wordt gekozen op basis van de vereiste betrouwbaarheid van berichten: met de lengte van de imitatiebijlage G De kans dat een berichtwijziging onopgemerkt blijft, is echter groot 2~ gr.

Het meest gebruikte is een imitatief voorvoegsel van 32 bits, d.w.z. de helft van de inhoud van de registers. Dit is voldoende, omdat, zoals elke controlesom, de imitatiebijlage in de eerste plaats bedoeld is om te beschermen tegen onbedoelde vervorming van informatie. Ter bescherming tegen opzettelijke wijziging van gegevens worden andere cryptografische methoden gebruikt, voornamelijk een elektronische digitale handtekening.

Bij het uitwisselen van informatie dient het imitatievoorvoegsel als een soort extra controlemiddel. Het wordt berekend voor de leesbare tekst wanneer informatie is gecodeerd en samen met de cijfertekst wordt verzonden. Na decodering wordt een nieuwe waarde van het imitatievoorvoegsel berekend en vergeleken met de verzonden waarde. Als de waarden niet overeenkomen, betekent dit dat de cijfertekst tijdens de verzending beschadigd is of dat er tijdens de decodering onjuiste sleutels zijn gebruikt. Het imitatievoorvoegsel is vooral handig voor het controleren van de juiste decodering van sleutelinformatie bij gebruik van schema's met meerdere sleutels.

Het GOST 28147-89-algoritme is een zeer robuust algoritme - op dit moment zijn er geen effectievere methoden voorgesteld voor de openbaarmaking ervan dan de hierboven genoemde "brute force" -methode. De hoge veiligheid wordt voornamelijk bereikt door de grote sleutellengte - 256 bits. Bij gebruik van een geheim synchronisatiebericht neemt de effectieve sleutellengte toe tot 320 bits, en het versleutelen van de vervangingstabel voegt extra bits toe. Bovendien hangt de cryptografische sterkte af van het aantal transformatierondes, dat volgens GOST 28147-89 32 zou moeten zijn (het volledige effect van de verspreiding van invoergegevens wordt bereikt na 8 ronden).

AES-coderingsstandaard. In 1997 kondigde het American Standards Institute NIST (National Institute of Standards & Technology) een wedstrijd aan voor een nieuwe standaard voor een symmetrisch cryptografisch algoritme, genaamd AES (Advanced Encryption Standard). De grootste cryptologiecentra ter wereld waren bij de ontwikkeling ervan betrokken. De winnaar van deze wedstrijd werd feitelijk de wereldwijde cryptostandaard voor de komende 10-20 jaar.

De volgende eisen werden gesteld aan cryptografische algoritmen – kandidaten voor de nieuwe AES-standaard:

  • het algoritme moet symmetrisch zijn;
  • het algoritme moet een blokcijfer zijn;
  • het algoritme moet een bloklengte van 128 bits hebben en drie sleutellengtes ondersteunen: 128, 192 en 256 bits.

Bovendien werd ontwikkelaars van crypto-algoritmen aanbevolen om:

  • bewerkingen gebruiken die eenvoudig kunnen worden geïmplementeerd, zowel in hardware (in microchips) als in software (op personal computers en servers);
  • focus op 32-bits processors;
  • maak de structuur van het cijfer niet onnodig ingewikkeld, zodat alle geïnteresseerde partijen onafhankelijk een onafhankelijke cryptanalyse van het algoritme kunnen uitvoeren en ervoor kunnen zorgen dat het geen ongedocumenteerde mogelijkheden bevat.

De resultaten van de wedstrijd werden in oktober 2000 samengevat - het Rijndael-algoritme, ontwikkeld door twee cryptografen uit België, Vincent Rijmen en Joan Daemen, werd tot winnaar uitgeroepen. Het Rijndael-algoritme is de nieuwe AES-data-encryptiestandaard geworden.

Het AES-algoritme is niet vergelijkbaar met de meeste bekende symmetrische encryptie-algoritmen, waarvan de structuur het “Feistel-netwerk” wordt genoemd en vergelijkbaar is met de Russische GOST 28147-89. In tegenstelling tot de binnenlandse versleutelingsstandaard vertegenwoordigt het AES-algoritme elk blok verwerkte gegevens in de vorm van een tweedimensionale byte-array met de grootte 4x4, 4x6 of 4x8, afhankelijk van de ingestelde bloklengte (het gebruik van verschillende vaste groottes van de gecodeerd informatieblok is toegestaan). Verder worden in de juiste fasen transformaties uitgevoerd op onafhankelijke kolommen, of op onafhankelijke rijen, of zelfs op individuele bytes.

Het AES-algoritme bestaat uit een bepaald aantal rondes (van 10 tot 14 - dit is afhankelijk van de blokgrootte en sleutellengte) en voert vier transformaties uit:

BS (ByteSub) - tabelvervanging van elke byte van de array (Fig. 6.5);

SR (ShiftRow) - verschuif rijen van de array (Fig. 6.6). Met deze bewerking blijft de eerste regel ongewijzigd en wordt de rest cyclisch byte voor byte naar links verschoven met een vast aantal bytes, afhankelijk van de grootte van de array. Voor een 4x4-array worden de lijnen 2, 3 en 4 bijvoorbeeld respectievelijk met 1, 2 en 3 bytes verschoven;

MS (MixColumn) is een bewerking op onafhankelijke kolommen van een array (Fig. 6.7), waarbij elke kolom wordt vermenigvuldigd met een vaste matrix c(x) volgens een bepaalde regel;

AK (AddRoundKey) - een sleutel toevoegen. Elke bit van de array wordt modulo 2 opgeteld bij de corresponderende bit van de ronde sleutel, die op zijn beurt op een bepaalde manier wordt berekend op basis van de encryptiesleutel (Fig. 6.8).


Rijst. 6.5.

om elke byte van de State-array te verwerken

Rijst. 6.6. De SR (ShiftRow)-transformatie verschuift cyclisch de laatste drie

tekenreeksen in de State-array

D 2 J

tot oz

tot z

Rijst. 6.8. De AK-transformatie (AddRoundKey) voert de XOR-optelling van elk uit

State array-kolom met een woord uit de sleutelset

Deze conversies zijn van invloed op de State-array, die wordt aangesproken door de "state"-aanwijzer. De AddRoundKey-transformatie gebruikt een extra aanwijzer om de Ronde Sleutel aan te pakken.

De BS (ByteSub)-transformatie is een niet-lineaire bytesubstitutie die onafhankelijk werkt op elke byte van de State-array met behulp van de iS-box-substitutietabel.

In elke ronde (op enkele uitzonderingen na) worden achtereenvolgens de volgende handelingen uitgevoerd op de gecodeerde gegevens:

transformaties (Fig. 6.9). Uitzonderingen gelden voor de eerste en laatste ronde: vóór de eerste ronde wordt bovendien de AK-operatie uitgevoerd en in de laatste ronde is er geen MS.

Rijst. 6.9.

Als gevolg hiervan ziet de volgorde van bewerkingen tijdens de codering er als volgt uit:

AK, (BS, SR, MC, AK) (herhaald R- 1 keer), BS, SR, AK.

Aantal versleutelingsrondes R in het AES-algoritme is variabel (10, 12 of 14 ronden) en afhankelijk van de blokgrootte en de encryptiesleutel (er zijn ook verschillende vaste groottes voor de sleutel).

Decodering wordt uitgevoerd met behulp van de volgende omgekeerde bewerkingen. De tabel wordt omgekeerd en de tabel wordt vervangen door een omgekeerde tabel (ten opzichte van de tabel die wordt gebruikt voor codering). De omgekeerde bewerking van SR is het roteren van rijen naar rechts in plaats van naar links. De omgekeerde bewerking voor MS is vermenigvuldiging met dezelfde regels door een andere matrix d(x), voldoen aan de voorwaarde c(x) d(x) = 1. Het toevoegen van de sleutel AK is het omgekeerde van zichzelf, omdat alleen de XOR-bewerking wordt gebruikt. Deze omgekeerde bewerkingen worden tijdens de decodering toegepast in de omgekeerde volgorde van de volgorde die tijdens de codering wordt gebruikt.

Alle transformaties in het AES-cijfer hebben een strikte wiskundige basis. Dankzij de structuur zelf en de volgorde van de bewerkingen kan dit algoritme effectief worden uitgevoerd op zowel 8-bits als 32-bits processors. De structuur van het algoritme omvat de mogelijkheid van parallelle uitvoering van sommige bewerkingen, waardoor de coderingssnelheid op werkstations met meerdere processors vier keer kan worden verhoogd.

Het AES-algoritme is een nieuwe standaard geworden voor gegevensversleuteling vanwege een aantal voordelen ten opzichte van andere algoritmen. Allereerst biedt het een hoge coderingssnelheid op alle platforms: zowel software- als hardware-implementatie. Bovendien zijn de bronvereisten voor de werking ervan minimaal, wat belangrijk is bij gebruik op apparaten met beperkte computermogelijkheden.

Het enige nadeel van het AES-algoritme is het onconventionele ontwerp. Feit is dat de eigenschappen van algoritmen gebaseerd op het “Feistel-netwerk” goed zijn onderzocht, en dat AES daarentegen verborgen kwetsbaarheden kan bevatten die pas kunnen worden ontdekt nadat er enige tijd is verstreken sinds het wijdverbreide gebruik ervan.

Andere cryptografische algoritmen met symmetrische blokken worden ook gebruikt om gegevens te coderen.

Basisbedrijfsmodi van bloksymmetrisch

algoritme

De meeste bloksymmetrische cryptografische algoritmen zetten de 64-bits ingevoerde leesbare tekst rechtstreeks om in een 64-bits gecodeerde uitvoer, maar de gegevens zijn zelden beperkt tot 64 bits.

Om te profiteren van het bloksymmetrische algoritme om een ​​verscheidenheid aan cryptografische problemen op te lossen, zijn er vier werkingsmodi ontwikkeld:

  • elektronisch codeboek EU B (Elektronisch Codeboek);
  • het aan elkaar koppelen van CBC-coderingsblokken (Cipher Block Chaining);
  • CFB (Cipher Feed Back) cijfertekstfeedback;
  • OFB-feedback (Output Feed Back).

Deze bedieningsmodi zijn oorspronkelijk ontworpen voor het DES-blokalgoritme, maar andere cryptografische blokalgoritmen kunnen in elk van deze modi werken.

Goede dag, beste gebruiker. In dit artikel zullen we het hebben over onderwerpen als: Encryptie-algoritmen, Basisconcepten van symmetrische encryptie-algoritmen.

De meeste inzijn gebaseerd op het gebruik van cryptografische cijfers en procedures encryptie en decryptie.

Volgens standaard encryptie GOST 28147-89 definieert een cijfer als een reeks omkeerbare transformaties van een reeks open gegevens in een reeks gecodeerde gegevens, gespecificeerd door een sleutel en een cryptografisch transformatiealgoritme.

Een sleutel is een specifieke geheime status van sommige algoritmeparameters conversie van cryptografische gegevens, waardoor de keuze van slechts één optie uit alle mogelijke opties voor een bepaald algoritme wordt gegarandeerd. IN symmetrische crypto-algoritmen Hetzelfde informatieblok (sleutel) wordt gebruikt om een ​​bericht te coderen en te decoderen. Hoewel het algoritme voor het beïnvloeden van de verzonden gegevens bekend kan zijn bij onbevoegden, is het afhankelijk van de geheime sleutel, die alleen de zender en de ontvanger moeten hebben. Symmetrische cryptografische algoritmen transformeren een klein blok gegevens (1 bit of 32-128 bits), afhankelijk van de geheime sleutel, zodanig dat het oorspronkelijke bericht alleen kan worden gelezen als u deze geheime sleutel kent.

Symmetrisch versleutelingsalgoritme.

Symmetrische cryptosystemen maken het mogelijk, gebaseerd op symmetrische crypto-algoritmen coderen en decoderen van bestanden van willekeurige lengte. Afhankelijk van de grootte van het informatieblok symmetrische crypto-algoritmen zijn onderverdeeld in blokcijfers en stroomcijfers.

Voor blokcijfers is de coderingseenheid een blok van meerdere bytes. Het versleutelingsresultaat is afhankelijk van alle originele bytes in dat blok. Blokcodering wordt gebruikt voor pakketoverdracht van informatie en bestandscodering. Blokcijfers coderen hele informatieblokken (van 4 tot 32 bytes) als één geheel - dit verhoogt de weerstand van transformaties tegen brute-force-aanvallen aanzienlijk en maakt het gebruik van verschillende wiskundige en algoritmische transformaties mogelijk.

Voor stroomcijfers is de encryptie-eenheid één bit of één byte. Het resultaat hangt meestal af van de codering van de vorige invoerstroom. Dit versleutelingsschema wordt gebruikt in systemen voor het verzenden van informatiestromen, dat wil zeggen in gevallen waarin de overdracht van informatie op willekeurige tijdstippen begint en eindigt.

Functie symmetrische blokalgoritmen ligt in het feit dat ze in de loop van hun werk een blok invoerinformatie van een vaste lengte transformeren en een resulterend blok van dezelfde grootte verkrijgen, maar niet leesbaar voor derden die de sleutel niet bezitten. Het werkingsschema van een symmetrisch blokcijfer kan dus worden beschreven door de functies:

Functie

C = EK (M),
M = Weet niet(C),
waarbij M het originele (open) datablok is;
C – gecodeerd datablok.

Sleutel K is een parameter symmetrisch blokcryptoalgoritme en is een blok binaire informatie met een vaste grootte. De originele M- en gecodeerde C-datablokken hebben ook een gelijke vaste bitdiepte (maar niet noodzakelijkerwijs gelijk aan de lengte van de sleutel K).

De techniek van het creëren van ketens van bytes die zijn gecodeerd met blokalgoritmen, stelt hen in staat informatiepakketten van onbeperkte lengte te coderen. Het gebrek aan statistische correlatie tussen de bits van de uitvoerstroom van een blokcijfer wordt gebruikt om controlesommen van datapakketten te berekenen en bij het hashen van wachtwoorden. Tot op heden zijn er behoorlijk wat sterke blokcijfers ontwikkeld.

Crypto-algoritme Het wordt als ideaal veilig beschouwd als het voor het lezen van een gecodeerd gegevensblok noodzakelijk is om alle mogelijke sleutels te doorzoeken totdat het gedecodeerde bericht betekenis blijkt te hebben. Over het algemeen hangt de sterkte van een blokcijfer alleen af ​​van de sleutellengte en neemt exponentieel toe met de groei ervan.

Idealiter moeten sterke cryptografische algoritmen aan een andere belangrijke eis voldoen. Als de originele en gecodeerde waarden van het blok bekend zijn, kan de sleutel die wordt gebruikt om deze transformatie uit te voeren alleen worden achterhaald door de waarden ervan volledig op te sommen.

Situaties waarin een externe waarnemer een deel van de brontekst kent, komen nogal eens voor. Dit kunnen standaardinscripties op elektronische formulieren zijn, vaste headers van bestandsformaten, lange woorden of reeksen bytes die vaak in de tekst voorkomen. Daarom is de bovenstaande eis niet overdreven en wordt er ook strikt aan voldaan door sterke blokcijfers.

Om sterke blokcijfers te verkrijgen moeten volgens Claude Shannon twee algemene principes worden gebruikt: verstrooiing en menging.

Opmerking

Verspreiding vertegenwoordigt de spreiding van de invloed van één leesbare tekst over vele cijferteksttekens, wat het mogelijk maakt om de statistische eigenschappen van de leesbare tekst te verbergen...

Opmerking

Mengen omvat het gebruik van encryptietransformaties die het herstel van de relatie tussen de statistische eigenschappen van platte tekst en cijfertekst bemoeilijken. Het cijfer moet het echter niet alleen moeilijk maken om te kraken, maar ook zorgen voor een gemakkelijke codering en decodering als de geheime sleutel bekend is bij de gebruiker...

Een gebruikelijke manier om verstrooiings- en mengeffecten te bereiken is het gebruik van een samengesteld cijfer, dat wil zeggen een cijfer dat kan worden geïmplementeerd als een reeks eenvoudige cijfers, die elk een aanzienlijke hoeveelheid totale verstrooiing en menging bijdragen.

In samengestelde cijfers worden eenvoudige permutaties en substituties meestal gebruikt als eenvoudige cijfers. Permutatie schudt eenvoudigweg platte teksttekens door elkaar, waarbij het specifieke type shuffle wordt bepaald door de geheime sleutel. Bij vervanging wordt elk leesteken vervangen door een ander teken uit hetzelfde alfabet, en het specifieke type vervanging wordt ook bepaald door de geheime sleutel. In een modern blokcijfer zijn de leesbare tekst- en cijfertekstblokken binaire reeksen van doorgaans 64 bits lang. In principe kan elk blok waarden van 2 tot de 64e macht bevatten. Daarom worden vervangingen uitgevoerd in een zeer groot alfabet dat maximaal 2 tot de macht van 64 "tekens" bevat.

Door herhaaldelijk eenvoudige permutaties en substituties af te wisselen, gecontroleerd door een voldoende lange geheime sleutel, kan een zeer sterk cijfer met goede verstrooiing en menging worden verkregen.

Alle acties uitgevoerd crypto-algoritme blokkeren over data zijn gebaseerd op het feit dat het blok dat wordt geconverteerd, kan worden weergegeven als een niet-negatief geheel getal uit het bereik dat overeenkomt met de bitdiepte ervan. Een 32-bits gegevensblok kan bijvoorbeeld worden geïnterpreteerd als een getal in het bereik 0 - 4294967295. Bovendien kan een blok waarvan de bitdiepte een "macht van twee" is, worden geïnterpreteerd als een aaneenschakeling van verschillende onafhankelijke niet-negatieve getallen uit een kleiner bereik (het bovenstaande 32-bits blok kan ook worden weergegeven als een aaneenschakeling van twee onafhankelijke 16-bits getallen uit het bereik 0 – 65535 of als een aaneenschakeling van vier onafhankelijke 8-bits getallen uit het bereik 0 – 255) .

Met deze getallen voert het blokcryptoalgoritme de volgende acties uit volgens een bepaald schema:

1. Wiskundige functies:
– optelling X’ = X + V;
– “exclusieve OR” X’ = X xof V;
– vermenigvuldiging modulo 2N + 1 X’ = (X*V) mod (2N + 1);
– vermenigvuldiging modulo 2N X’ = (X*V) mod 2N.
2. Bitverschuivingen:
– rekenkundige verschuiving naar links X’ = X shl V;
– rekenkundige verschuiving naar rechts X’ = X shr V;
– cyclische verschuiving naar links X’ = X rol V;
– cyclische verschuiving naar rechts X’ = X ror V.
3. Tafelvervangingen:
– S-box (Engelse vervanging) X’ = Tabel.

De V-parameter voor elk van deze transformaties kan zijn:

  • vast getal (bijvoorbeeld X' = X + 125).
  • het getal verkregen uit de sleutel (bijvoorbeeld X' = X + F(K)).
  • een getal verkregen uit het onafhankelijke deel van het blok (bijvoorbeeld X2’ = X2 + F(X1)).

Opmerking

De laatste optie wordt gebruikt in een schema genaamd het Feistel-netwerk (genoemd naar de maker ervan) ...

Feistel-netwerk.

De reeks bewerkingen die op het blok worden uitgevoerd, combinaties van de bovenstaande opties V en de functies F zelf vormen de onderscheidende kenmerken van een bepaald symmetrisch blokcryptoalgoritme.

Kenmerkend voor blokalgoritmen is het herhaalde en indirecte gebruik van sleutelmateriaal. Dit wordt primair bepaald door de eis dat omgekeerde decodering met betrekking tot de sleutel onmogelijk is wanneer het origineel en de cijferteksten bekend zijn. Om dit probleem op te lossen, gebruiken de bovenstaande transformaties meestal niet de sleutelwaarde zelf of een deel ervan, maar een, soms onomkeerbare, functie van het sleutelmateriaal. Bovendien wordt bij dergelijke transformaties hetzelfde blok- of sleutelelement herhaaldelijk gebruikt. Dit maakt het mogelijk, als aan de voorwaarde van inverteerbaarheid van de functie met betrekking tot de waarde X is voldaan, de functie onomkeerbaar te maken met betrekking tot de sleutel K.

Een Feistel-netwerk is een schema (methode) van omkeerbare teksttransformaties waarbij de waarde berekend op basis van één deel van de tekst over andere delen wordt heen gelegd. Het Feistel-netwerk is een wijziging van de methode om het huidige deel van het gecodeerde blok te combineren met het resultaat van een functie berekend op basis van een ander onafhankelijk deel van hetzelfde blok. Deze techniek voldoet aan de belangrijke eis van hergebruik van de sleutel en het materiaal van het oorspronkelijke informatieblok. Vaak is de netwerkstructuur zo ontworpen dat voor het versleutelen en ontsleutelen hetzelfde algoritme wordt gebruikt; het verschil zit alleen in de volgorde waarin het sleutelmateriaal wordt gebruikt.

De Amerikaanse data-encryptiestandaard DES en onze GOST 28147-89 zijn gebaseerd op het Feistel-netwerk.


Encryptie is de meest gebruikte cryptografische methode om de vertrouwelijkheid van informatie te behouden; het beschermt gegevens tegen ongeoorloofde toegang. Laten we eerst eens kijken naar de basismethoden voor cryptografische informatiebescherming. In één woord, cryptografie- de wetenschap van informatiebeveiliging met behulp van wiskundige methoden. Er is ook een wetenschap die tegengesteld is aan cryptografie en die zich toelegt op methoden om beschermde informatie te openen: cryptoanalyse. De combinatie van cryptografie en cryptanalyse wordt gewoonlijk genoemd cryptologie. Cryptografische methoden kunnen op verschillende manieren worden geclassificeerd, maar meestal worden ze onderverdeeld afhankelijk van het aantal sleutels dat wordt gebruikt in de overeenkomstige cryptografische algoritmen (zie figuur 1):

  1. Keyless, waarbij geen sleutels worden gebruikt.
  2. Eén sleutel - ze gebruiken een extra sleutelparameter - meestal een geheime sleutel.
  3. Tweesleutels, waarbij twee sleutels worden gebruikt bij hun berekeningen: geheim en openbaar.

Rijst. 1. Crypto-algoritmen

Overzicht van cryptografische methoden

Encryptie is de belangrijkste beschermingsmethode; Laten we het hieronder in detail bekijken.

Het is de moeite waard om een ​​paar woorden te zeggen over andere cryptografische methoden:

  1. Een elektronische handtekening wordt gebruikt om de integriteit en het auteurschap van gegevens te bevestigen. Gegevensintegriteit betekent dat de gegevens niet per ongeluk of opzettelijk zijn gewijzigd tijdens opslag of verzending.
    Algoritmen voor elektronische handtekeningen gebruiken twee soorten sleutels:
    • de geheime sleutel wordt gebruikt om de elektronische handtekening te berekenen;
    • de publieke sleutel wordt gebruikt om het te verifiëren.
    Bij gebruik van een cryptografisch sterk algoritme voor elektronische handtekeningen en met de juiste opslag en gebruik van de geheime sleutel (dat wil zeggen, wanneer het voor iemand anders dan de eigenaar onmogelijk is om de sleutel te gebruiken), kan niemand anders de juiste elektronische handtekening van de sleutel berekenen. elk elektronisch document.
  2. Met authenticatie kunt u verifiëren dat een gebruiker (of externe computer) is wie hij zegt dat hij is. Het eenvoudigste authenticatieschema is een wachtwoord: een wachtwoord wordt gebruikt als een geheim element, dat door de gebruiker wordt gepresenteerd bij het controleren ervan. Het is gebleken dat een dergelijk systeem zwak is als er geen speciale administratieve en technische maatregelen worden toegepast om het te versterken. En op basis van encryptie of hashing (zie hieronder) kunt u zeer sterke gebruikersauthenticatieschema's bouwen.
  3. Er zijn verschillende cryptografische checksumming-methoden:
    • sleutel- en sleutelloze hashing;
    • berekening van imitatievoorvoegsels;
    • gebruik van berichtauthenticatiecodes.
    In feite berekenen al deze methoden op verschillende manieren uit gegevens van willekeurige grootte, met of zonder een geheime sleutel, een controlesom van een vaste grootte die op unieke wijze overeenkomt met de originele gegevens.
    Dergelijke cryptografische controlesommen worden veel gebruikt in verschillende informatiebeveiligingsmethoden, bijvoorbeeld:
    • om de integriteit van gegevens te bevestigen in gevallen waarin het gebruik van een elektronische handtekening onmogelijk is (bijvoorbeeld vanwege een hoog verbruik van hulpbronnen) of overbodig is;
    • bij de elektronische handtekeningsystemen zelf is het doorgaans de hash van de gegevens die wordt “ondertekend”, en niet de volledige gegevens;
    • in verschillende gebruikersauthenticatieschema's.
  4. Met generatoren voor willekeurige en pseudo-willekeurige getallen kunt u reeksen willekeurige getallen maken die veel worden gebruikt in de cryptografie, met name:
    • Er zijn willekeurige getallen nodig om geheime sleutels te genereren, die idealiter volledig willekeurig zouden moeten zijn;
    • willekeurige getallen worden gebruikt in veel algoritmen voor elektronische handtekeningen;
    • In veel authenticatieschema's worden willekeurige getallen gebruikt.
    Het is niet altijd mogelijk om absoluut willekeurige getallen te verkrijgen - hiervoor zijn hoogwaardige hardwaregeneratoren nodig. Op basis van symmetrische encryptie-algoritmen is het echter mogelijk om hoogwaardige generatoren voor pseudo-willekeurige getallen te bouwen.
Encryptie

Encryptie informatie is de transformatie van open informatie in gecodeerde informatie (wat meestal wordt genoemd). cijfertekst of cryptogram), en omgekeerd. Het eerste deel van dit proces wordt genoemd encryptie, seconde - decodering.

U kunt encryptie beschouwen als de volgende formule:

C = E k1 (M),

Waar:
M(bericht) - open informatie,
MET(cijfertekst) - de cijfertekst verkregen als resultaat van codering,
E(encryptie) - een encryptiefunctie die cryptografische transformaties uitvoert M,
k1(sleutel) - functieparameter E, genaamd sleutel encryptie.

In de GOST 28147-89-standaard (de standaard definieert het binnenlandse symmetrische coderingsalgoritme) is het concept sleutel wordt als volgt gedefinieerd: “Een specifieke geheime toestand van sommige parameters van een cryptografisch transformatie-algoritme, die de selectie van één transformatie uit een reeks van alle mogelijke transformaties voor een bepaald algoritme garandeert.”

De sleutel kan toebehoren aan een specifieke gebruiker of groep gebruikers en uniek zijn voor hen. Informatie die is gecodeerd met een specifieke sleutel, kan alleen worden gedecodeerd met alleen dezelfde sleutel of een sleutel die daaraan gerelateerd is door een bepaalde relatie.

De decodering kan op een vergelijkbare manier worden weergegeven:

M" = Dk2 (C),

Waar:
M"- bericht ontvangen als resultaat van decodering,
D(decodering) - decoderingsfunctie; net als de encryptiefunctie voert het cryptografische transformaties uit op de cijfertekst,
k2- decoderingssleutel.

Om de juiste leesbare tekst te verkrijgen als resultaat van decodering (dat wil zeggen dezelfde tekst die eerder werd gecodeerd: M" = M), moet tegelijkertijd aan de volgende voorwaarden worden voldaan:

  1. De decryptiefunctie moet overeenkomen met de encryptiefunctie.
  2. De decoderingssleutel moet overeenkomen met de coderingssleutel.

Als de juiste sleutel ontbreekt k2 origineel bericht ontvangen M" = M gebruik van de juiste functie D onmogelijk. Het woord ‘onmogelijk’ betekent in dit geval meestal de onmogelijkheid om in realtime te computeren met bestaande computerbronnen.

Versleutelingsalgoritmen kunnen in twee categorieën worden verdeeld (zie figuur 1):

  1. Symmetrische coderingsalgoritmen.
  2. Asymmetrische versleutelingsalgoritmen.

Bij algoritmen symmetrische encryptie voor decodering wordt gewoonlijk dezelfde sleutel gebruikt als voor codering, of een sleutel die daarmee verband houdt door een eenvoudige relatie. Dit laatste komt veel minder vaak voor, vooral in moderne versleutelingsalgoritmen. Zo'n sleutel (gebruikelijk voor codering en decodering) wordt meestal eenvoudigweg genoemd encryptie sleutel.

IN asymmetrische encryptie encryptie sleutel k1 gemakkelijk berekend op basis van de sleutel k2 zodanig dat omgekeerde berekening onmogelijk is. De belangrijkste relatie zou bijvoorbeeld kunnen zijn:

k1 = een k2 mod p,

waarbij a en p de parameters zijn van het versleutelingsalgoritme, die een voldoende grote dimensie hebben.

Deze sleutelrelatie wordt ook gebruikt in algoritmen voor elektronische handtekeningen.

Het belangrijkste kenmerk van het versleutelingsalgoritme is cryptografische kracht, die de weerstand tegen openbaarmaking door cryptanalysemethoden bepaalt. Meestal wordt dit kenmerk bepaald door het tijdsinterval dat nodig is om het cijfer te kraken.

Symmetrische codering is minder handig omdat het bij het verzenden van gecodeerde informatie naar iemand noodzakelijk is dat de ontvanger vooraf een sleutel ontvangt om de informatie te decoderen. Asymmetrische encryptie kent dit probleem niet (aangezien de publieke sleutel vrij over het netwerk kan worden verzonden), maar kent wel zijn eigen problemen, met name het probleem van spoofing van de publieke sleutel en de trage encryptiesnelheid. Meestal wordt asymmetrische encryptie gebruikt in combinatie met symmetrische encryptie - om de symmetrische encryptiesleutel te verzenden, die het grootste deel van de gegevens codeert. Sleutelopslag- en overdrachtsschema's zijn echter een onderwerp voor een apart artikel. Hier sta ik mezelf toe te stellen dat symmetrische encryptie veel vaker wordt gebruikt dan asymmetrische encryptie, dus zal de rest van het artikel alleen aan symmetrische encryptie worden gewijd.

Er zijn twee soorten symmetrische codering:

  • Versleuteling blokkeren- informatie wordt opgedeeld in blokken met een vaste lengte (bijvoorbeeld 64 of 128 bits), waarna deze blokken één voor één worden gecodeerd. Bovendien kunnen blokken in verschillende versleutelingsalgoritmen of zelfs in verschillende werkingsmodi van hetzelfde algoritme onafhankelijk van elkaar of “met ketening” worden versleuteld - wanneer het resultaat van het versleutelen van het huidige gegevensblok afhangt van de waarde van het vorige blok of op het resultaat van het coderen van het vorige blok.
  • Stream-encryptie- in de eerste plaats noodzakelijk in gevallen waarin informatie niet in blokken kan worden verdeeld - bijvoorbeeld een bepaalde gegevensstroom, waarvan elk teken moet worden gecodeerd en ergens naartoe moet worden gestuurd, zonder te wachten tot de resterende gegevens voldoende zijn om het blok te vormen. Daarom coderen stroomversleutelingsalgoritmen gegevens bit voor bit of teken voor teken. Hoewel het de moeite waard is om te zeggen dat sommige classificaties geen onderscheid maken tussen blok- en stream-encryptie, aangezien stream-encryptie de encryptie is van blokken met een eenheidslengte.

Laten we eens kijken hoe bloksymmetrische versleutelingsalgoritmen er van binnenuit uitzien

De overgrote meerderheid van de moderne versleutelingsalgoritmen werken op een zeer vergelijkbare manier: er wordt een bepaalde transformatie op de cijfertekst uitgevoerd met behulp van de versleutelingssleutel, die een bepaald aantal keren (rondes) wordt herhaald. Tegelijkertijd worden versleutelingsalgoritmen, afhankelijk van het type herhaalde transformatie, gewoonlijk in verschillende categorieën verdeeld. Er zijn hier ook verschillende classificaties, ik zal er een geven. Afhankelijk van hun structuur worden coderingsalgoritmen als volgt geclassificeerd:

  1. Algoritmen gebaseerd op het Feistel-netwerk.

    Het Feistel-netwerk omvat het verdelen van het verwerkte datablok in verschillende subblokken (meestal in twee), waarvan er één wordt verwerkt door een bepaalde functie F() en overlapt een of meer andere subblokken. In afb. Figuur 2 toont de meest voorkomende structuur van algoritmen gebaseerd op het Feistel-netwerk.

    Rijst. 2. Structuur van algoritmen gebaseerd op het Feistel-netwerk.

    Extra functieargument F(), aangegeven in afb. 2 hoe Ki, genaamd ronde sleutel. De ronde sleutel is het resultaat van het verwerken van de coderingssleutel door de sleuteluitbreidingsprocedure, waarvan de taak is om het vereiste aantal sleutels te verkrijgen Ki uit een initiële encryptiesleutel van relatief kleine omvang (momenteel wordt een grootte van 128 bits voldoende geacht voor een symmetrische encryptiesleutel). In de eenvoudigste gevallen splitst de sleuteluitbreidingsprocedure de sleutel eenvoudigweg in verschillende fragmenten, die afwisselend worden gebruikt in coderingsrondes; Veel vaker is de sleuteluitbreidingsprocedure behoorlijk complex, en de sleutels Ki zijn afhankelijk van de waarden van de meeste bits van de originele coderingssleutel.

    De superpositie van een verwerkt subblok op een onverwerkt subblok wordt meestal gedaan met behulp van de logische XOR-bewerking (zoals weergegeven in figuur 2). Heel vaak wordt hier in plaats van XOR modulo-optelling gebruikt 2n, Waar N- subblokgrootte in bits. Na overlay worden de subblokken verwisseld, dat wil zeggen dat in de volgende ronde van het algoritme een ander subblok met gegevens wordt verwerkt.

    Deze structuur van versleutelingsalgoritmen heeft zijn naam te danken aan Horst Feistel, een van de ontwikkelaars van het Lucifer-versleutelingsalgoritme en het DES-algoritme (Data Encryption Standard) dat is ontwikkeld op basis daarvan, een voormalige (maar nog steeds veelgebruikte) Amerikaanse versleutelingsstandaard. Beide algoritmen hebben een structuur die vergelijkbaar is met die getoond in Fig. 2. Naast andere algoritmen gebaseerd op het Feistel-netwerk kunnen we het voorbeeld noemen van de binnenlandse coderingsstandaard GOST 28147-89, evenals andere zeer bekende algoritmen: RC5, Blowfish, TEA, CAST-128, enz.

    De meeste moderne coderingsalgoritmen zijn gebaseerd op het Feistel-netwerk - vanwege de vele voordelen van een dergelijke structuur, waaronder de volgende vermeldenswaard:

    • Algoritmen gebaseerd op het Feistel-netwerk kunnen zo worden ontworpen dat dezelfde algoritmecode kan worden gebruikt voor codering en decodering - het verschil tussen deze bewerkingen kan alleen liggen in de volgorde van toepassing van de sleutels Ki; Deze eigenschap van het algoritme is het nuttigst wanneer deze wordt geïmplementeerd in hardware of op platforms met beperkte bronnen; Een voorbeeld van een dergelijk algoritme is GOST 28147-89.
  2. Algoritmen gebaseerd op het Feistel-netwerk zijn het meest bestudeerd - er is een enorme hoeveelheid cryptanalytisch onderzoek aan dergelijke algoritmen gewijd, wat een onbetwist voordeel is, zowel bij de ontwikkeling van het algoritme als bij de analyse ervan.

    Er is ook een complexere structuur van het Feistel-netwerk, waarvan een voorbeeld wordt getoond in Fig. 3.

    Rijst. 3. Structuur van het Feistel-netwerk.

    Deze structuur heet gegeneraliseerd of uitgebreid Feistel-netwerk en wordt veel minder vaak gebruikt dan het traditionele Feistel-netwerk. Een voorbeeld van zo’n Feistel-netwerk is het RC6-algoritme.

  3. Op algoritmen gebaseerd permutatie netwerken (SP-netwerk- Substitutie-permutatienetwerk).

    In tegenstelling tot het Feistel-netwerk verwerken SP-netwerken het volledige gecodeerde blok in één ronde. Gegevensverwerking komt voornamelijk neer op vervangingen (wanneer bijvoorbeeld een fragment van een invoerwaarde wordt vervangen door een ander fragment in overeenstemming met een vervangingstabel, die afhankelijk kan zijn van de sleutelwaarde Ki) en permutaties afhankelijk van de sleutel Ki(een vereenvoudigd diagram wordt getoond in figuur 4).

    Rijst. 4. Substitutie-permutatienetwerk.

    Dergelijke bewerkingen zijn echter ook typerend voor andere soorten versleutelingsalgoritmen, daarom is de naam “substitutie-permutatienetwerk” naar mijn mening tamelijk willekeurig.

    SP-netwerken komen veel minder vaak voor dan Feistel-netwerken; Voorbeelden van SP-netwerken zijn de Serpent- of SAFER+-algoritmen.

  4. Algoritmen met structuur "vierkant"(Vierkant).

    De “vierkante” structuur wordt gekenmerkt door de weergave van het gecodeerde datablok in de vorm van een tweedimensionale byte-array. Cryptografische transformaties kunnen worden uitgevoerd op individuele bytes van een array, maar ook op de rijen of kolommen ervan.

    De algoritmestructuur ontleent zijn naam aan het Square-algoritme, dat in 1996 werd ontwikkeld door Vincent Rijmen en Joan Daemen, de toekomstige auteurs van het Rijndael-algoritme, dat na het winnen van een open competitie de nieuwe Amerikaanse AES-coderingsstandaard werd. Het Rijndael-algoritme heeft ook een vierkante structuur; voorbeelden zijn ook het Shark-algoritme (een eerdere ontwikkeling van Ridgeman en Damen) en Crypton. Het nadeel van algoritmen met een “vierkante” structuur is hun gebrek aan kennis, wat niet verhinderde dat het Rijndael-algoritme de nieuwe Amerikaanse standaard werd.

    Rijst. 5. Rijndael-algoritme.

    In afb. Figuur 5 toont een voorbeeld van een bewerking op een datablok uitgevoerd door het Rijndael-algoritme.

  5. Algoritmen met een niet-standaardstructuur, dat wil zeggen algoritmen die niet in een van de genoemde typen kunnen worden ingedeeld. Het is duidelijk dat vindingrijkheid grenzeloos kan zijn, dus het is moeilijk om alle mogelijke opties voor versleutelingsalgoritmen te classificeren. Een voorbeeld van een algoritme met een niet-standaard structuur is het FROG-algoritme, dat uniek is qua structuur, waarbij in elke ronde twee bytes aan gecodeerde gegevens worden gewijzigd volgens tamelijk complexe regels (zie figuur 6).

    Rijst. 6. Wijziging van twee bytes gecodeerde gegevens.

    Er zijn geen strikte grenzen tussen de hierboven beschreven structuren gedefinieerd, dus er zijn vaak algoritmen die door verschillende experts worden geclassificeerd als verschillende soorten structuren. Het CAST-256-algoritme wordt door de auteur bijvoorbeeld een SP-netwerk genoemd, en veel experts noemen het een uitgebreid Feistel-netwerk. Een ander voorbeeld is het HPC-algoritme, door de auteur het Feistel-netwerk genoemd, maar door experts beschouwd als een algoritme met een niet-standaard structuur.

Encryptie-algoritmen worden gebruikt om gevoelige informatie zo te veranderen dat deze niet door onbevoegden kan worden gelezen.

De eerste cijfers werden gebruikt in de tijd van het oude Rome, het oude Egypte en het oude Griekenland. Een van de beroemde cijfers is Caesar-cijfer. Dit algoritme werkte als volgt: elke letter heeft zijn eigen serienummer in het alfabet, waardoor de $3$-waarden naar links zijn verschoven. Tegenwoordig biedt een dergelijk algoritme niet de bescherming die het bood op het moment dat het werd gebruikt.

Tegenwoordig is er een groot aantal versleutelingsalgoritmen ontwikkeld, waaronder standaardalgoritmen, die betrouwbare bescherming van vertrouwelijke informatie bieden.

Encryptie-algoritmen zijn onderverdeeld in: symmetrisch(deze omvatten AES, CAST, GOST, DES, Blowfish) en asymmetrisch(RSA, El-Gamal).

Symmetrische algoritmen

Opmerking 1

Symmetrische versleutelingsalgoritmen gebruiken dezelfde sleutel om informatie te versleutelen en te ontsleutelen.

Wanneer u gecodeerde informatie verzendt, moet u ook de decoderingssleutel verzenden. Het zwakke punt van deze methode is het datatransmissiekanaal. Als deze niet beveiligd is of kan worden afgetapt, kan de decoderingssleutel beschikbaar komen voor een aanvaller.

Asymmetrische algoritmen

Opmerking 2

Asymmetrische algoritmen gebruiken twee sleutels: één voor codering en één voor decodering.

Elke gebruiker moet over een paar sleutels beschikken: een openbare sleutel en een privésleutel.

Encryptie sleutel

Definitie 1

Encryptiesleutel is een willekeurige of speciaal gemaakte reeks bits, die een variabele parameter is van het coderingsalgoritme.

Wanneer dezelfde gegevens met hetzelfde algoritme worden gecodeerd, maar met verschillende sleutels, zijn de resultaten verschillend.

Encryptieprogramma's (WinRAR, Rohos, enz.) creëren een sleutel op basis van een door de gebruiker opgegeven wachtwoord.

De encryptiesleutel kan verschillende lengtes hebben, gemeten in bits. Naarmate de sleutellengte toeneemt, neemt de theoretische sterkte van het cijfer toe. In de praktijk is dit niet altijd het geval.

Sterkte van het versleutelingsalgoritme

Opmerking 3

Het versleutelingsalgoritme wordt als sterk beschouwd totdat het tegendeel is bewezen.

Encryptie-algoritmen

AES-algoritme (Rijndael) is momenteel de Amerikaanse federale coderingsstandaard. Het werd in 2001 als standaard goedgekeurd door het Ministerie van Handel. De standaard wordt beschouwd als een gecodeerde versie met een blokgrootte van $128$ bits. Ontwikkeld in $1997 in België. Mogelijke sleutelgroottes zijn $128, $192 en $256 bitsleutels.

Algoritme GOST 28147-8 is een Russische Federatie-standaard voor gegevensversleuteling en gegevensbescherming. Werd een officiële standaard in $1989. Ontwikkeld in de $1970. in het hoofddirectoraat van de KGB van de USSR. Gebruikt een sleutelgrootte van $256$ bits.

Blowfish-algoritme maakt gebruik van een complex sleutelgeneratieschema, waardoor het veel moeilijker wordt om het algoritme met brute kracht aan te vallen. Niet geschikt voor gebruik in systemen waarbij de sleutel vaak wordt gewijzigd en bij het coderen van kleine datavolumes. Het algoritme kan het beste worden gebruikt voor systemen waarin grote hoeveelheden gegevens moeten worden gecodeerd. Ontwikkeld in $1993. Gebruikte sleutelgroottes van $32$ tot $448$ bits.

DES-algoritme was de Amerikaanse federale coderingsstandaard van 1977 tot 2001. De federale standaard werd in $1977 aangenomen, maar na de introductie van een nieuwe standaard in $2001 verloor deze zijn status als standaard. Ontwikkeld in $ 1972–1975. onderzoekslaboratorium van IBM Corporation. Gebruikt een $56$ bitsleutel.

CAST-algoritme is in zekere zin een analoog van het DES-algoritme. Gebruikt bitsleutels van $128$ en $256$.