Een inleiding tot de basisprincipes van moderne symmetrische sleutelcijfers. Moderne encryptie-algoritmen

Annotatie: Deze lezing heeft meerdere doelen. Laat het verschil zien tussen traditioneel en moderne cijfers met een symmetrische sleutel. Presenteer moderne blokcijfers en bespreek hun kenmerken. Leg uit waarom moderne blokcijfers ontworpen moeten worden als vervangingscijfers. Introduceer de componenten van blokcijfers zoals P-boxen en S-boxen. Bespreek en toon het verschil tussen twee klassen cijfers: Feistel-cijfers en niet-Feistel-cijfers. Bespreek twee soorten aanvallen die specifiek gericht zijn op het breken van moderne blokcijfers: differentiële en lineaire cryptanalyse. Introduceer het concept van "stream ciphers" en laat het verschil zien tussen synchrone en niet-synchrone ciphers. Bespreek lineaire en niet-lineaire schuifregisterfeedback voor het implementeren van stroomcijfers.

Traditionele cijfers met symmetrische sleutel, die we tot nu toe hebben bestudeerd, zijn karaktergericht. Met de komst van de computer werden bit-georiënteerde cijfers noodzakelijk. Omdat de informatie die moet worden gecodeerd niet altijd alleen maar tekst is; het kan ook bestaan ​​uit cijfers, afbeeldingen, audio- en videogegevens. Het is handig om dit soort gegevens om te zetten in een stroom bits, die stroom te versleutelen en vervolgens de versleutelde stroom te verzenden. Wanneer tekst op bitniveau wordt verwerkt, wordt bovendien elk teken vervangen door 8 (of 16) bits, wat betekent dat het aantal tekens 8 (of 16) keer groter wordt. Het mixen van meer karakters verhoogt de veiligheid.

Dit hoofdstuk biedt de noodzakelijke basis voor de studie van moderne blok- en stroomcijfers, die in de volgende drie hoofdstukken worden behandeld. Meest Dit hoofdstuk is gewijd aan een bespreking van de algemene ideeën van moderne blokcijfers, en slechts een klein deel: de principes van moderne stroomcijfers.

7.1. Moderne blokcijfers

Een modern blokcijfer met symmetrische sleutels codeert een n-bit blok leesbare tekst of decodeert een n-bit blok cijfertekst. Het coderings- of decoderingsalgoritme gebruikt een k-bit-sleutel. Het decoderingsalgoritme moet het omgekeerde zijn van het coderingsalgoritme, en beide werken met dezelfde geheime sleutel, zodat Bob het door Alice verzonden bericht kan reconstrueren. Figuur 7.1 toont het algemene idee van encryptie en decryptie in een modern blokcijfer.


Rijst. 7.1.

Als het bericht kleiner is dan n bits, moet er opvulling worden toegevoegd om dat n-bits blok te maken; als een bericht meer dan n bits heeft, moet het worden verdeeld in blokken van n bits, en moet indien nodig de juiste opvulling aan het laatste blok worden toegevoegd. Algemene waarden voor n is gewoonlijk 64, 128, 256 of 512 bits.

Voorbeeld 7.1

Hoeveel extra bits moeten worden toegevoegd aan een bericht van 100 tekens als de codering 8-bits ASCII is en de blokcodering 64-bits blokken accepteert?

Oplossing

Codeer 100 tekens met 8-bit ASCII. Dit bericht bevat 800 bits. De brontekst moet deelbaar zijn door 64. Als | M | en | Pad |

- berichtlengte en opvullengte, dan | M | + |

Pad | == 0 mod 64 -> | Pad | = -800 mod.64->32 mod.64

Dit betekent dat er 32 bits aan opvulling (zoals nullen) aan het bericht moeten worden toegevoegd. De tekst bestaat dan uit 832 bits, oftewel dertien blokken van 64 bit. Merk op dat alleen het laatste blok opvulling bevat. De encryptor gebruikt het encryptie-algoritme dertien keer om dertien blokken gecodeerde tekst te creëren.

Vervanging of omzetting

Een modern blokcijfer kan worden ontworpen om te fungeren als vervangingscijfer of als transpositiecijfer. Dit is hetzelfde idee dat wordt gebruikt in traditionele cijfers, behalve dat de tekens die worden vervangen of verplaatst bits bevatten in plaats van tekens. Als het cijfer is ontworpen als vervangingscijfer kunnen bitwaarden van 1 of 0 in de brontekst worden vervangen door 0 of 1 . Dit betekent dat de originele tekst en de cijfertekst kunnen bestaan ander nummer eenheden. Een 64-bits blok platte tekst dat 12 nullen en 52 enen bevat, kan in de cijfertekst worden weergegeven door 34 nullen en 30 enen. Als het cijfer is ontworpen als permutatiecijfer (transpositie)

B. In het tweede geval (transpositie) weet Eva dat er precies 10 enen in de originele tekst staan, omdat de transpositie het aantal enen (of nullen) in de cijfertekst niet verandert. Eve kan een uitgebreide zoekaanval lanceren met alleen die 64-bits blokken die precies 10 enen hebben. Er zijn er maar (64!) / [(10!) (54!)] = 151 473 214 816 van 2 64 woorden van 64 bits, die precies 10 eenheden hebben. Eve kan ze allemaal in minder dan 3 minuten testen als ze 1 miljard tests per seconde kan doen.

Een modern blokcijfer moet bestand zijn tegen een uitgebreide zoekaanval en moet worden ontworpen als een vervangingscijfer.

Sergej Panasenko,
hoofd van de ontwikkelingsafdeling software bedrijf "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),

