Cryptografie en de belangrijkste methoden voor het coderen van informatie.

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

Basisconcepten

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

C = Ek1(M)

M" = Dk2(C),

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

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

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

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

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

Symmetrische codering

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

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

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

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

Standaard GOST 28147-89

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

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

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

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

Het algoritme, gedefinieerd door GOST 28147-89, biedt vier werkingsmodi: eenvoudige vervanging, gamma, gamma met feedback en het genereren van imitatiebijlagen. Ze gebruiken dezelfde encryptietransformatie die hierboven is beschreven, maar omdat het doel van de modi verschillend is, wordt deze transformatie in elk van deze modi 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 32.

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

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

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

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

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

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

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

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

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

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

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

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

Codering en decodering in gammamodus

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

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

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

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

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

De cyclus herhaalt zich tot het laatste informatieblok. De resulterende 64-bits inhoud van de 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, aangezien de imitatiebijlage, net als elke controlesom, in de eerste plaats bedoeld is om te beschermen tegen onbedoelde vervorming van informatie. Ter bescherming tegen opzettelijke wijziging van gegevens worden andere cryptografische methoden gebruikt, voornamelijk een elektronische digitale handtekening.

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

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

AES-standaard

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

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

Het Rijndael-algoritme is niet vergelijkbaar met de meeste bekende symmetrische encryptie-algoritmen, waarvan de structuur het “Feistel-netwerk” wordt genoemd en vergelijkbaar is met de Russische GOST 28147-89. De 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 de binnenlandse encryptiestandaard vertegenwoordigt het Rijndael-algoritme een datablok in de vorm van een tweedimensionale byte-array met de grootte 4X4, 4X6 of 4X8 (het gebruik van verschillende vaste groottes van het gecodeerde informatieblok is toegestaan). Alle bewerkingen worden uitgevoerd op individuele bytes van de array, maar ook op onafhankelijke kolommen en rijen.

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


Rijst. 3. Operatie BS.

Rijst. 4. Operatie SR.

Rijst. 5. Operatie MC.

Het aantal encryptierondes (R) in het Rijndael-algoritme is variabel (10, 12 of 14 ronden) en afhankelijk 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. Allereerst biedt het een hoge coderingssnelheid op alle platforms: zowel software- als hardware-implementatie. Het onderscheidt zich door onvergelijkbaar betere mogelijkheden voor het parallelliseren van berekeningen vergeleken met andere algoritmen die aan de concurrentie zijn voorgelegd. Bovendien zijn de bronvereisten voor de werking ervan minimaal, wat belangrijk is bij gebruik op apparaten met beperkte computermogelijkheden.

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

Asymmetrische encryptie

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

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

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

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

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

RSA-algoritme

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

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

1

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

Uit de relatie wordt de publieke sleutel k1 berekend (k2*k1) = 1 mod F(N), en voor dit doel wordt het gegeneraliseerde Euclidische algoritme (algoritme voor het berekenen van de grootste gemene deler) gebruikt. Versleuteling van datablok M met behulp van het RSA-algoritme wordt als volgt uitgevoerd: C=M [tot de macht k1] mod N. Merk op dat, aangezien in een echt cryptosysteem dat RSA gebruikt, het getal k1 erg groot is (momenteel kan de afmeting oplopen tot 2048 bits), directe berekening van M [tot de macht k1] onwerkelijk. 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 ‘theoretisch’ nadeel is dat de cryptografische kracht van asymmetrische encryptie-algoritmen niet wiskundig is 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. Cryptografisch conversie-algoritme. - M.: Staatsnorm van de USSR, 1989.
  2. AES-algoritme: http://www.nist.gov/ae.
  3. 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! Wees niet bang, 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, "Kuznechik"
  • 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 3DES bekijken, of liever de meest nabije verwant DES (Data Encryption Standard), die, hoewel niet langer als zodanig gebruikt, de voorloper van 3DES is.

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.

Laten we eens kijken hoe het DES-coderingsalgoritme werkt. Om dit te doen, moet u de werking van het Feistel-netwerk onthouden. DES is een Feistel-netwerk van 16 ronden met symmetrische coderingssleutels. De lengte van het tekstblok is 64 bits, de lengte van de ronde sleutel is 48 bits. Laten we dus de belangrijkste stappen van DES-codering doornemen, waarbij we de harde wiskundige kant weglaten:

  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. Decodeert vervolgens 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 uiteraard niets gevonden, de aanklacht tegen de NSA werd ingetrokken en de resultaten van het onderzoek werden niettemin geheim gehouden. Kortom, in Amerika circuleren al lange tijd geruchten en speculaties 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.

