Een inleiding tot de basisprincipes van moderne symmetrische sleutelcijfers. Eenvoudige vervangingsmodus. Wat is encryptie

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 wordt deze transformatie weergegeven de volgende afhankelijkheden, waarbij acties worden beschreven met initiële informatie:

C = Ek1(M)

M" = Dk2(C),

waar M (bericht) - open informatie(in de literatuur over informatiebeveiliging wordt dit vaak ‘ bron");
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 is een uniek element waarmee je de resultaten van het versleutelingsalgoritme kunt wijzigen: dezelfde brontekst bij gebruik verschillende sleutels wordt anders gecodeerd.

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: 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 versleuteling wordt de versleutelingssleutel kl berekend op basis van de sleutel k2, op een zodanige wijze dat: omgekeerde conversie onmogelijk, bijvoorbeeld door de formule k1 = ak2 mod p te gebruiken (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 bespreken (bijna alle boeken op de lijst met aanvullende materialen hebben dit 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 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 modulo 2 uitgevoerd, d.w.z. logisch XOR-bediening- “exclusief of”), en vervolgens worden de subblokken verwisseld. Deze transformatie rennen bepaald aantal tijden (“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 rondegetal en de werkingsmodus van het algoritme.

Tweede operatie - tafel vervanging. 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 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, enz. - in rondes 1 tot 24;

K7, K6, K5, K4, K3, K2, K1, K0 - in rondes 25 tot en met 32. 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-bit cipher 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 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 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, 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 duurzaamheid wordt voornamelijk bereikt door lange lengte sleutel - 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 erop konden reageren.

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 is verdeeld in twee of meer subblokken, waarvan een deel in elke ronde wordt verwerkt bepaalde wet, waarna het wordt gesuperponeerd op onverwerkte subblokken (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 meerdere is toegestaan vaste maten gecodeerd informatieblok). Alle bewerkingen worden uitgevoerd op individuele bytes van de array, maar ook op onafhankelijke kolommen en lijnen.

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. 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 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 als die welke 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 bestudeerd, en Rijndael kan, in tegenstelling tot hen, verborgen kwetsbaarheden, die pas kan worden ontdekt nadat enige tijd is verstreken sinds het begin van de wijdverbreide verspreiding ervan.

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. Per 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 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 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. De belangrijkste parameter van het RSA-algoritme is de systeemmodule N, volgens welke alle berekeningen in het systeem worden uitgevoerd, en N = P*Q (P en Q zijn geheime willekeurige eenvoudige 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 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 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.

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?

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 schade toebrengen aan de individuele gebruiker, maar ook aan 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 wordt gebruikt voor decodering geheim gehouden en is 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.

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 een blokcijfer 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 bij 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 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:

Dit circuit 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 tekstsubblokken 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 beginwaarde 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 leesbaar 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 is en te klein 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?!

Invoering

Het probleem van het beschermen van informatie door deze te transformeren om te voorkomen dat deze door een buitenstaander wordt gelezen, houdt de menselijke geest al sinds de oudheid bezig. De geschiedenis van de cryptografie is even oud als de geschiedenis van de menselijke taal. Bovendien was het schrijven zelf oorspronkelijk een cryptografisch systeem, aangezien in oude samenlevingen slechts een select aantal mensen dit beheerste.

De heilige boeken van het oude Egypte en het oude India zijn hiervan voorbeelden.

Met het wijdverbreide gebruik van het schrift begon cryptografie zich als een onafhankelijke wetenschap te ontwikkelen. De eerste cryptosystemen worden al aan het begin van onze jaartelling gevonden. Zo gebruikte Caesar in zijn correspondentie een min of meer systematisch cijfer, dat zijn naam kreeg.

Cryptografische systemen ontwikkelden zich snel tijdens de jaren van de Eerste en Tweede Wereldoorlog. Vanaf de naoorlogse periode tot heden heeft de komst van computers de ontwikkeling en verbetering van cryptografische methoden versneld.

Waarom is het probleem van het gebruik van cryptografische methoden in informatiesystemen (IS) momenteel bijzonder relevant geworden?

Aan de ene kant is het gebruik van computernetwerken toegenomen, met name het mondiale internet, waardoor grote hoeveelheden informatie van staats-, militaire, commerciële en particuliere aard worden verzonden, waardoor wordt voorkomen dat onbevoegden er toegang toe krijgen.

Aan de andere kant heeft de opkomst van nieuwe krachtige computers, netwerk- en neurale computertechnologieën het mogelijk gemaakt om cryptografische systemen in diskrediet te brengen die tot voor kort als vrijwel onbreekbaar werden beschouwd.

In het eerste hoofdstuk van dit werk kun je kennis maken met de basisconcepten van de moderne cryptografie, de vereisten daarvoor en de mogelijkheden van de praktische toepassing ervan.

In het tweede hoofdstuk werken we met cryptografische sleuteldistributieprotocollen, het concept van elektronische handtekeningen en elektronische handtekeningprotocollen.

Het derde hoofdstuk van dit werk gaat over hashfuncties en (methoden van) algoritmen voor hun constructie.

Het vierde hoofdstuk gaat over de modernisering van de elektronische handtekening van El Gamal en het discrete logaritmeprobleem.

Hoofdstuk 1. Basisconcepten van moderne cryptografie

Cryptologie (kryptos - geheim, logos - wetenschap) houdt zich bezig met het probleem van het beschermen van informatie door deze te transformeren. Cryptologie is verdeeld in twee gebieden: cryptografie en cryptoanalyse. De doelstellingen van deze richtingen zijn direct tegenovergesteld.

Cryptografie houdt zich bezig met het zoeken en bestuderen van wiskundige methoden voor het transformeren van informatie.

Het interessegebied van cryptanalyse is de studie van de mogelijkheid om informatie te decoderen zonder de sleutels te kennen.

Dit werk zal zich richten op cryptografische methoden.

Moderne cryptografie omvat vier hoofdsecties:

Symmetrische cryptosystemen.

Cryptosystemen met publieke sleutel.

Elektronische handtekeningsystemen.

Sleutelbeheer.

De belangrijkste gebruiksgebieden van cryptografische methoden zijn de overdracht van vertrouwelijke informatie via communicatiekanalen (bijvoorbeeld e-mail), het vaststellen van de authenticiteit van verzonden berichten, het opslaan van informatie (documenten, databases) op media in gecodeerde vorm.

Cryptografie maakt het mogelijk om informatie zodanig te transformeren dat het lezen (herstel) ervan alleen mogelijk is als de sleutel bekend is.

Teksten gebaseerd op een bepaald alfabet worden beschouwd als informatie die moet worden gecodeerd en gedecodeerd. Deze termen betekenen het volgende.

Een alfabet is een eindige reeks tekens die worden gebruikt om informatie te coderen.

Tekst is een geordende reeks alfabetische elementen.

Hieronder volgen voorbeelden van alfabetten die in moderne informatiesystemen worden gebruikt:

alfabet Z33 - 32 letters van het Russische alfabet en een spatie;

alfabet Z256 - tekens opgenomen in standaard ASCII- en KOI-8-codes;

binair alfabet - Z2 = (0,1);

octaal alfabet of hexadecimaal alfabet;

Encryptie is een transformatieproces: de originele tekst, ook wel platte tekst genoemd, wordt vervangen door cijfertekst.

Decryptie is het omgekeerde proces van encryptie. Op basis van de sleutel wordt de cijfertekst omgezet naar de originele tekst.

De sleutel is de informatie die nodig is voor een soepele codering en decodering van teksten.

Een cryptografisch systeem is een familie van T-transformaties in platte tekst. Leden van deze familie worden geïndexeerd of aangeduid met het symbool k; parameter k is de sleutel. De sleutelruimte K is de verzameling mogelijke sleutelwaarden. Meestal is de sleutel een opeenvolgende reeks letters van het alfabet.

Cryptosystemen zijn onderverdeeld in symmetrische en publieke sleutels.

In symmetrische cryptosystemen wordt dezelfde sleutel gebruikt voor zowel codering als decodering.

Publieke sleutelsystemen gebruiken twee sleutels, een publieke sleutel en een private sleutel, die wiskundig aan elkaar gerelateerd zijn. Informatie wordt gecodeerd met een openbare sleutel, die voor iedereen beschikbaar is, en gedecodeerd met een privésleutel die alleen bekend is bij de ontvanger van het bericht. De termen sleuteldistributie en sleutelbeheer verwijzen naar de processen van een informatieverwerkingssysteem, waarvan de inhoud bestaat uit het samenstellen en distribueren van sleutels tussen gebruikers.

Een elektronische (digitale) handtekening is een cryptografische transformatie die aan de tekst is gekoppeld en die het mogelijk maakt, wanneer de tekst door een andere gebruiker wordt ontvangen, het auteurschap en de authenticiteit van het bericht te verifiëren.

Cryptografische sterkte is een kenmerk van een cijfer dat de weerstand tegen decodering bepaalt zonder de sleutel te kennen (dwz cryptanalyse). Er zijn verschillende indicatoren voor cryptografische kracht, waaronder:

het aantal van alle mogelijke sleutels;

gemiddelde tijd die nodig is voor cryptanalyse.

De transformatie Tk wordt bepaald door het overeenkomstige algoritme en de waarde van de parameter k. De effectiviteit van encryptie om informatie te beschermen hangt af van het behoud van de geheimhouding van de sleutel en de cryptografische kracht van het cijfer.

Het proces van het sluiten van cryptografische gegevens kan zowel in software als in hardware worden uitgevoerd. De hardware-implementatie is aanzienlijk duurder, maar heeft ook voordelen: hoge prestaties, eenvoud, veiligheid, enz. De software-implementatie is praktischer en zorgt voor een zekere flexibiliteit in het gebruik.

Aan moderne cryptografische informatiebeveiligingssystemen zijn de volgende algemeen aanvaarde eisen geformuleerd:

het versleutelde bericht mag alleen leesbaar zijn als de sleutel beschikbaar is;

het aantal handelingen dat nodig is om de gebruikte encryptiesleutel uit een fragment van een gecodeerd bericht en de bijbehorende leesbare tekst te bepalen mag niet minder zijn dan het totale aantal mogelijke sleutels;

het aantal handelingen dat nodig is om informatie te ontsleutelen door alle mogelijke sleutels te doorzoeken moet een strikte ondergrens hebben en de mogelijkheden van moderne computers te boven gaan (rekening houdend met de mogelijkheid om netwerkcomputers te gebruiken);

kennis van het versleutelingsalgoritme mag de betrouwbaarheid van de beveiliging niet aantasten;

een kleine verandering in de sleutel zou moeten leiden tot een significante verandering in het uiterlijk van het gecodeerde bericht, zelfs bij gebruik van dezelfde sleutel;

de structurele elementen van het versleutelingsalgoritme moeten ongewijzigd blijven;

extra bits die tijdens het versleutelingsproces in het bericht worden geïntroduceerd, moeten volledig en veilig in de cijfertekst worden verborgen;

de lengte van de cijfertekst moet gelijk zijn aan de lengte van de originele tekst;

er mogen geen eenvoudige en gemakkelijk vast te stellen afhankelijkheden bestaan ​​tussen de sleutels die opeenvolgend worden gebruikt in het versleutelingsproces;

elk van de vele mogelijke sleutels moet betrouwbare informatiebescherming bieden;

het algoritme moet zowel software- als hardware-implementatie mogelijk maken, terwijl het veranderen van de sleutellengte niet mag leiden tot een kwalitatieve verslechtering van het encryptie-algoritme.

Hoofdstuk 2. Protocollen voor cryptografische sleuteldistributie en protocollen voor elektronische handtekeningen.

Hoe complex en betrouwbaar cryptografische systemen ook zijn, hun zwakke punt in de praktische implementatie is het probleem van de sleuteldistributie. Om de uitwisseling van vertrouwelijke informatie tussen twee IP-subjecten mogelijk te maken, moet de sleutel door een van hen worden gegenereerd en vervolgens op een of andere manier, wederom vertrouwelijk, aan de ander worden overgedragen. Die. over het algemeen vereist het opnieuw overdragen van de sleutel het gebruik van een soort cryptosysteem.

Om dit probleem op te lossen zijn publieke sleutelsystemen voorgesteld op basis van de resultaten verkregen uit de klassieke en moderne algebra.

Hun essentie is dat elke geadresseerde van het informatiesysteem twee sleutels genereert die volgens een bepaalde regel met elkaar zijn verbonden. Eén sleutel wordt openbaar verklaard en de andere privé. De publieke sleutel wordt gepubliceerd en is beschikbaar voor iedereen die een bericht naar de ontvanger wil sturen. De geheime sleutel wordt geheim gehouden.

De originele tekst wordt gecodeerd met de publieke sleutel van de ontvanger en naar hem verzonden. De gecodeerde tekst kan in principe niet worden gedecodeerd door dezelfde platte tekst.


sleutel. Het ontsleutelen van een bericht is alleen mogelijk met behulp van een privésleutel, die alleen bekend is bij de ontvanger.

Cryptografische systemen met publieke sleutels maken gebruik van zogenaamde onomkeerbare of eenrichtingsfuncties, die de volgende eigenschap hebben: gegeven een waarde van x is het relatief eenvoudig om de waarde van f(x) te berekenen, maar als y=f(x), dan is er geen gemakkelijke manier om de waarde van x te berekenen.

De reeks klassen van onomkeerbare functies geeft aanleiding tot een grote verscheidenheid aan openbare sleutelsystemen. Niet elke onomkeerbare functie is echter geschikt voor gebruik in echte IC's.

09.07.2003

Wat is encryptie?

Encryptie wordt door de mensheid gebruikt vanaf het moment dat de eerste geheime informatie verscheen, d.w.z. informatie waartoe de toegang beperkt zou moeten worden. Dit was heel lang geleden - een van de beroemdste versleutelingsmethoden is bijvoorbeeld vernoemd naar Caesar, die, als hij het niet zelf uitvond, het vervolgens actief gebruikte (zie kader).

Cryptografie zorgt ervoor dat de betekenis van een bericht verborgen blijft en wordt onthuld door decodering met behulp van speciale algoritmen en sleutels. We begrijpen de sleutel als een specifieke geheime toestand van de parameters van de coderings- en decoderingsalgoritmen. Het kennen van de sleutel maakt het mogelijk om het geheime bericht te lezen. Zoals u hieronder zult zien, garandeert onwetendheid over de sleutel echter niet altijd dat het bericht niet door een vreemde kan worden gelezen.

Het proces waarbij een cijfer wordt gebroken zonder de sleutel te kennen, wordt cryptanalyse genoemd. De tijd die nodig is om een ​​cijfer te breken, wordt bepaald door de cryptografische sterkte ervan. Hoe groter het is, hoe ‘sterker’ het versleutelingsalgoritme is. Nog beter is het als het in eerste instantie helemaal onmogelijk is om erachter te komen of het resultaat van de hack haalbaar is.

Fundamentele moderne versleutelingsmethoden

Onder de verschillende versleutelingsmethoden kunnen de volgende hoofdmethoden worden onderscheiden:

  • Vervangings- of vervangingsalgoritmen - karakters van de brontekst worden vervangen door karakters van een ander (of hetzelfde) alfabet in overeenstemming met een vooraf bepaald schema, dat de sleutel van dit cijfer zal zijn. Bovendien wordt deze methode praktisch niet gebruikt in moderne cryptosystemen vanwege de extreem lage cryptografische sterkte.
  • Permutatie-algoritmen - karakters van de originele tekst worden verwisseld volgens een bepaald principe, namelijk de geheime sleutel. Het permutatiealgoritme zelf heeft een lage cryptografische sterkte, maar is als element opgenomen in veel moderne cryptosystemen.
  • Gamma-algoritmen - de karakters van de brontekst worden toegevoegd aan de karakters van een bepaalde willekeurige reeks. Het meest voorkomende voorbeeld is de codering van “gebruikersnaam.pwl”-bestanden, waarbij het Microsoft Windows 95-besturingssysteem wachtwoorden opslaat voor de netwerkbronnen van een bepaalde gebruiker (wachtwoorden voor inloggen op NT-servers, wachtwoorden voor inbelinternettoegang, enz.) .

Wanneer een gebruiker zijn wachtwoord invoert bij het inloggen op Windows 95, wordt er een gamma (altijd hetzelfde) gegenereerd met behulp van het RC4-coderingsalgoritme, dat wordt gebruikt om netwerkwachtwoorden te coderen. De eenvoud van wachtwoordselectie is in dit geval te wijten aan het feit dat Windows altijd de voorkeur geeft aan hetzelfde kleurenschema.

  • Algoritmen gebaseerd op complexe wiskundige transformaties van de brontekst volgens een bepaalde formule. Velen van hen gebruiken onopgeloste wiskundige problemen. Het RSA-versleutelingsalgoritme dat veel op internet wordt gebruikt, is bijvoorbeeld gebaseerd op de eigenschappen van priemgetallen.

Symmetrische en asymmetrische cryptosystemen

Laten we, voordat we verder gaan met individuele algoritmen, kort stilstaan ​​bij het concept van symmetrische en asymmetrische cryptosystemen. Het genereren van een geheime sleutel en het versleutelen van een bericht daarmee is slechts het halve werk. Maar hoe kan zo’n sleutel naar iemand worden gestuurd die hem moet gebruiken om het oorspronkelijke bericht te ontsleutelen? De overdracht van de encryptiesleutel wordt beschouwd als een van de belangrijkste problemen van cryptografie.

Hoewel het binnen het raamwerk van een symmetrisch systeem blijft (zo genoemd omdat dezelfde sleutel wordt gebruikt voor encryptie en decryptie), is het noodzakelijk om een ​​betrouwbaar communicatiekanaal te hebben voor het verzenden van de geheime sleutel. Maar zo’n kanaal is niet altijd beschikbaar, en daarom ontwikkelden de Amerikaanse wiskundigen Diffie, Hellman en Merkle in 1976 het concept van een publieke sleutel en asymmetrische encryptie. In dergelijke cryptosystemen is alleen de sleutel voor het versleutelingsproces publiekelijk beschikbaar, en is de ontsleutelingsprocedure alleen bekend bij de eigenaar van de geheime sleutel.

Als ik bijvoorbeeld wil dat er een bericht naar mij wordt verzonden, genereer ik openbare en privésleutels. Ik stuur het naar jou, jij codeert het bericht en stuurt het naar mij. Alleen ik kan het bericht ontsleutelen, aangezien ik de geheime sleutel aan niemand heb gegeven. Uiteraard zijn beide sleutels op een speciale manier met elkaar verbonden (op verschillende manieren in elk cryptosysteem), en de distributie van de publieke sleutel vernietigt de cryptografische kracht van het systeem niet.

Bij asymmetrische systemen moet aan de volgende eis worden voldaan: er is geen algoritme (of het is nog niet bekend) dat de originele tekst uit de cryptotekst en de publieke sleutel zou afleiden. Een voorbeeld van een dergelijk systeem is het bekende RSA-cryptosysteem.

RSA-algoritme

Het RSA-algoritme (na de eerste letters van de achternaam van de makers Rivest-Shamir-Adleman) is gebaseerd op de eigenschappen van priemgetallen (en zeer grote). Priemgetallen zijn getallen die geen andere delers hebben dan zijzelf en één. En coprime-getallen zijn die getallen die geen andere gemeenschappelijke delers hebben dan 1.

Laten we eerst twee zeer grote priemgetallen kiezen (grote priemgetallen zijn nodig om grote, sterke sleutels te construeren. Het Unix-programma ssh-keygen genereert bijvoorbeeld standaard sleutels van 1024 bits lang).

Laten we de parameter definiëren N als gevolg van vermenigvuldiging P En Q. Laten we een groot willekeurig getal kiezen en dit noemen D, en het moet coprime zijn met het resultaat van vermenigvuldiging (p -1)*(q -1).

Laten we een getal e vinden waarvoor de relatie waar is

(e*d) mod ((p -1)*(q -1)) = 1

(mod- rest van de deling, d.w.z. als e vermenigvuldigd met d gedeeld wordt door ((p -1)*(q -1)), dan is de rest 1).

De publieke sleutel bestaat uit een paar cijfers e en n, en gesloten - d en n.

Bij het versleutelen wordt de brontekst behandeld als een cijferreeks en voeren wij op elk cijfer een bewerking uit

C(i)= (M(i) e) mod n.

Het resultaat is de volgorde C(ik), die de cryptotekst zal vormen. Het decoderen van informatie vindt plaats volgens de formule

M(i) = (C(i) d) mod n.

Zoals u kunt zien, vereist decodering kennis van de geheime sleutel.

Laten we het met kleine aantallen proberen.

Laten we installeren p=3, q=7. Dan n=p*q=21. Kiezen D als 5. Uit de formule (e*5) mod 12=1 berekenen e=17. Openbare sleutel 17, 21 , geheim - 5, 21 .

Laten we de reeks "12345" coderen:

C(1)= 1 17 mod. 21= 1

C(2)= 2 17 mod. 21 =11

C(3)= 3 17 mod. 21= 12

C(4)= 4 17 mod. 21= 16

C(5)= 5 17 mod. 21= 17

Cryptotekst - 1 11 12 16 17.

Laten we de decodering controleren:

M(1)= 1 5 mod. 21= 1

M(2)= 11 5 mod. 21= 2

M(3)= 12 5 mod. 21= 3

M(4)= 16 5 mod. 21= 4

M(5)= 17 5 mod. 21= 5

Zoals u kunt zien, viel het resultaat samen.

Het RSA-cryptosysteem wordt veel gebruikt op internet. Wanneer u via SSL verbinding maakt met een beveiligde server, een WebMoney-certificaat op uw pc installeert of verbinding maakt met een externe server via Open SSH of SecureShell, gebruiken al deze programma's codering met openbare sleutels op basis van ideeën uit het RSA-algoritme. Is dit systeem werkelijk zo betrouwbaar?

RSA-hackwedstrijden

Sinds de oprichting is RSA voortdurend onderworpen aan brute-force-aanvallen. In 1978 publiceerden de auteurs van het algoritme een artikel waarin ze een string presenteerden die gecodeerd was met behulp van de methode die ze zojuist hadden uitgevonden. De eerste persoon die het bericht ontcijferde, kreeg een beloning van $ 100, maar hiervoor moest een getal van 129 cijfers in twee factoren worden verdeeld. Dit was de eerste wedstrijd waarin RSA werd gekraakt. Het probleem werd pas 17 jaar na de publicatie van het artikel opgelost.

De cryptografische kracht van RSA is gebaseerd op de veronderstelling dat het uiterst moeilijk, zo niet onmogelijk, is om de private sleutel van de publieke sleutel te onderscheiden. Om dit te doen, was het noodzakelijk om het probleem van het bestaan ​​​​van delers van een enorm geheel getal op te lossen. Tot nu toe heeft niemand het met behulp van analytische methoden opgelost en het RSA-algoritme kan alleen met brute kracht worden gekraakt. Strikt genomen is de bewering dat het factorisatieprobleem moeilijk is en dat het breken van het RSA-systeem moeilijk is, eveneens onbewezen.

Het nummer dat wordt verkregen als gevolg van de verwerking van de berichttekst door de hash-functie, wordt gecodeerd met behulp van het RSA-algoritme op de privésleutel van de gebruiker en samen met de brief en een kopie van de openbare sleutel naar de ontvanger gestuurd. De ontvanger voert met behulp van de openbare sleutel van de afzender dezelfde hashfunctie uit op het binnenkomende bericht. Als beide cijfers gelijk zijn, betekent dit dat het bericht echt is, maar als er minimaal één teken is gewijzigd, komen de cijfers niet overeen.

Een van de meest voorkomende e-mailclients in Rusland, het Bat!-programma, heeft ingebouwde mogelijkheden om digitale handtekeningen aan brieven toe te voegen (let op het menu-item Privacy bij het bewerken van een brief). Lees meer over deze techniek in het artikel (zie “PC World”, nr. 3/02).

Rijst. 3

Cryptografie

Cryptografie is de wetenschap van de principes, middelen en methoden voor het transformeren van informatie om deze te beschermen tegen ongeoorloofde toegang en vervorming. De laatste tijd ontwikkelt het zich heel, heel snel. Het is een nooit eindigende, spannende race die veel tijd en moeite vergt: cryptanalisten kraken algoritmen die tot voor kort standaard waren en veel gebruikt werden. Overigens hebben de wiskundigen Dan Goldston (VS) en Kem Ildirim (Türkiye) onlangs de eerste regelmaat in de verdeling van priemgetallen bewezen (dergelijke regelmaat was tot nu toe niet opgemerkt). Priemgetallen bevinden zich in bepaalde clusters op de getallenas, waardoor ze wat makkelijker te vinden zijn.

Wiskundig onderzoek over de hele wereld leidt voortdurend tot nieuwe ontdekkingen. Wie weet staan ​​we op het punt het RSA-algoritme of andere cryptosystemen te doorbreken op basis van onopgeloste wiskundige problemen.

Oleg Bunin- specialist in softwareontwikkeling voor grote internetprojecten, medewerker van het bedrijf Rambler, http://www..htm).

  • Inleiding tot cryptografie / Ed. V.V. Jasjtsjenko. M.: MTsNMO, 2000.
  • Nosov V. A. Een kort historisch overzicht van de ontwikkeling van cryptografie // Proceedings of the conference "Moscow University and the development of cryptography in Russia", MSU, 17-18 oktober 2002.
  • Salomaa A. Cryptografie met openbare sleutels. M., 1996.
  • Zimmerman F. PGP - encryptie met publieke sleutels voor iedereen.
  • Caesar-cijfersysteem

    Een voorbeeld van een vervangingsalgoritme is het Caesar-coderingssysteem. Deze methode is gebaseerd op het vervangen van elke letter van het bericht door een andere, door een vast aantal tekens van het origineel af te wijken. Probeer de kwatrijnen van Omar Khayyam te ontcijferen (invultijd - 10 minuten).

    Rlz yomeyz avbzhu iyzavlu, bzhschlu zhschezzhz zhuoschz, eysh yshchazhfo iyshchyvesh bshchizhv eesh zhschrschg: lf emrsyu ъzezeschg, ryu ryu rlz izishsch Yuklu K Duyo Izishchez.

    Heb je het gehaald? Hier is het antwoord:

    Om verstandig te leven moet je veel weten,

    Onthoud twee belangrijke regels om aan de slag te gaan:

    Je verhongert liever dan dat je iets eet

    En het is beter om alleen te zijn dan met zomaar iemand.

    Decoderingssleutel: schuif zeven tekens (neem de zevende) alfabetisch naar links. Het alfabet is voorzien van een lus. Hoofdlettergebruik is niet gevoelig.

    Windows en wachtwoorden

    Hoe codeert Windows wachtwoorden?

    Het systeem neemt het wachtwoord, converteert het naar hoofdletters, verkort het tot 14 tekens, verdeelt het vervolgens in twee helften van 7, codeert elk afzonderlijk en slaat het op die manier op, wat het hacken een beetje eenvoudiger maakt. Houd er overigens bij het bedenken van een wachtwoord rekening mee dat een combinatie langer dan 14 tekens weinig betekenis heeft.

    AES-wedstrijd (Advanced Encryption Standard).

    In de jaren 80 in de VS hebben ze een symmetrische encryptiestandaard voor intern gebruik aangenomen - DES ((Data Encryption Standard, er is een vergelijkbare standaard in Rusland). Maar in 1997, toen duidelijk werd dat de 56-bits DES-sleutel niet genoeg was voor een betrouwbare cryptosystem kondigde het American Standards Institute een competitie aan voor een nieuw standaardalgoritme. Uit 15 opties werd de beste gekozen: het Belgische algoritme Rijndael (de naam is samengesteld uit de namen van de auteurs - Rijmen en Daemen, gelezen als "Rijndael". Dit algoritme is al ingebouwd in verschillende cryptografische tools die door andere finalisten op de markt zijn gebracht. De winnaars van de wedstrijd waren MARS, RC6, Serpent, TwoFish. Al deze algoritmen bleken behoorlijk robuust en zijn met succes bestand tegen alle bekende cryptoanalysemethoden .

    Cryptografische hashfuncties

    Cryptografische hashfuncties converteren invoergegevens van elke grootte naar een tekenreeks met een vaste grootte. Het is uiterst moeilijk om voor hen te vinden:

    • twee verschillende datasets met hetzelfde transformatieresultaat (botsweerstand); het aantal rekenkundige bewerkingen dat nodig is om een ​​datablok te vinden dat ook een kort bericht voor de MD5-hashfunctie heeft, is bijvoorbeeld ongeveer 2 64;
    • invoerwaarde gebaseerd op een bekend hashresultaat (onomkeerbaarheid); voor MD5 is het geschatte aantal bewerkingen dat nodig is om het originele bericht te berekenen 2.128.