waar M (bericht) - open informatie(in 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 (algoritme symmetrische encryptie) wordt als volgt gedefinieerd: “een specifieke geheime toestand van sommige parameters van het cryptografische transformatie-algoritme, die de selectie van één transformatie uit een reeks mogelijke transformaties garandeert van dit algoritme transformaties". Met andere woorden, de sleutel vertegenwoordigt uniek element, waarmee u de resultaten van het versleutelingsalgoritme kunt wijzigen: bij gebruik dezelfde brontekst verschillende sleutels wordt anders gecodeerd.

Om ervoor te zorgen dat het decoderingsresultaat samenvalt met origineel bericht(d.w.z. voor M" = M) moet tegelijkertijd aan twee voorwaarden worden voldaan. Ten eerste moet de decoderingsfunctie D overeenkomen met de encryptiefunctie E. Ten tweede moet de decoderingssleutel k2 overeenkomen met de encryptiesleutel k1.

Als er een sterk versleutelingsalgoritme werd gebruikt voor de versleuteling, dan was dit bij afwezigheid juiste sleutel k2 het is onmogelijk om M" = M te verkrijgen. Cryptografische sterkte is het belangrijkste kenmerk van encryptie-algoritmen en geeft vooral de moeilijkheidsgraad aan bij het verkrijgen van de originele tekst uit een gecodeerde tekst zonder sleutel k2.

Versleutelingsalgoritmen kunnen worden onderverdeeld in twee categorieën: symmetrisch en asymmetrische encryptie. 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 het een “Amerikaanse standaard”, aangezien de regering van dit land het gebruik ervan voor implementatie aanbeveelde. diverse systemen gegevensversleuteling. 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 behandelen (bijna alle boeken op de lijst). aanvullende materialen eet het gedetailleerde beschrijving), en laten we ons wenden tot modernere versleutelingsalgoritmen. Het is alleen vermeldenswaard 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 is. aanzienlijke stukjes. Het is bekend dat elk sterk versleutelingsalgoritme kan worden gekraakt door alle mogelijke versleutelingssleutels uit te proberen (de zogenaamde method brute kracht- aanval met brute kracht). Het is eenvoudig 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 rekenkracht zijn vrij reëel, het is duidelijk dat de 56-bits sleutel te kort is en DES-algoritme moet worden vervangen door een sterker exemplaar.

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 modulo 2 uitgevoerd, d.w.z. logische werking XOR - "exclusief of"), en vervolgens worden de subblokken verwisseld. Deze transformatie wordt een bepaald aantal keren uitgevoerd (“rondes”): 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. Volledige sleutel encryptie 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 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. 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:

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

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

Decoderen 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 corresponderende cijfertekstblokken ook identiek zijn, wat extra nuttige informatie voor een cryptanalist die een 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 blok leesbare tekst bitsgewijs modulo 2 toegevoegd met een 64-bits coderingsgammablok. 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 is gecodeerd (in in dit geval- berichten synchroniseren) in 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 de gamma te ontsleutelen, moet de gebruiker die het cryptogram ontsleutelt dezelfde sleutel en dezelfde synchronisatieberichtwaarde hebben die werd 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. Imitatievoorvoegsel is cryptografisch controlesom, berekend met behulp van de coderingssleutel 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 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 N1- en N2-registers of een deel daarvan als resultaat 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 gelijk aan 2-r Er wordt een 32-bits imitatievoorvoegsel 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, andere cryptografische methoden- voornamelijk een elektronische digitale handtekening.

Bij het uitwisselen van informatie dient het imitatievoorvoegsel als een soort aanvullende middelen controle. 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 om de juistheid van de decodering te controleren belangrijke informatie bij gebruik van meersleutelschema's.

Het GOST 28147-89-algoritme wordt als een zeer sterk algoritme beschouwd - momenteel is er niet meer voorgesteld voor openbaarmaking ervan effectieve methoden 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 neemt de codering van de vervangende tabel toe extra stukjes. 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 voor een lange tijd bleef geheim Amerikaanse standaard AES-codering, bedoeld om DES te vervangen, werd 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). Aan de wedstrijd werden 15 kandidaat-algoritmen voorgelegd, 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 eigenaardigheid 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 op onverwerkte subblokken wordt gesuperponeerd (zie figuur 1).

In tegenstelling tot binnenlandse standaard encryptie vertegenwoordigt het Rijndael-algoritme een datablok als een tweedimensionale byte-array met de grootte 4X4, 4X6 of 4X8 (meerdere zijn toegestaan vaste maten gecodeerd informatieblok). 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 de 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. In de eerste plaats biedt het hoge snelheid encryptie op alle platforms: zowel bij de software- als hardware-implementatie. Het onderscheidt zich onvergelijkbaar beste kansen parallellisatie van berekeningen in vergelijking 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. Openbare sleutel berekend op basis van het geheim: k1 = f(k2).

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