Annotatie: Deze lezing heeft meerdere doelen. Laat het verschil zien tussen traditionele en moderne symmetrische sleutelcijfers. 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. Het grootste deel van dit hoofdstuk is gewijd aan het bespreken van de algemene ideeën van moderne blokcijfers, en slechts een klein deel is gewijd aan 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. Gemeenschappelijke waarden voor n zijn meestal 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 leesbare tekst en de cijfertekst een verschillend aantal eenheden kunnen hebben. 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), veranderen de bits alleen hun volgorde (verplaatsen), waarbij hetzelfde aantal tekens in het origineel en de cijfertekst behouden blijven. In beide gevallen is het aantal mogelijke n-bit leesbare teksten of cijferteksten 2n, omdat elk van de n bits die in een blok worden gebruikt een van de twee waarden kan hebben: 0 of 1,2 64 blokken van 64 bits om er één te vinden, waardoor gevoel. Als Eve 1 miljard blokken per seconde zou kunnen proberen, zou het honderden jaren duren voordat dit werk zou kunnen slagen.

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 is enkel (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.

In de 21e eeuw speelt cryptografie een serieuze rol in het digitale leven van moderne mensen. Laten we kort kijken naar manieren om informatie te coderen.

Cryptografie is niet zomaar een computerding

Hoogstwaarschijnlijk bent u al in aanraking gekomen met basiscryptografie en kent u misschien enkele versleutelingsmethoden. Het Caesarcijfer wordt bijvoorbeeld vaak gebruikt in educatieve kinderspellen.

ROT13 is een ander veelgebruikt type berichtversleuteling. Daarin wordt elke letter van het alfabet 13 posities verschoven, zoals weergegeven in de afbeelding:

Zoals u kunt zien, biedt dit cijfer geen echt betrouwbare informatiebeveiliging: het is een eenvoudig en begrijpelijk voorbeeld van het hele idee van cryptografie.

Tegenwoordig praten we het vaakst over cryptografie in de context van een bepaalde technologie. Hoe worden persoonlijke en financiële gegevens veilig verzonden wanneer we een online aankoop doen of bankrekeningen bekijken? Hoe kunt u gegevens veilig opslaan, zodat niemand zomaar uw computer kan openen, de harde schijf eruit kan halen en volledige toegang heeft tot alle informatie die erop staat? Deze en andere vragen zullen wij in dit artikel beantwoorden.

Cyberbeveiligingsdefinities en snelstartgids

Op het gebied van cyberbeveiliging zijn er een aantal dingen die gebruikers zorgen baren als het om gegevens gaat. Deze omvatten vertrouwelijkheid, integriteit en beschikbaarheid van informatie.

Vertrouwelijkheid– gegevens kunnen niet worden ontvangen of gelezen door ongeautoriseerde gebruikers.

Informatie-integriteit– vertrouwen dat de informatie 100% intact blijft en niet door een aanvaller wordt gewijzigd.

Beschikbaarheid van informatie– het verkrijgen van toegang tot gegevens wanneer dat nodig is.

In dit artikel wordt ook gekeken naar de verschillende vormen van digitale cryptografie en hoe deze kunnen helpen de hierboven genoemde doelen te bereiken.

Basiscoderingsmethoden:
  • Symmetrisch
  • Asymmetrisch
  • Hashing
  • Digitale handtekening

Symmetrische codering

Voordat we ingaan op het onderwerp, willen we eerst een eenvoudige vraag beantwoorden: wat wordt precies bedoeld met “encryptie”? Encryptie is de transformatie van informatie om deze te verbergen voor onbevoegde personen, terwijl geautoriseerde gebruikers er tegelijkertijd toegang toe krijgen.

Om gegevens correct te versleutelen en te ontsleutelen, hebt u twee dingen nodig: de gegevens en de decoderingssleutel. Bij gebruik van symmetrische encryptie is de sleutel voor het coderen en decoderen van gegevens dezelfde. Laten we een string nemen en deze versleutelen met Ruby en OpenSSL:

Robijn

require "openssl" require "pry" data_to_encrypt = "nu kun je mij lezen!" cipher = OpenSSL::Cipher.new("aes256") cipher.encrypt key = cipher.random_key iv = cipher.random_iv data_to_encrypt = cipher.update(data_to_encrypt) + cipher.final binding.pry true

vereist "openssl"

vereisen "wrikken"

cijfer = OpenSSL::Cijfer. nieuw("aes256")

cijfer versleutelen

sleutel = cijfer. willekeurige_sleutel

iv = cijfer. willekeurige_iv

data_to_encrypt = cijfer. update(data_to_encrypt) + cijfer. laatste

verbindend. wrikken

WAAR

Dit is wat het programma zal opleveren:

Houd er rekening mee dat de variabele data_to_encrypt, wat oorspronkelijk de regel was "nu kun je mij lezen!" Laten we het proces omkeren met behulp van de sleutel die oorspronkelijk in een variabele was opgeslagen sleutel.

Nadat we dezelfde sleutel hebben gebruikt die we hebben ingesteld voor codering, decoderen we het bericht en halen we de originele string op.

Laten we eens kijken naar andere versleutelingsmethoden.

Asymmetrische encryptie

Het probleem met symmetrische encryptie is dit: stel dat u gegevens via internet moet verzenden. Als dezelfde sleutel nodig is om gegevens te versleutelen en te ontsleutelen, moet de sleutel eerst worden verzonden. Dit betekent dat de sleutel via een onveilige verbinding moet worden verzonden. Maar op deze manier kan de sleutel worden onderschept en gebruikt door een derde partij. Om dit resultaat te voorkomen, werd asymmetrische encryptie uitgevonden.

Om asymmetrische codering te gebruiken, moet u twee wiskundig gerelateerde sleutels genereren. Eén daarvan is een privésleutel waar alleen jij toegang toe hebt. De tweede is open en openbaar beschikbaar.

Laten we eens kijken naar een voorbeeld van communicatie waarbij gebruik wordt gemaakt van asymmetrische encryptie. Daarin sturen de server en de gebruiker berichten naar elkaar. Elk van hen heeft twee sleutels: privé en openbaar. Eerder werd gezegd dat de sleutels met elkaar verbonden zijn. Die. Een bericht dat is gecodeerd met een privésleutel kan alleen worden ontsleuteld met behulp van een aangrenzende openbare sleutel. Om de communicatie te starten, moet u daarom openbare sleutels uitwisselen.

Maar hoe begrijp je dat de publieke sleutel van de server bij deze specifieke server hoort? Er zijn verschillende manieren om dit probleem op te lossen. De meest gebruikelijke methode (en die ook op internet wordt gebruikt) is het gebruik van een publieke sleutelinfrastructuur (PKI). In het geval van websites is er sprake van een Certificate Authority, die een directory heeft met alle websites waaraan certificaten en publieke sleutels zijn uitgegeven. Wanneer u verbinding maakt met een website, wordt de openbare sleutel eerst geverifieerd door een certificeringsinstantie.

Laten we een paar openbare en privésleutels maken:

Robijn

require "openssl" require "pry" data_to_encrypt = "nu kun je mij lezen!" key = OpenSSL::PKey::RSA.new(2048) binding.pry waar

vereist "openssl"

vereisen "wrikken"

data_to_encrypt = "nu kun je mij lezen!"

sleutel = OpenSSL::PKey::RSA. nieuw (2048)

verbindend. wrikken

WAAR

Het zal blijken:

Houd er rekening mee dat de privésleutel en de openbare sleutel afzonderlijke entiteiten zijn met verschillende identificatiegegevens. Gebruik makend van #private_encrypt, kun je een string versleutelen met een privésleutel en met behulp van #public_decrypt– ontsleutel het bericht:

Hashing van informatie

Hashing is, in tegenstelling tot symmetrische en asymmetrische encryptie, een eenrichtingsfunctie. Het is mogelijk om van sommige gegevens een hash te maken, maar er is geen manier om het proces om te keren. Dit maakt hashen geen erg handige manier om gegevens op te slaan, maar het is wel geschikt om de integriteit van sommige gegevens te controleren.

De functie neemt wat informatie als invoer en voert een schijnbaar willekeurige reeks uit die altijd dezelfde lengte zal hebben. Een ideale hashfunctie levert unieke waarden op voor verschillende inputs. Dezelfde invoer zal altijd dezelfde hash produceren. Daarom kan hashing worden gebruikt om de gegevensintegriteit te verifiëren.

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.
  • Herschikkingsalgoritmen - 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.

Wanneer 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 achternamen 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 wordt gedeeld 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. Publieke 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 doorbreken van het RSA-systeem moeilijk is, ook niet bewezen.

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 (Turkije) 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 YOMEIZ AVBZHU IYZAVLU, BZHSCHLU ZHSCHEZZHZ ZHUOSCHZ, EYSH YSHCHAZhFO ISHCHYVESH BSHCHIZHV EESH ZHSCHRSCHG: LF EMRSYU ЪZEZESCHG, RYYO RLZ IZISHCHEZ YUKLU, IN EMRSYU BMEU ZEVZH, RYO OYYUKLU 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 bestaat 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 cryptanalysemethoden .

    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.