Een voorbeeld van een eenrichtingsfunctie is de vermenigvuldiging van twee grote getallen: N = P*Q. Deze vermenigvuldiging zelf is eenvoudige bediening. De inverse functie (ontleding van N in twee grote factoren), factorisatie genoemd, is volgens moderne tijdschattingen echter behoorlijk complex. wiskunde probleem. Factorisatie N met een afmeting 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 functies die worden gebruikt bij asymmetrische codering zijn eenrichtingsfuncties met een achterdeur. Hun definitie stelt dat een functie unidirectioneel is met een achterdeur als deze unidirectioneel is en efficiënt kan worden berekend. omgekeerde functie x = f-1(y), d.w.z. als de “geheime doorgang” bekend is (een bepaald geheim nummer, in toepassing op asymmetrische versleutelingsalgoritmen - 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. Hoofdparameter RSA-algoritme- module van het systeem N, volgens welke alle berekeningen in het systeem worden uitgevoerd, en N = P*Q (P en Q zijn geheim willekeurig eenvoudig grote cijfers, meestal dezelfde maat).

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 (het 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 versleutelingsalgoritmen 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 nadelen 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 VF "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.

De laatste keer maakte je kennis met de grote en verschrikkelijke binnenlandse cijfers. Dit was een heel moeilijke les, omdat deze cryptosystemen staatsgeheimen bewaken. Kunt u mij vertellen waar het geavanceerder wordt? Maar hier, alsjeblieft! In feite hoef je niet bang te zijn, deze keer zullen we niet zo diep in de wiskunde duiken en encryptiemodi overwegen - je hebt hun principes al geleerd (of niet). Laten we de belangrijkste buitenlandse cijfers doornemen en kijken hoe ze in de praktijk worden gebruikt.

Routekaart

  • Dit is de vierde les in de serie “Dive into Crypto”. Alle lessen uit de serie in chronologische volgorde:
  • Grondbeginselen en historische codeerders. Hoe shift-, substitutie-, Richard Sorge-, Vernam- en codeermachines werken (en worden geanalyseerd)
  • Wat is het, hoe wordt sleuteldistributie uitgevoerd en hoe kies je een sterke sleutel
  • Wat is een Feistel-netwerk en wat zijn de binnenlandse blokcijfers die in moderne protocollen worden gebruikt - GOST 28147-89, "Grassnechik" Les 4. Moderne buitenlandse cijfers. Wat is het verschil tussen 3DES, AES, Blowfish, IDEA, Threefish van Bruce Schneier en hoe ze werken
  • (ben je hier)
  • Soorten elektronische handtekeningen, hoe ze werken en hoe u ze kunt gebruiken Les 6. Kwantumcryptografie.

Wat is het, waar wordt het gebruikt en hoe helpt het bij het verspreiden van geheime sleutels, het genereren van willekeurige getallen en elektronische handtekeningen

3DES

Laten we dus eerst in een reeks buitenlandse cijfers eens kijken naar 3DES, of beter gezegd de meest nabije verwant DES (Data Encryption Standard), die, hoewel niet langer als zodanig gebruikt, de voorloper is van 3DES.

DES is ontwikkeld door een team wiskundigen van het IBM Research Laboratory, waartoe ook het al bekende Feistel behoorde. De eerste versie van het cijfer heette "Lucifer", maar werd later gewijzigd en uiteindelijk aangenomen als het officiële Data Encryption Algorithm (DEA). Het bleef ruim twintig jaar de wereldstandaard voordat het werd vervangen door Triple DES.

  1. De tekst is, net als bij elke andere versleuteling, verdeeld in blokken van 64 bits.
  2. Uit een 56-bits sleutel worden 16 ronde sleutels van 48-bit gegenereerd.
  3. Elk blok ondergaat permutatie, dat wil zeggen dat alle bits van het invoerblok worden geschud volgens een bepaalde tabel.
  4. Het blok wordt in twee helften gesplitst en komt in het bekende Feistel-netwerk terecht, waar 16 ronden worden gescrolld.
  5. We verbinden de helften.
  6. En nog een verandering.

De begin- en eindpermutaties hebben geen betekenis voor cryptografie in DES. Beide permutaties zijn zonder sleutels en de tabellen daarvoor zijn vooraf gedefinieerd. De reden dat ze in DES zijn opgenomen is onduidelijk en de DES-ontwerpers hebben er niets over gezegd. Er kan worden aangenomen dat het de bedoeling was dat het algoritme in hardware (op chips) zou worden geïmplementeerd en dat deze twee complexe permutaties het moeilijk hadden moeten maken om het versleutelingsmechanisme in software te simuleren.

Hier vindt u in feite alles wat u moet weten over de werking van het DES-algoritme. Als we dieper ingaan op de werking van de functie die in het Feistel-netwerk is gedefinieerd, is alles in orde. Het voert zowel permutatie als vervanging uit (S-boxen, zoals je je misschien nog herinnert uit het vorige artikel) en optelling met een ronde sleutel.

Maar laten we terugkeren naar triple DES, of Triple DES. Het werd noodzakelijk omdat de 56-bits DES-sleutel kwetsbaar was voor brute kracht, en met de groei van de rekenkracht werd dit probleem steeds nijpender. Met behulp van de technologie die vandaag de dag beschikbaar is, kunnen één miljoen sleutels per seconde worden geverifieerd. Dit betekent dat het meer dan tweeduizend jaar zou duren om DES met brute kracht te decoderen met behulp van een computer met slechts één processor.

Maar als we een computer nemen met een miljoen processorkernen die sleutels parallel verwerkt, kunnen we de hele set sleutels in ongeveer 20 uur controleren. Toen DES werd geïntroduceerd, bedroegen de kosten van zo'n computer enkele miljoenen dollars, maar deze daalden snel. In 1998 werd een speciale computer gemaakt, die de sleutel binnen 112 uur vond.

Om het probleem van het snel vinden van een sleutel op te lossen, stelden slimme buitenlandse cryptografen voor om twee sleutels te gebruiken en DES tweemaal te gebruiken. Dubbele DES was echter kwetsbaar voor een meet-in-the-middle-aanval. Om deze aanval uit te voeren, heeft de aanvaller de leesbare tekst en de bijbehorende cijfertekst nodig. De aanvaller codeert de leesbare tekst met alle mogelijke sleutels, schrijft de resultaten naar Tabel 1. Vervolgens decodeert hij de cijfertekst met alle mogelijke sleutels en schrijft het resultaat naar Tabel 2. De aanvaller doorzoekt vervolgens de Tabellen 1 en 2 op overeenkomsten.

Dit type aanval omvat het met brute kracht coderen van sleutels aan zowel de cijfertekst- als de leesbare tekstzijde en vereist ongeveer vier keer meer rekenkracht dan een gewone DES-sleutel brute kracht en behoorlijk veel geheugen om de tussenresultaten op te slaan. In de praktijk is de aanval echter haalbaar, waardoor Double DES onbruikbaar wordt.

Bij Triple DES is het totaal anders. Het gebruik van drie sleutels en de toepassing van algoritmen in de volgorde aangegeven in het diagram verlengden de levensduur van DES met nog een aantal jaren.


Prachtige DES

Wat is er zo geweldig aan DES? Dit versleutelingsalgoritme is onderworpen aan uitgebreide analyse. DES had twee zeer belangrijke eigenschappen van blokcijfers: lawine en volledigheid. Het is tijd om je cryptografische woordenschat uit te breiden!
Het lawine-effect betekent dat kleine veranderingen in de originele tekst (of sleutel) grote veranderingen in de cijfertekst kunnen veroorzaken.

Het is bewezen dat DES alle kenmerken van dit pand bezit.

Hoewel de twee leesbare tekstblokken alleen in het meest rechtse bit verschillen, verschillen de cijfertekstblokken met 29 bits. Dit betekent dat een verandering van ongeveer 1,5% van de leesbare tekst een verandering van ongeveer 45% van de cijfertekst veroorzaakt.

Het volledigheidseffect is dat elk bit van de cijfertekst afhankelijk moet zijn van vele bits van de leesbare tekst. Zoals we al hebben ontdekt, gebruikt DES zowel permutaties als substituties - alle transformaties bepalen de afhankelijkheid van elk cijfertekstbit van verschillende bits van de originele tekst.

Waar wordt DES gebruikt? Ja, bijna overal zijn de implementaties ervan aanwezig in de meeste softwarebibliotheken. Maar wie weet hoe veilig het tegenwoordig is om DES te gebruiken? Hoewel IBM beweerde dat het algoritme het resultaat was van 17 manjaren intensieve cryptanalyse, vreesden sommige mensen dat de NSA een maas in het algoritme had gestoken waardoor de dienst onderschepte berichten gemakkelijk kon ontsleutelen. De inlichtingencommissie van de Amerikaanse Senaat heeft deze kwestie zorgvuldig bestudeerd en heeft uiteraard niets gevonden, de aanklachten tegen de NSA zijn ingetrokken en de resultaten van het onderzoek zijn niettemin geheim gehouden. Kortom, in Amerika doen al lange tijd geruchten en speculaties de ronde over de vraag of DES wel of niet te vertrouwen is. Maar, zoals ik geloof, wordt de situatie hier beschreven met het gezegde: “Een slim persoon zal het niet vertellen, een dwaas zal het niet begrijpen.” Uiteindelijk gaf de NSA toe dat ze IBM niet kon toevertrouwen met zo’n belangrijke missie en voerde ze verschillende aanpassingen door, zoals het specificeren van S-boxen.

Gedurende zijn bestaan ​​is DES een doelwit geweest voor verschillende cryptanalysetechnieken. Cryptanalisten zijn nooit gestopt met het testen van DES-breekmachines om te zien hoe lang het zou duren om een ​​tekst te ontcijferen. In dit opzicht zijn er talloze verschillende aanpassingen aan dit algoritme verschenen, en 3DES is verre van de meest geavanceerde daarvan.

Zoals u zich herinnert, passen het verschuivings-, substitutie-, permutatiecijfer en het Vernam-cijfer een bewerking toe op elk specifiek teken van de tekst. We moeten verschuiven - we verschuiven het teken, passen de sleutel toe - passen het toe op het teken, dan op het volgende teken, enzovoort, totdat we alle leesbare tekens hebben gecodeerd. Deze versleutelingsmethode wordt streamversleuteling genoemd. We versleutelen elk teken afzonderlijk. Een andere benadering is om de originele leesbare tekst op te splitsen in groepen van verschillende tekens (blokken) en op elk blok versleutelingsbewerkingen uit te voeren. Dit is een blokversleutelingsmethode.

Om het verschil tussen blok- en stroomcijfers duidelijker te maken, zullen we een voorbeeld geven met behulp van een eenvoudig vervangingscijfer.

Stream-encryptie

Laten we het woord CIPHER coderen met een vervangend stroomcijfer:

We hebben elk teken gecodeerd en een cijfertekst verkregen. Eenvoudiger kan het niet.

BLOKKEER ENCRYPTIE

Laten we het woord AVADAKEDAVRA coderen. Omdat het cijfer blok één is, verdelen we de leesbare tekst in blokken van vier tekens: AVAD | AKED | AVRA (in de praktijk bestaan ​​tekstblokken uit 64-256 bits). Voor ieder blok bedenken wij onze eigen vervangende tafel:

Nu coderen we elk van de blokken met het bijbehorende alfabet:
Het pakte iets beter uit dan met de inline-aanpak, als we het over duurzaamheid hebben. We hebben tenslotte geleerd het gebruikelijke vervangingscijfer met één linkerhand te ontcijferen. En met een dergelijke blokbenadering zal de aanvaller zijn hersens moeten pijnigen voordat hij de bloklengte kan selecteren en vervolgens cryptanalyse kan toepassen voor vervangende cijfers voor elk blok.

FEISTEL-NETWERK

Nu zijn we klaar om verder te gaan met een heel belangrijk onderwerp dat de deur opent naar de eindeloze wereld van moderne encryptiesystemen. Het Feistel-netwerk is een blokversleutelingsmethode ontwikkeld door Horst Feistel in het IBM-laboratorium in 1971. Tegenwoordig ligt het Feistel-netwerk ten grondslag aan een groot aantal cryptografische protocollen. Laten we proberen “op de vingers” uit te zoeken wat het is.

Het Feistel-netwerk werkt op blokken platte tekst, dus we zullen kijken naar het mechanisme van de werking ervan op een van de blokken. De acties voor de overige blokken zullen vergelijkbaar zijn.

  • Het blok is verdeeld in twee gelijke delen: links (L) en rechts (R).
  • Na het partitioneren wordt het linkerdeelblok gewijzigd door een functie f met behulp van de sleutel K: x = f(L, K). Als functie kun je elke transformatie voorstellen, bijvoorbeeld het goede oude shift-cijfer met sleutel K.
  • Het resulterende subblok wordt modulo 2 opgeteld met het rechter subblok R, dat voorheen niet werd gebruikt: x=x+R
  • Vervolgens worden de resulterende onderdelen verwisseld en aan elkaar gelijmd.

Zoals je kunt zien, is alles vrij eenvoudig. Bekijk het diagram om te begrijpen hoe dit werkt:

Deze opstelling wordt een Feistel-cel genoemd. Het Feistel-netwerk zelf bestaat uit verschillende cellen. De subblokken verkregen aan de uitgang van de eerste cel gaan naar de ingang van de tweede cel, de resulterende subblokken van de tweede cel gaan naar de ingang van de derde cel, enzovoort, afhankelijk van het aantal rondes van het Feistel-netwerk. In elke ronde wordt een vooraf bepaalde rondesleutel gebruikt. Meestal worden ronde sleutels gegenereerd op basis van de geheime hoofdsleutel K. Wanneer alle rondes zijn voltooid, worden de subblokken met tekst aan elkaar gelijmd en wordt een normale cijfertekst verkregen.

Laten we nu eens kijken naar de werking van het Feistel-netwerk aan de hand van een voorbeeld. Laten we het woord AVADAKEDAVRA nemen en het in twee blokken van zes tekens verdelen: AVADAK | EDAVRA. Voor de functie nemen we het shift-cijfer op basis van het aantal posities bepaald door de ronde sleutel. Laat de geheime sleutel K = . Als ronde sleutels nemen we K = 1, K = 2. Voor optelling modulo 2 zetten we de tekst om in binaire code volgens het telegraafalfabet, dat bijna niemand anders gebruikt.

Dit is wat er gebeurde:

Laten we nu het eerste blok in twee rondes door het Feistel-netwerk laten lopen:

Probeer het tweede blok zelf te coderen, ik heb MOSSTR.

De decodering wordt op precies dezelfde manier uitgevoerd: de cijfertekst wordt verdeeld in blokken en vervolgens in subblokken, het linker subblok komt in de functie, wordt modulo 2 opgeteld bij de rechter, en vervolgens worden de subblokken verwisseld. Het verschil is dat de rondesleutels in de omgekeerde volgorde worden ingediend, dat wil zeggen dat we in ons geval in de eerste ronde de sleutel K = 2 gebruiken en vervolgens in de tweede ronde K = 1.

Onderzoek naar het Feistel-netwerk heeft aangetoond dat met onafhankelijke ronde sleutels en een crypto-resistente pseudo-willekeurige functie f, drie ronden van het Feistel-netwerk voldoende zullen zijn om de cijfertekst pseudo-willekeurig te maken. Dit suggereert dat cijfers gebaseerd op het Feistel-netwerk momenteel behoorlijk veilig zijn.

GOST 28147-89 (MAGMA)

We hebben al bijna alle noodzakelijke concepten in ons arsenaal, dus we zijn klaar om verder te gaan met het eerste belangrijke onderwerp van de binnenlandse cryptografie: GOST 28147-89. Het is de moeite waard om te zeggen dat alleen luie mensen nog niet over deze standaard hebben geschreven, dus ik zal voor de miljoenste en eerste keer proberen om kort en zonder een wolk van formules de essentie van de encryptiemodi van het grote en verschrikkelijke Magma te schetsen. Als u besluit de norm zelf te lezen, moet u tijd, energie, geduld en voedsel inslaan, omdat, zoals u weet, het schrijven van normen in menselijke taal ten strengste verboden is.

Belangrijkste kenmerken: sleutel 256 bits, blok 64 bits.

Voordat u Magma analyseert, moet u een nieuw concept leren: vervangingstabellen of S-boxen. Dit is hetzelfde type tabel als de tabel in het vervangingscijfer. Ontworpen om subbloksymbolen te vervangen door symbolen die in de tabel zijn vastgelegd. Denk niet dat de S-box willekeurige getallen zijn die worden gegenereerd door de functie rand(). S-boxen zijn het resultaat van zorgvuldig gegenereerde reeksen, omdat de cryptografische kracht van het hele cijfer daarop berust.

GOST 28147 beschrijft de vervangingstabellen zeer spaarzaam. Er staat alleen dat ze een aanvullend geheim element zijn (samen met de geheime sleutel) en “op de voorgeschreven manier worden afgeleverd.” Niets meer. Sinds de goedkeuring van GOST 28147 heeft de wetenschappelijke en technische onzekerheid die verband houdt met de keuze voor S-boxen aanleiding gegeven tot geruchten en speculaties. Er werd gesproken over geheime criteria die alleen bekend waren bij de ontwikkelaars van GOST. Uiteraard verminderde deze onzekerheid het vertrouwen in het cryptosysteem.

Deze tekortkoming vormde een uitstekende reden voor kritiek op de standaard. De Franse cryptograaf Nicolas Courtois publiceerde verschillende artikelen met een aantal controversiële bepalingen over de kracht van GOST. Courtois is van mening dat de Russische standaard gemakkelijk aan te vallen is en niet als internationaal kan worden beschouwd. Courtois voert zijn analyse echter uit voor andere S-boxen dan de daadwerkelijke, dus u moet niet op zijn mening vertrouwen.

Laten we nu eens kijken wat ze bedacht hebben binnen de muren van de sombere Lubyanka.

Eenvoudige vervangingsmodus

In de eenvoudige vervangingsmodus voor 32 rondes hebben we volgens de standaard 32 ronde sleutels nodig. Om ronde sleutels te genereren, wordt de oorspronkelijke 256-bits sleutel verdeeld in acht 32-bits blokken: K1…K8. De toetsen K9...K24 zijn een cyclische herhaling van de toetsen K1...K8. Toetsen K25…K32 zijn toetsen K8…K1.

  1. Elk 64-bits blok is verdeeld in twee subblokken: Ai en Bi.
  2. Het linker subblok Ai wordt modulo 232 toegevoegd met de ronde sleutel K1: Ai+1 = Ai + Ki mod 232.
  3. Het linker subblok gaat door de S-box.
  4. De bits van het linker deelblok worden 11 posities verschoven (cyclische verschuiving).
  5. Het linkerdeelblok telt op tot het rechterdeel modulo 2: A = A ⊕ B . iii
  6. Het rechter deelblok neemt de oorspronkelijke waarde van het linker deelblok aan: Bi+1 = Ai.
  7. De subblokken zijn verwisseld.

Gewoon een voorbeeld van één ronde. 256-bits sleutel:

arvadek adava arvadek adava arvadek adava arvadek adava arva

00011 01010 11110 00011 01001 00001 01111 00011 01001 00011 11110

00011... . . . 00011 01010 11110 0

Dan de ronde toetsen

K1 = 00011 01010 11110 00011 01001 00001 01

K2 = 111 00011 01001 00011 11110 00011 0001

K3 = . . .

S - doos= [ 1 , 15 , 13 , 0 , 5 , 7 , 10 , 4 , 9 , 2 , 3 , 14 , 6 , 11 , 8 , 12 ]

Hoe gebruik je deze S-box? Heel eenvoudig! Als de invoer van de S-box 0 is, dan is de uitvoer 1 (neem het 0-symbool van de S-box), als 4, dan is de uitvoer 5 (neem het 4e symbool), als de invoer 7 is , dan is de uitvoer 4, enzovoort.

Platte tekst:

Verdeeld in twee 32-bits blokken met hoge en lage bits:

Het voorbeeld bleek natuurlijk wild, omdat GOST nog steeds niet zo'n standaard is dat iedereen er met eigen handen doorheen kan gaan.

De eenvoudige vervangingsmodus is te eenvoudig en heeft aanzienlijke nadelen:

  • één fout in een gecodeerd blok corrumpeert alle bits van dat blok;
  • bij het coderen van identieke blokken leesbare tekst worden identieke blokken cijfertekst verkregen, die bepaalde informatie aan een cryptanalyticus kunnen verschaffen.

Het is dus raadzaam om GOST 28147-89 alleen in de eenvoudige vervangingsmodus te gebruiken voor het coderen van sleutelgegevens.

GAMING-MODUS

Deze modus heeft niet de nadelen van de eenvoudige vervangingsmodus. De gammamodus wordt zo genoemd omdat deze gebruik maakt van gamma, een pseudo-willekeurige reeks die in elke ronde modulo 2 aan de leesbare tekst wordt toegevoegd. Gamma wordt gevormd uit het synchronisatiebericht S - een pseudo-willekeurige reeks die bij elke iteratie verandert en wordt gecodeerd in de eenvoudige vervangingsmodus, waarna deze verandert in gamma en over de platte tekst wordt heen gelegd.

En nu is alles in orde.

Stappen 3 t/m 5 worden voor elk blok herhaald. Al deze manipulaties zijn te zien in het diagram.

De decodering wordt op dezelfde manier uitgevoerd; in plaats van een leesbare tekstblok wordt een cijfertekstblok geleverd.

Gammamodus met feedback

Laten we het ingewikkelder maken. Het algoritme is vergelijkbaar met de gammamodus, maar de gamma wordt gevormd op basis van het vorige blok met gecodeerde gegevens, dus het encryptieresultaat van het huidige blok hangt ook af van de voorgaande blokken. 1. Synchronisatiebericht S - 64-bit pseudo-willekeurige reeks.

2. S is gecodeerd in de eenvoudige vervangingsmodus.
3. De leesbare tekst wordt modulo 2 toegevoegd aan het resulterende gamma.
4. De resulterende cijfertekst wordt als synchronisatiebericht voor het volgende blok verzonden en ook naar de uitgang verzonden. Hoe het eruit ziet, kun je zien in het diagram.

Gesimuleerde invoegmodus

In deze modus wordt een gesimuleerde invoeging gegenereerd: een extra blok met een vaste lengte, afhankelijk van de brontekst en sleutels. Zo'n klein blokje is nodig om te bevestigen dat er per ongeluk of opzettelijk geen vervormingen in de cijfertekst zijn geïntroduceerd - dat wil zeggen om de integriteit te controleren. Deze modus werkt als volgt:

1. Een blok platte tekst doorloopt 16 rondes in de eenvoudige vervangingsmodus.
2. Een ander blok tekst wordt toegevoegd aan het resulterende blok modulo 2.
3. De som gaat nog eens 16 rondes door in de eenvoudige vervangingsmodus.
4. Het volgende leesbare tekstblok wordt toegevoegd en opnieuw een eenvoudige vervanging, enzovoort totdat er geen leesbare tekstblokken meer zijn.

Ter verificatie voert de ontvanger, na het ontsleutelen van de tekst, een procedure uit die vergelijkbaar is met die beschreven. Als het resultaat niet overeenkomt met de verzonden imitatieve invoeging, worden alle corresponderende M-blokken als onwaar beschouwd.

GOST 34.12-2015 (GRASHOPPER)

Velen beschouwen GOST 28147-89 als verouderd en niet robuust genoeg in vergelijking met buitenlandse algoritmen. Ter vervanging ervan hebben binnenlandse cryptografen een nieuwe encryptiestandaard uitgebracht. Ze zeggen dat dit gebeurde vanwege het grote aantal aanvallen op de oude GOST, of omdat deze bloklengte al verouderd en te klein is voor moderne datasets. Niemand maakt reclame voor de echte redenen. Natuurlijk waren er enkele wijzigingen in de belangrijkste kenmerken.

Belangrijkste kenmerken: sleutel 256 bits, blok 128 bits.

Het is ook de moeite waard om te zeggen dat S-boxen in de nieuwe standaard vast en doordacht zijn, dus het is niet nodig om je eigen wonderbaarlijke willekeurige vervangingen te bedenken. De nieuwe GOST heeft veel meer coderingsmodi:
eenvoudige vervangingsmodus (elektronisch codeboek, ECB);
gammamodus (teller, CTR);
gammamodus met uitgangsfeedback (Output Feedback, OFB);
eenvoudige vervangingsmodus met betrokkenheid (Cipher Block Chaining, SBC);
gammamodus met cijfertekstfeedback (Cipher Feedback, CFB);
simulatiemodus voor het genereren van invoegingen (algoritme voor berichtauthenticatiecode).

Laten we eens kijken naar de nieuwe modi.

Eenvoudige vervangingsmodus met betrokkenheid

Zoals we in de vorige standaard hebben gezien, is de eenvoudige vervangingsmodus de zwakste van de modi, dus in de nieuwe standaard steekt deze nu uit met betrokkenheid en is helemaal niet zo eenvoudig geworden.

  1. Een initialisatievector klinkt eng, maar in werkelijkheid is het slechts een reeks bits die de invoer binnenkomen.
  2. De vector wordt in twee delen gesplitst: L en R, waarvan er één modulo 2 wordt toegevoegd met de platte tekst, en de andere de helft wordt van de initialisatievector voor het volgende blok.
  3. De som van de leesbare tekst en een deel van de initialisatievector wordt door een eenvoudig substitutiecijfer gevoerd.
  4. De resulterende cijfertekstblokken worden aan elkaar gelijmd.

Als je naar het diagram kijkt, wordt alles meteen duidelijk.

Natuurlijk is de initialisatievector niet zo eenvoudig: hij doorloopt een reeks lineaire transformaties (met behulp van een lineair schuifregister) voordat hij begint met het coderen van een nieuw blok. Maar om kennis te maken met het cijfer, volstaat het om een ​​​​dergelijk schema voor te stellen. Decodering in deze modus is ook niet helemaal voor de hand liggend, dus het is beter om naar het diagram te kijken.

Voor de pluspunten - Coderingen. Een van de binnenlandse ontwikkelingen is de cryptoprovider CryptoPro CSP.

Een paar woorden over de kracht van encryptiemodi. Veel buitenlandse cryptografen hebben geprobeerd hun hand op te steken tegen onze standaard, maar op dit moment is er geen enkele aanval bekend die op het huidige technologische ontwikkelingsniveau kan worden geïmplementeerd. Lange tijd was deze standaard niet erg populair onder programmeurs, omdat het moeilijk is om het bedieningsalgoritme uit de tekst te begrijpen en er niet genoeg duidelijkere beschrijvingen zijn. Maar inmiddels zijn er al volop implementaties in veel programmeertalen. Dus nu is het gebruik van GOST heel goed mogelijk, en in veel opzichten overtreft het buitenlandse normen. Waar is uiteindelijk het patriottisme?!

Gegevensversleuteling is uiterst belangrijk om de privacy te beschermen. In dit artikel bespreek ik de verschillende soorten en methoden van codering die tegenwoordig worden gebruikt om gegevens te beschermen.

Wist je dat?
In de Romeinse tijd werd encryptie door Julius Caesar gebruikt om brieven en berichten onleesbaar te maken voor de vijand. Het speelde een belangrijke rol als militaire tactiek, vooral tijdens oorlogen.

Naarmate de mogelijkheden van internet blijven groeien, worden steeds meer van onze activiteiten online uitgevoerd. De belangrijkste hiervan zijn internetbankieren, online betalen, e-mails, de uitwisseling van privé- en officiële berichten, enz., waarbij vertrouwelijke gegevens en informatie worden uitgewisseld. Als deze gegevens in verkeerde handen vallen, kan dit niet alleen de individuele gebruiker schaden, maar ook het hele online bedrijfssysteem.

Om dit te voorkomen, zijn er verschillende netwerkbeveiligingsmaatregelen genomen om de overdracht van persoonlijke gegevens te beschermen. De belangrijkste hiervan zijn de processen voor het coderen en decoderen van gegevens, die bekend staan ​​als cryptografie. Er zijn tegenwoordig drie belangrijke versleutelingsmethoden die in de meeste systemen worden gebruikt: hashing, symmetrische en asymmetrische versleuteling. In de volgende regels zal ik meer in detail over elk van deze coderingstypen praten.

Coderingstypen

Symmetrische codering

Bij symmetrische codering worden normaal leesbare gegevens, ook wel platte tekst genoemd, gecodeerd zodat deze onleesbaar worden. Deze gegevensversleuteling gebeurt met behulp van een sleutel. Zodra de gegevens zijn gecodeerd, kunnen deze veilig naar de ontvanger worden verzonden. Bij de ontvanger worden de gecodeerde gegevens gedecodeerd met dezelfde sleutel die werd gebruikt voor het coderen.

Het is dus duidelijk dat de sleutel het belangrijkste onderdeel is van symmetrische encryptie. Het moet voor buitenstaanders verborgen blijven, omdat iedereen die er toegang toe heeft, privégegevens kan ontsleutelen. Daarom wordt dit type codering ook wel een ‘geheime sleutel’ genoemd.

In moderne systemen is de sleutel meestal een reeks gegevens die is afgeleid van een sterk wachtwoord of van een volledig willekeurige bron. Het wordt ingevoerd in symmetrische encryptiesoftware, die het gebruikt om de invoergegevens geheim te houden. Het versleutelen van gegevens wordt bereikt met behulp van een symmetrisch versleutelingsalgoritme, zoals Data Encryption Standard (DES), Advanced Encryption Standard (AES) of International Data Encryption Algorithm (IDEA).

Beperkingen

De zwakste schakel bij dit type versleuteling is de veiligheid van de sleutel, zowel wat betreft opslag als verzending naar de geauthenticeerde gebruiker. Als een hacker deze sleutel kan bemachtigen, kan hij de versleutelde gegevens gemakkelijk ontsleutelen, waardoor het hele doel van versleuteling wordt omzeild.

Een ander nadeel is dat de software die de gegevens verwerkt niet met versleutelde gegevens kan werken. Om deze software te kunnen gebruiken, moeten de gegevens daarom eerst worden gedecodeerd. Als de software zelf gecompromitteerd is, kan een aanvaller gemakkelijk de gegevens verkrijgen.

Asymmetrische encryptie

Asymmetrische sleutelversleuteling werkt vergelijkbaar met symmetrische sleutel, omdat er een sleutel wordt gebruikt om de verzonden berichten te versleutelen. In plaats van dezelfde sleutel te gebruiken, gebruikt hij echter een compleet andere sleutel om dit bericht te ontsleutelen.

De sleutel die wordt gebruikt voor het coderen is beschikbaar voor alle netwerkgebruikers. Als zodanig staat het bekend als een "publieke" sleutel. Aan de andere kant wordt de sleutel die voor de decodering wordt gebruikt geheim gehouden en is deze bedoeld voor privégebruik door de gebruiker zelf. Daarom staat het bekend als de "privésleutel". Asymmetrische encryptie wordt ook wel public key encryptie genoemd.

Omdat bij deze methode de geheime sleutel die nodig is om het bericht te ontsleutelen niet elke keer hoeft te worden verzonden en deze meestal alleen bekend is bij de gebruiker (ontvanger), is de kans groot dat een hacker het bericht kan ontsleutelen. lager.

Diffie-Hellman en RSA zijn voorbeelden van algoritmen die gebruikmaken van codering met openbare sleutels.

Beperkingen

Veel hackers gebruiken man-in-the-middle als aanvalsvorm om dit type codering te omzeilen. Bij asymmetrische encryptie krijgt u een publieke sleutel die wordt gebruikt om veilig gegevens uit te wisselen met een andere persoon of dienst. Hackers gebruiken echter netwerkmisleiding om u ertoe te verleiden met hen te communiceren, terwijl u de indruk krijgt dat u zich op een beveiligde lijn bevindt.

Om dit soort hacking beter te begrijpen, moeten we kijken naar twee samenwerkende partijen, Sasha en Natasha, en een hacker, Sergei, met de bedoeling hun gesprek te onderscheppen. Eerst stuurt Sasha een bericht over het netwerk dat bedoeld is voor Natasha, waarin om haar openbare sleutel wordt gevraagd. Sergei onderschept dit bericht en verkrijgt de openbare sleutel die aan haar is gekoppeld en gebruikt deze om te coderen en een vals bericht naar Natasha te sturen met daarin zijn openbare sleutel in plaats van die van Sasha.

Natasha, die denkt dat dit bericht van Sasha afkomstig is, codeert het nu met de openbare sleutel van Sergei en stuurt het terug. Dit bericht werd opnieuw onderschept door Sergei, gedecodeerd, aangepast (indien gewenst), opnieuw gecodeerd met de openbare sleutel die Sasha oorspronkelijk had verzonden, en teruggestuurd naar Sasha.

Dus wanneer Sasha dit bericht ontvangt, is hij ertoe gebracht te geloven dat het van Natasha kwam en is hij zich nog steeds niet bewust van kwaad opzet.

Hashing

De hash-techniek maakt gebruik van een algoritme dat bekend staat als een hash-functie om uit de gegeven gegevens een speciale string te genereren, ook wel een hash genoemd. Deze hasj heeft de volgende eigenschappen:

  • dezelfde gegevens produceren altijd dezelfde hash.
  • Het is niet mogelijk om op basis van alleen een hash ruwe data te genereren.
  • Het is niet praktisch om verschillende combinaties van invoer te proberen om dezelfde hash te genereren.

Het belangrijkste verschil tussen hashing en de andere twee vormen van gegevensversleuteling is dus dat zodra de gegevens zijn versleuteld (gehasht), deze niet meer in hun oorspronkelijke vorm kunnen worden teruggehaald (gedecodeerd). Dit feit zorgt ervoor dat zelfs als een hacker de hash in handen krijgt, deze voor hem geen nut zal hebben, aangezien hij de inhoud van het bericht niet zal kunnen ontsleutelen.

Message Digest 5 (MD5) en Secure Hashing Algorithm (SHA) zijn twee veelgebruikte hash-algoritmen.

Beperkingen

Zoals eerder vermeld, is het vrijwel onmogelijk om gegevens van een bepaalde hash te decoderen. Dit is echter alleen waar als sterke hashing wordt geïmplementeerd. Bij een zwakke implementatie van de hashtechniek, bij gebruik van voldoende middelen en brute force-aanvallen, kan een volhardende hacker gegevens vinden die overeenkomen met de hash.

Combinatie van encryptiemethoden

Zoals hierboven besproken heeft elk van deze drie encryptiemethoden enkele nadelen. Wanneer echter een combinatie van deze methoden wordt gebruikt, vormen ze een veilig en zeer effectief versleutelingssysteem.

Meestal worden private en publieke sleuteltechnieken gecombineerd en samen gebruikt. De privésleutelmethode maakt een snelle decodering mogelijk, terwijl de openbare sleutelmethode een veiligere en gemakkelijkere manier biedt om de geheime sleutel te verzenden. Deze combinatie van methoden staat bekend als de "digitale envelop". PGP-e-mailversleutelingssoftware is gebaseerd op de "digitale envelop"-techniek.

Hashing wordt gebruikt om de sterkte van een wachtwoord te controleren. Als het systeem een ​​hash van het wachtwoord opslaat in plaats van het wachtwoord zelf, zal het veiliger zijn, want zelfs als een hacker deze hash in handen krijgt, zal hij deze niet kunnen begrijpen (lezen). Tijdens de verificatie controleert het systeem de hash van het binnenkomende wachtwoord en kijkt of het resultaat overeenkomt met wat is opgeslagen. Op deze manier is het daadwerkelijke wachtwoord alleen zichtbaar tijdens korte momenten waarop het moet worden gewijzigd of geverifieerd, waardoor de kans dat het in verkeerde handen valt aanzienlijk wordt verkleind.

Hashing wordt ook gebruikt om gegevens te authenticeren met behulp van een geheime sleutel. Met behulp van de gegevens en deze sleutel wordt een hash gegenereerd. Daarom zijn alleen de gegevens en hash zichtbaar en wordt de sleutel zelf niet verzonden. Op deze manier kunnen wijzigingen in de gegevens of de hash gemakkelijk worden gedetecteerd.

Concluderend kunnen deze technieken worden gebruikt om gegevens efficiënt te coderen in een onleesbaar formaat dat ervoor kan zorgen dat deze veilig blijven. De meeste moderne systemen gebruiken doorgaans een combinatie van deze versleutelingsmethoden samen met krachtige algoritme-implementaties om de beveiliging te verbeteren. Naast beveiliging bieden deze systemen ook veel extra voordelen, zoals het verifiëren van de identiteit van de gebruiker en het voorkomen dat er met de ontvangen gegevens kan worden geknoeid.