DES-algoritme en zijn varianten. DES- en AES-coderingsalgoritmen

Het DES-algoritme is zeer geschikt voor zowel codering als gegevensauthenticatie. Hiermee kunt u 64-bits leesbare tekstinvoer direct converteren naar 64-bits cijfertekstuitvoer, maar gegevens zijn zelden beperkt tot 64 bits.

Om DES voor een verscheidenheid aan cryptografische taken te gebruiken, zijn vier bedieningsmodi ontwikkeld:

· Elektronisch codeboek ECB (Electronic Code Book);

· Cipher Block Chaining (CBC);

· Feedback op cijfertekst CFB (Cipher Feed Back);

· Feedback op de output van OFB (Output Feed Back).

Elektronische codeboekmodus

Een lang bestand is verdeeld in 64-bits segmenten (blokken) van 8 bytes. Elk van deze blokken wordt onafhankelijk versleuteld met dezelfde versleutelingssleutel (Figuur 3.6).

Het belangrijkste voordeel is het gemak van implementatie. Het nadeel is de relatief zwakke weerstand tegen ervaren cryptanalisten. Door het vaste karakter van de codering, met een beperkte bloklengte van 64 bits, is het mogelijk om cryptanalyse "met een woordenboek" uit te voeren. Een blok van deze grootte kan in het bericht worden herhaald vanwege de grote redundantie in de natuurlijke taaltekst.

Figuur 3.6 - Schema van het DES-algoritme in de elektronische codeboekmodus

Dit resulteert in identieke platte tekstblokken in het bericht die worden weergegeven door identieke cijfertekstblokken, wat de cryptoanalist enige informatie geeft over de inhoud van het bericht.

Modus "Aaneenschakeling van cijferblokken"

In deze modus wordt het bronbestand M verdeeld in 64-bits blokken: M = M 1 M 2 ... M n. Het eerste blok M 1 wordt modulo 2 toegevoegd met een 64-bit initiële vector IV, die dagelijks verandert en geheim wordt gehouden (Figuur 3.7). Het resulterende bedrag wordt vervolgens versleuteld met een DES-sleutel die bekend is bij zowel de afzender als de ontvanger van de informatie. Het resulterende 64-bits cijfer C1 wordt modulo 2 toegevoegd aan het tweede tekstblok, het resultaat wordt versleuteld en het tweede 64-bits cijfer C2 wordt verkregen, enzovoort. De procedure wordt herhaald totdat alle tekstblokken zijn verwerkt.

Dus voor alle i = 1 ... n (n is het aantal blokken), wordt het encryptieresultaat С i als volgt bepaald: С i =

DES (М i  C i –1), waarbij С 0 = IV de initiële cijferwaarde is die gelijk is aan de initiële vector (initialisatievector).

Het is duidelijk dat het laatste 64-bits blok cijfertekst een functie is van de geheime sleutel, de seed-vector en elke bit

Figuur 3.7 - Schema van het DES-algoritme in de modus van aaneenschakeling van cijferblokken

duidelijke tekst, ongeacht de lengte. Dit blok cijfertekst wordt berichtverificatiecode (CAS) genoemd.


De CAS-code kan eenvoudig worden geverifieerd door de ontvanger die in het bezit is van de geheime sleutel en seed-vector door de procedure van de afzender te herhalen. Een buitenstaander kan echter geen CAS genereren die door de ontvanger als echt zou worden beschouwd om deze aan het valse bericht toe te voegen, of het CAS scheiden van het echte bericht voor gebruik met een gewijzigd of vals bericht.

Het voordeel van deze modus is dat er geen opeenhoping van transmissiefouten mogelijk is.

Blok M i is een functie van alleen C i –1 en C i. Daarom zal een transmissiefout resulteren in het verlies van slechts twee blokken van de originele tekst.

Coderingsfeedbackmodus

In deze modus kan de blokgrootte afwijken van 64 bits (Figuur 3.8). Het te versleutelen (ontsleutelen) bestand wordt gelezen in opeenvolgende blokken van k bits lang (k = 1 ... 64).

Het invoerblok (64-bits schuifregister) bevat aanvankelijk een rechts uitgelijnde initialisatievector.

Stel dat we als resultaat van het opsplitsen in blokken, n blokken van elk k bits lang krijgen (de rest wordt aangevuld met nullen of spaties). Dan voor elke i = 1 ... n het blok cijfertekst

С ik = M ik  P ik –1,

waarbij R i – 1 staat voor de meest significante k bits van het vorige versleutelde blok.

Het schuifregister wordt bijgewerkt door zijn meest significante k bits te wissen en Ci naar het register te schrijven. Herstel van versleutelde gegevens is ook relatief eenvoudig: Р i –1 en С i worden op dezelfde manier berekend en

М ik = С ik  Р ik –1.


Figuur 3.8 - Schema van het DES-algoritme in de cijfertekst-feedbackmodus

Uitgangsfeedbackmodus:

Deze modus gebruikt ook een variabele blokgrootte en een schuifregister, geïnitialiseerd op dezelfde manier als in de CFB-modus, namelijk het invoerblok bevat eerst een initialisatievector IV, rechts uitgelijnd (Figuur 3.9). In dit geval is het voor elke datacoderingssessie noodzakelijk om een ​​nieuwe beginstatus van het register te gebruiken, die in leesbare tekst over het kanaal moet worden verzonden.

M = M 1 M 2 ... M n.

Voor alle i = 1 ... n

Met i = M ik  P ik,

waarbij Р i de meest significante k bits van de DES-bewerking zijn (С i –1).

Het verschil met de cijfertekst-feedbackmodus is de schuifregister-updatemethode.

Dit wordt gedaan door de meest significante k bits weg te laten en Pi aan de rechterkant toe te voegen.

Afbeelding 3.9 - Schema van DES-algoritme in uitgangsfeedbackmodus

3.3. Toepassingsgebieden van het DES-algoritme

Elk van de beschouwde modi (ECB, CBC, CFB, OFB) heeft zijn eigen voor- en nadelen, die de toepassingsgebieden bepalen.

De ECB-modus is zeer geschikt voor het versleutelen van sleutels: de CFB-modus is meestal bedoeld voor het versleutelen van individuele karakters, en de OFB-modus wordt vaak gebruikt voor het versleutelen in satellietcommunicatiesystemen.

CBC- en CFB-modi zijn geschikt voor gegevensauthenticatie. Met deze modi kunt u het DES-algoritme gebruiken om:

· Interactieve encryptie tijdens gegevensuitwisseling tussen de terminal en de hostcomputer;

· Versleuteling van een cryptografische sleutel in de praktijk van geautomatiseerde sleuteldistributie;

· Versleuteling van bestanden, mail, satellietgegevens en andere praktische taken.

Oorspronkelijk was de DES-standaard bedoeld voor het versleutelen en ontsleutelen van computergegevens. De toepassing ervan is echter veralgemeend om authenticatie te omvatten.

In automatische gegevensverwerkingssystemen kan een persoon de gegevens niet inzien om vast te stellen of er wijzigingen in zijn aangebracht. Met de enorme hoeveelheden gegevens die door moderne verwerkingssystemen stromen, zou het bekijken te lang duren. Bovendien is gegevensredundantie mogelijk niet voldoende om fouten te detecteren. Zelfs in gevallen waarin menselijke waarneming mogelijk is, kunnen de gegevens zodanig worden gewijzigd dat het voor een persoon erg moeilijk is om deze wijzigingen te detecteren. "Do" kan bijvoorbeeld worden vervangen door "do not", "$ 1900" - door "$ 9100". Zonder aanvullende informatie kan een persoon bij het bekijken de gewijzigde gegevens gemakkelijk als echt beschouwen. Dergelijke gevaren kunnen zelfs bestaan ​​bij het gebruik van gegevenscodering. Daarom is het wenselijk om een ​​automatisch middel te hebben om opzettelijke en onopzettelijke gegevenswijzigingen te detecteren.

Gewone codes die fouten detecteren zijn onbruikbaar, want als het algoritme voor het genereren van de code bekend is, kan de tegenstander de juiste code bedenken na het aanbrengen van wijzigingen in de gegevens. Met behulp van het DES-algoritme kan echter een cryptografische controlesom worden gegenereerd die bescherming kan bieden tegen zowel onbedoelde als opzettelijke, maar ongeoorloofde wijzigingen aan gegevens.

Dit proces beschrijft de standaard voor computergegevensauthenticatie (FIPS 113). De essentie van de standaard is dat gegevens worden versleuteld in de ciphertext feedback-modus (CFB-modus) of in de cipher block concatenation-modus (CBC-modus), waardoor het uiteindelijke cipher-blok wordt verkregen, dat een functie is van alle bits van de leesbare tekst. Daarna kan het bericht, dat de leesbare tekst bevat, worden verzonden met gebruikmaking van het berekende laatste cijferblok dat als cryptografische controlesom dient.

Dezelfde gegevens kunnen worden beveiligd met zowel codering als authenticatie. De gegevens worden beschermd tegen vertrouwdheid met encryptie en wijzigingen worden gedetecteerd door middel van authenticatie. Het authenticatie-algoritme kan zowel op platte tekst als op cijfertekst worden toegepast. Bij financiële transacties, waarbij in de meeste gevallen zowel encryptie als authenticatie zijn geïmplementeerd, geldt dit laatste voor open

mijn tekst.

Versleuteling en authenticatie worden gebruikt om gegevens die op een computer zijn opgeslagen te beschermen. Op veel computers zijn wachtwoorden onomkeerbaar versleuteld en opgeslagen in het geheugen van de machine. Wanneer de gebruiker toegang krijgt tot de computer en het wachtwoord invoert, wordt het wachtwoord gecodeerd en vergeleken met de opgeslagen waarde. Als beide versleutelde waarden hetzelfde zijn, krijgt de gebruiker toegang tot de machine, anders volgt er een storing.

Het is niet ongebruikelijk dat een gecodeerd wachtwoord wordt gegenereerd met behulp van het DES-algoritme, waarbij wordt aangenomen dat de sleutel gelijk is aan het wachtwoord en dat de leesbare tekst de identificatiecode van de gebruiker is.

Het DES-algoritme kan ook computerbestanden coderen voor opslag.

Een van de belangrijkste toepassingen algoritme DES is een bescherming van berichten van het elektronische betalingssysteem (ESP) bij transacties met een brede klantenkring en tussen banken.

Het DES-algoritme is geïmplementeerd in geldautomaten, POS-terminals, werkstations en hoofdcomputers. Het scala aan gegevens dat het beschermt is zeer breed - van betalingen van $ 50 tot overschrijvingen van vele miljoenen dollars. Dankzij de flexibiliteit van het basis-DES-algoritme kan het worden gebruikt in een breed scala aan toepassingen voor het elektronische betalingssysteem.

DES(Data Encryption Standard) - Symmetrisch coderingsalgoritme, waarbij één sleutel wordt gebruikt voor zowel codering als decodering van gegevens. DES is ontwikkeld door IBM en in 1977 door de Amerikaanse overheid goedgekeurd als officiële standaard (FTPS 46-3). DES heeft 64-bits blokken en een 16-ronde Feistel-netwerkstructuur; het gebruikt een 56-bits sleutel voor codering. Het algoritme gebruikt een combinatie van niet-lineaire (S-boxes) en lineaire (permutaties E, IP, IP-1) transformaties. Voor DES worden verschillende modi aanbevolen:
  • elektronische codeboekmodus (ECB - Elektronisch codeboek),
  • blokketenmodus (CBC - Cipher Block Chaining),
  • Cipher Feed Back-modus (CFB),
  • output feedback modus (OFB - Output Feedback).

    Blokcijfer

    De invoergegevens voor het blokcijfer zijn een blok van n bits en een sleutel van k-bits. Aan de uitgang wordt, na het toepassen van de encryptietransformatie, een n-bit versleuteld blok verkregen, en onbeduidende verschillen in de invoergegevens leiden meestal tot een significante verandering in het resultaat. Blokcoderingen worden geïmplementeerd door herhaaldelijk enkele basistransformaties toe te passen op blokken van de brontekst.
    Basis conversies:
  • Complexe transformatie op een lokaal deel van het blok.
  • Eenvoudige ombouw tussen blokdelen. Aangezien de transformatie blok voor blok wordt uitgevoerd, als een aparte stap, is het opdelen van de brongegevens in blokken van de vereiste grootte vereist. Tegelijkertijd moeten ze, ongeacht het formaat van de brongegevens, of het nu tekstdocumenten, afbeeldingen of andere bestanden zijn, in een binaire vorm worden geïnterpreteerd en pas daarna in blokken worden verdeeld. Al het bovenstaande kan worden uitgevoerd door software en apparaten.

    Feistel Netwerk Transformeert

    Dit is een transformatie over vectoren (blokken) die de linker- en rechterhelften van het schuifregister vertegenwoordigen. DES gebruikt voorwaartse Feistel-transformatie in codering (zie figuur 1) en omgekeerde Feistel-transformatie naar decodering (zie figuur 2).

    DES-coderingsschema


    De originele tekst is een blok van 64 bits.
    De cijfertekst is een blok van 64 bits.

    Het coderingsproces bestaat uit een initiële permutatie, 16 coderingscycli en een uiteindelijke permutatie.
    Overweeg een gedetailleerd diagram van het DES-algoritme:
    L i R i = 1,2 \ ldots Linker- en rechterhelft van een 64-bits blok L i R i
    k i - 48-bits sleutels
    f - coderingsfunctie
    IP - initiële permutatie
    IP -1 is de laatste permutatie. Volgens de tabel zijn de eerste 3 bits van het resulterende IP (T)-blok na de initiële permutatie van IP bits 58, 50, 42 van het invoerblok T, en de laatste 3 bits zijn bits 23, 15, 7 van de invoer blok. Verder neemt het 64-bits IP (T)-blok deel aan 16-cycli van de Feistel-transformatie.

    16 cycli van Feistel-transformatie:

    Splits IP (T) in twee delen L 0, R 0, waarbij L 0, R 0 - respectievelijk 32 bits van hoge orde en 32 bits van lage orde van het T0-blok IP (T) = L 0 R 0

    Laat T i -1 = L i -1 R i -1 resultaat van (i-1) iteratie, dan wordt het resultaat van de i-de iteratie T i = L i R i bepaald:

    L ik = R ik - 1 De linkerhelft van Li is gelijk aan de rechterhelft van de vorige vector L i - 1 R i - 1. En de rechter helft van R i is de bit-optelling van L i - 1 en f (R i - 1, k i) modulo 2.

    In de Feistel-transformatie met 16 cycli speelt de functie f de rol van encryptie. Laten we de functie f in detail bekijken.

    De argumenten voor f zijn de 32-bits vector Ri - 1, 48-bits sleutel ki, die het resultaat zijn van het transformeren van de 56-bits originele cijfersleutel k.

    Om de functie f te berekenen, worden de uitbreidingsfunctie E, de transformatie S, bestaande uit 8 transformaties van S-boxen, en de permutatie P. gebruikt.

    Functie E breidt 32 bit vector R i - 1 uit tot 48 bit vector E (R i - 1) door enkele bits van R i - 1 te dupliceren, terwijl de volgorde van bits van vector E (R i - 1) wordt getoond in Tafel 2. De eerste drie bits van de vector E (R i - 1) zijn bits 32, 1, 2 van de vector R i -1. Tabel 2 laat zien dat bits 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29, 32 worden gedupliceerd. De laatste 3 bits van vector E (Ri - 1) zijn bits 31, 32, 1 van vector R i - 1. Het blok E (R i -1) verkregen na de permutatie wordt modulo 2 toegevoegd met de toetsen k i en vervolgens weergegeven als acht opeenvolgende blokken B 1, B 2, ... B 8.
    E (R i - 1) = B 1 B 2 ... B 8
    Elke Bj is een blok van 6 bits. Verder wordt elk van de blokken Bj omgezet in een 4-bits blok B "j met behulp van transformaties Sj. De transformaties Sj worden bepaald door Tabel 3. Stel dat B3 = 101111 en we willen B" 3 vinden. De eerste en laatste bits van B 3 zijn binaire notatie van het getal a, 0 De waarde van de functie f (R i - 1, ki) (32 bits) wordt verkregen door de permutatie P toegepast op het 32-bits blok B "1 B" 2 ... B "8. P wordt gegeven door Tabel 4.
    f (R i - 1, k i) = P (B "1 B" 2 ... B "8)
    Volgens tabel 4 zijn de eerste vier bits van de resulterende vector na de actie van de functie f bits 16, 7, 20, 21 van de vector B "1 B" 2 ... B "8

    Sleutels genereren k i.
    Sleutels k i worden op deze manier verkregen uit de initiële sleutel k (56 bits = 7 bytes of 7 tekens in ASCII). Acht bits gevonden op posities 8, 16, 24, 32, 40, 48, 56, 64 worden toegevoegd aan de sleutel k zodat elke byte een oneven aantal enen bevat. Dit wordt gebruikt om fouten in de uitwisseling en opslag van sleutels te detecteren. Permuteer vervolgens de uitgebreide sleutel (behalve de toegevoegde bits 8, 16, 24, 32, 40, 48, 56, 64). Een dergelijke permutatie is gedefinieerd zoals in Tabel 5.

    Deze permutatie wordt gedefinieerd door twee blokken Co en Do van elk 28 bits. De eerste 3 bits van Co zijn bits 57, 49, 41 van de uitgebreide sleutel. En de eerste drie bits van Do zijn bits 63, 55, 47 van de uitgebreide sleutel. C i, D i i = 1,2,3 ... worden verkregen uit C i - 1, D i - 1 door een of twee cyclische verschuivingen naar links volgens tabel 6.

    De sleutel ki, i = 1, ... 16 bestaat uit 48 bits geselecteerd uit de bits van de vector C i D i (56 bits) volgens Tabel 7. De eerste en tweede bits ki zijn bits 14, 17 van de vector C i D i

    De uiteindelijke permutatie IP - 1 werkt op T 16 en wordt gebruikt om de positie te herstellen. Het is het omgekeerde van IP-permutatie. De uiteindelijke permutatie wordt bepaald door Tabel 8.
    DES-gebruiksmodi DES kan in vier modi worden gebruikt.

  • Elektronisch codeboek (ECB)-modus: typisch gebruik van DES als blokcijfer (zie afbeelding 7).
  • Cipher Block Chaining-modus (zie Fig. 8). Elk opeenvolgend blok C i i> = 1, voordat encryptie wordt toegevoegd modulo 2 met het volgende blok platte tekst M i + 1. Vector Co is een initiële vector, deze verandert dagelijks en wordt geheim gehouden.
  • Cipher Feed Back (CFB) modus (zie Fig. 9). In de CFB-modus wordt een blok "gamma" gegenereerd Z 0, Z 1, ... Z i = DESk (C i - 1). De initiële vector Co wordt geheim gehouden.
  • Output Feed Back (OFB) modus (zie Fig. 10). In OFB-modus wordt een blok "gamma" gegenereerd Z 0, Z 1, ..., i> = 1
  • ECB-modus is eenvoudig te implementeren, maar kritische analyse is mogelijk
  • In ECB- en OFB-modi leidt vervorming tijdens verzending van één 64-bits blok cijfertekst Ci tot vervorming na decodering van alleen het corresponderende open blok Mi, daarom worden dergelijke modi gebruikt voor verzending via communicatiekanalen met een groot aantal vervormingen.
  • In de CBC- en CFB-modi leidt vervorming tijdens verzending van één blok cijfertekst Ci tot vervorming bij de ontvanger van niet meer dan twee leesbare tekstblokken M i, M i + 1. Een wijziging in Mi leidt tot een wijziging in alle andere blokken Mi + 1, M i + 2 ... Deze eigenschap wordt gebruikt om een ​​berichtauthenticatiecode te genereren.
  • annotatie: Een van de meest bekende cryptografische systemen met privésleutels is DES - Data Encryption Standard. Dit systeem kreeg als eerste de status van staatsnorm op het gebied van data-encryptie. En hoewel de oude Amerikaanse standaard DES inmiddels zijn officiële status heeft verloren, verdient dit algoritme toch aandacht bij het bestuderen van cryptografie. Daarnaast wordt in deze lezing uitgelegd wat dubbele DES is, een meet-in-the-middle-aanval, en hoe je dit kunt oplossen. In dezelfde lezing wordt kort ingegaan op de nieuwe Amerikaanse standaard voor blokcijfers - het Rijndael-algoritme.

    Het doel van de lezing: Laat de leerling kennismaken met de basisprincipes van het DES-coderingsalgoritme.

    Basis informatie

    Een van de meer bekende cryptografische systemen met privésleutels is: DES - Standaard voor gegevenscodering... Dit systeem kreeg als eerste de status van staatsnorm op het gebied van data-encryptie. Het is ontwikkeld door specialisten van de firma IBM en is in 1977 in de VS in werking getreden. Algoritme DES veel gebruikt voor het opslaan en overbrengen van gegevens tussen verschillende computersystemen; in postsystemen, elektronische tekensystemen en elektronische uitwisseling commerciële informatie... Standaard DES zowel software als hardware geïmplementeerd. Bedrijven uit verschillende landen hebben een massaproductie van digitale apparaten gelanceerd met behulp van: DES om gegevens te versleutelen. Alle apparaten zijn geslaagd voor de verplichte certificering voor naleving van de norm.

    Ondanks het feit dat dit systeem al enige tijd niet de status van een staatsstandaard heeft, wordt het nog steeds veel gebruikt en verdient het aandacht bij het bestuderen van private key block ciphers.

    Sleutellengte in het algoritme DES is 56 bits. Het is met dit feit dat de belangrijkste controverse met betrekking tot het vermogen DES verschillende aanvallen weerstaan. Zoals u weet, kan elk blokcijfer met een privésleutel worden verbroken door alle mogelijke toetscombinaties te proberen. Met een sleutellengte van 56 bits zijn 2 56 verschillende sleutels mogelijk. Als een computer in één seconde 1.000.000 sleutels opsomt (wat ongeveer gelijk is aan 2 20), dan duurt het 2 36 seconden om alle 2 56 sleutels te doorlopen, of iets meer dan tweeduizend jaar, wat natuurlijk onaanvaardbaar is voor indringers.

    Er zijn echter duurdere en snellere computersystemen mogelijk dan Persoonlijke computer... Als u bijvoorbeeld een miljoen processors kunt combineren voor parallel computing, wordt de maximale sleutelselectietijd teruggebracht tot ongeveer 18 uur. Deze tijd is niet te lang, en een cryptanalist die is uitgerust met zo'n dure techniek kan een met DES versleutelde aanval binnen een redelijke tijdspanne uitvoeren.

    Tegelijkertijd kan worden opgemerkt dat het systeem DES kan goed worden gebruikt in kleine tot middelgrote toepassingen voor het versleutelen van gegevens met weinig waarde. Voor encryptie van gegevens van nationaal belang of significant commercieel waardesysteem DES op dit moment natuurlijk niet worden gebruikt. In 2001, na een speciaal aangekondigde wedstrijd in de Verenigde Staten, werd een nieuwe standaard voor een blokcijfer aangenomen, genaamd AES (Advanced Encryption Standard), die was gebaseerd op het cijfer Rijndael ontwikkeld door Belgische specialisten. Dit cijfer wordt aan het einde van de lezing besproken.

    Belangrijkste instellingen DES: blokgrootte 64 bits, sleutellengte 56 bits, aantal ronden - 16. DES is een klassiek Feistel-net met twee takken. Het algoritme zet een 64-bits invoerblok met gegevens in verschillende ronden om in een 64-bits uitvoerblok. Standaard DES is gebaseerd op het gecombineerde gebruik van permutatie, vervanging en gaming. De versleutelde gegevens moeten in binaire vorm zijn.

    Encryptie

    Algemene structuur DES wordt getoond in Fig. 4.1. Het coderingsproces voor elk 64-bits blok originele gegevens kan in drie fasen worden verdeeld:

    1. initiële voorbereiding van het datablok;
    2. 16 ronden van de "hoofdlus";
    3. definitieve verwerking van het datablok.

    In de eerste fase, initiële permutatie Een 64-bits brontekstblok, waarbij de bits op een bepaalde manier worden herschikt.

    In de volgende (hoofd)fase wordt het blok verdeeld in twee delen (takken), elk 32 bits. De rechtertak wordt getransformeerd met behulp van een functie F en de bijbehorende gedeeltelijke sleutel verkregen van de hoofdcoderingssleutel met behulp van een speciaal algoritme voor sleutelconversie. Vervolgens worden gegevens uitgewisseld tussen de linker- en rechtertak van het blok. Dit wordt 16 keer herhaald in een lus.

    Ten slotte wordt in de derde fase het resultaat dat na zestien stappen van de hoofdlus is verkregen, opnieuw gerangschikt. Deze permutatie is het tegenovergestelde van de initiële permutatie.


    Rijst. 4.1.

    Laten we alle stadia van cryptografische transformatie in meer detail bekijken volgens de standaard DES.

    In de eerste stap wordt het 64-bits blok originele gegevens onderworpen aan een initiële permutatie. In de literatuur wordt deze operatie soms "whitening" genoemd. Tijdens de initiële permutatie worden de bits van het datablok op een bepaalde manier opnieuw gerangschikt. Deze bewerking geeft een zekere "willekeurigheid" aan het oorspronkelijke bericht, waardoor de mogelijkheid van het gebruik van cryptanalyse door statistische methoden wordt verkleind.

    Gelijktijdig met de initiële permutatie van het datablok wordt een initiële permutatie van 56 bits van de sleutel uitgevoerd. Van afb. 4.1. men kan zien dat in elk van de ronden de corresponderende 48-bits partiële sleutel Ki wordt gebruikt. Sleutels Ki worden verkregen volgens een bepaald algoritme, waarbij elk van de bits van de initiële sleutel meerdere keren wordt gebruikt. In elke ronde wordt de 56-bits sleutel gesplitst in twee 28-bits helften. Vervolgens worden de helften een of twee bits naar links verschoven, afhankelijk van het rondenummer. Na de shift worden 48 van de 56 bits op een bepaalde manier geselecteerd. Aangezien dit niet alleen een subset van de bits selecteert, maar ook hun volgorde verandert, wordt deze bewerking "permutatie met compressie" genoemd. Het resultaat is een set van 48 bits. Gemiddeld wordt elk bit van de originele 56-bits sleutel gebruikt in 14 van de 16 subsleutels, hoewel niet alle bits hetzelfde aantal keren worden gebruikt.

    Vervolgens wordt de belangrijkste transformatiecyclus uitgevoerd, georganiseerd volgens het Feistel-netwerk en bestaande uit 16 identieke rondes. In dit geval wordt in elke ronde (Fig. 4.2) een tussenliggende 64-bits waarde verkregen, die vervolgens in de volgende ronde wordt verwerkt.


    Rijst. 4.2.

    De linker- en rechtertakken van elke tussenliggende waarde worden behandeld als afzonderlijke 32-bits waarden, aangeduid met L en R.

    Eerst wordt de rechterkant van het blok Ri uitgebreid tot 48 bits met behulp van een tabel die de permutatie plus de 16 bit-extensie definieert. Met deze bewerking wordt de grootte van de rechterhelft aangepast aan de sleutelgrootte voor de XOR-bewerking. Bovendien neemt door deze operatie de afhankelijkheid van alle bits van het resultaat van de bits van de originele data en de sleutel sneller toe (dit wordt het "lawine-effect" genoemd). Hoe meer het lawine-effect zich manifesteert bij het gebruik van een of ander versleutelingsalgoritme, hoe beter.

    Na het uitvoeren van de expansiepermutatie wordt de resulterende 48-bits waarde XORed met de 48-bits subsleutel Ki. Vervolgens wordt de resulterende 48-bits waarde toegevoerd aan de ingang van het substitutieblok S (uit het Engels. vervanging - vervanging), het resultaat wat een 32-bits waarde is. Er wordt gewisseld in acht wisselboxen of acht S-boxen. Als je dit doet, ziet DES er op papier behoorlijk ingewikkeld uit, laat staan ​​de software-implementatie ervan! Ontwikkel een correct en optimaal werkend programma geheel volgens DES, waarschijnlijk kunnen alleen ervaren programmeurs het. Sommige problemen doen zich voor bij de implementatie van software, zoals initiële permutatie of uitbreidingspermutatie. Deze moeilijkheden zijn te wijten aan het feit dat het oorspronkelijk was gepland om te implementeren DES alleen hardwarematig. Alle bewerkingen die in de standaard worden gebruikt, kunnen eenvoudig worden uitgevoerd door hardware-eenheden en er zijn geen problemen met de implementatie. Enige tijd na de publicatie van de standaard besloten softwareontwikkelaars echter om niet aan de kant te blijven staan ​​en ook encryptiesystemen te gaan maken. Verder DES geïmplementeerd in zowel hardware als software.

    Er zijn meer dan 30 jaar verstreken sinds DES werd aangenomen als de Amerikaanse coderingsstandaard. DES is het coderingsalgoritme met de rijkste en meest interessante geschiedenis.

    De geschiedenis van het ontstaan ​​van het algoritme

    Een van de beroemdste cryptologen ter wereld, Bruce Schneier, beschreef in zijn beroemde boek "Applied Cryptography" de problemen van gebruikers van informatiebeveiligingstools in de vroege jaren '70. XX eeuw (we hebben het natuurlijk over gebruikers aan de andere kant van het "IJzeren Gordijn"):

    P er was geen algemeen aanvaarde standaard voor data-encryptie, of gewoon veelgebruikte algoritmen voor het beschermen van informatie, dus er was geen sprake van compatibiliteit tussen verschillende software- of hardware-encryptietools;

    Bijna elk versleutelingshulpmiddel was een "zwarte doos" met nogal obscure inhoud: welk versleutelingsalgoritme wordt gebruikt, hoe cryptografisch sterk is het, is het correct geïmplementeerd, is het correct gemaakt, opgeslagen, gebruikte encryptiesleutels, zijn er niet-gedocumenteerde functies ingevoegd door de ontwikkelaars in de tool, enz. - al deze zeer belangrijke informatie was niet beschikbaar voor de overgrote meerderheid van kopers van cryptografische fondsen.

    Dit probleem wordt bijgewoond door het Amerikaanse National Bureau of Standards (NBS). Als gevolg hiervan werd in 1973 de eerste open competitie voor een encryptiestandaard aangekondigd. NBS was bereid kandidaat-algoritmen te onderzoeken die aan de volgende criteria voldoen om een ​​standaard te selecteren:

    Het algoritme moet cryptografisch sterk zijn;

    Het algoritme moet snel zijn;

    De structuur van het algoritme moet helder en duidelijk zijn;

    De sterkte van encryptie zou alleen van de sleutel moeten afhangen, het algoritme zelf mag niet geheim zijn;

    Het algoritme moet gemakkelijk toepasbaar zijn voor verschillende doeleinden;

    Het algoritme moet eenvoudig in hardware kunnen worden geïmplementeerd op de bestaande elementbasis.

    Er werd aangenomen dat geïnteresseerde organisaties of specialisten NBS gedetailleerde specificaties van de algoritmen zouden sturen die voldoende zijn voor hun implementatie, dat wil zeggen zonder enige "witte vlekken". Ook werd aangenomen dat het algoritme door NBS gecertificeerd zou worden voor algemeen gebruik, alle patent- en exportbeperkingen eruit zouden worden gehaald, waardoor een dergelijke standaard alle compatibiliteitsproblemen van encryptietools zou moeten oplossen. Bovendien nam NBS de functies van certificering van versleutelingstools over - dat wil zeggen, de "zwarte dozen" hadden tot het verleden moeten behoren.

    In feite was er maar één kandidaat-algoritme: het was het Lucifer-coderingsalgoritme dat is ontwikkeld door CMM. (zie paragraaf 3.31). Twee jaar lang werd het algoritme verfijnd:

    Eerst voerde NBS, samen met de Amerikaanse National Security Agency (NSA, NSA), een grondige analyse uit van het algoritme, wat resulteerde in een behoorlijk ingrijpende herwerking;

    Ten tweede werden opmerkingen en kritiek van alle geïnteresseerde organisaties en individuen in overweging genomen.

    Als resultaat van gezamenlijke activiteiten van IBM, NBS en NSA in januari 1977 werd DES gepubliceerd als een Amerikaanse standaard (de nieuwste versie van deze standaard staat in het document) voor algoritmen voor gegevensversleuteling (behalve voor zeer goed beveiligde informatie). Het DES-algoritme is gepatenteerd door YM, maar NBS heeft in feite een gratis en onbeperkte licentie gekregen om dit algoritme te gebruiken. Een alternatieve, maar minder vaak gebruikte naam voor het algoritme is DEA (Data Encryption Algorithm).

    Belangrijkste kenmerken en structuur van het algoritme

    DES codeert informatie in blokken van 64 bits met behulp van een 64-bits coderingssleutel die slechts 56 bits gebruikt (de procedure voor sleuteluitbreiding wordt hieronder in detail beschreven).

    Informatieversleuteling wordt als volgt uitgevoerd (Fig. 3.56):

    1. Boven een 64-bits datablok wordt een initiële permutatie uitgevoerd volgens de tabel. 3.16.

    Tabel 3.16

    De tabel wordt als volgt geïnterpreteerd: de waarde van het invoerbit 58 (hierna zijn alle bits van links naar rechts genummerd, beginnend bij 1) wordt in het uitvoerbit 1 geplaatst, de waarde van het 50e bit - in bit 2, enz. .



    2. Het resultaat van de vorige bewerking is verdeeld in 2 subblokken van 32 bits (door

    rijst. 3.56 gelabeld een 0 en B 0), waarover 16 ronden worden gemaakt

    de volgende transformaties:

    Zoals hierboven vermeld, gebruikt DES slechts 56 bits van een 64-bits coderingssleutel. Elke 8e bit wordt weggegooid en wordt op geen enkele manier gebruikt in het algoritme, en het gebruik van de resterende bits van de coderingssleutel in de implementaties van het DES-algoritme wordt op geen enkele manier beperkt door de standaard. De procedure voor het extraheren van 56 significante bits van een 64-bits sleutel in Fig. 3.59 wordt aangeduid als E. Naast extractie, voert deze procedure ook sleutelbitpermutaties uit volgens tabel. 3.19 en 3.20.


    Tabel 3.19

    Tabel 3.20


    Als resultaat van de permutatie worden twee 28-bits waarden C en D gevormd. Tabel 3.19 definieert de steekproef van sleutelbits voor C, tabel. 3.20 - voor D.

    Vervolgens worden 16 ronden van transformaties uitgevoerd, die elk een van de sleutels van de ronden K t geven. In elke ronde van de toetsuitbreidingsprocedure worden de volgende acties uitgevoerd:

    1. Huidige waarden van C en D worden cyclisch met een variabel aantal bits naar links verschoven P. Voor ronde 1, 2, 9 en 16 P= 1, in de resterende ronden wordt een 2-bits cyclische verschuiving uitgevoerd.

    2.C en D worden samengevoegd tot een 56-bits waarde, waarop de CP-krimppermutatie wordt toegepast, wat resulteert in een 48-bits ronde sleutel K (. De krimppermutatie wordt uitgevoerd volgens Tabel 3.21.

    Tabel 3.21

    Bij het ontsleutelen van gegevens kunt u dezelfde procedure voor sleuteluitbreiding gebruiken, maar de ronde sleutels in omgekeerde volgorde toepassen. Er is nog een andere optie: voer in elke ronde van de toetsuitbreidingsprocedure, in plaats van een cyclische verschuiving naar links, een cyclische verschuiving naar rechts uit met n bits, waarbij rc '= 0 voor de eerste ronde, en' = 1 voor rondes 2, 9, 16 en n = 2 voor de resterende toeren ... Een dergelijke sleuteluitbreidingsprocedure zal onmiddellijk de ronde sleutels opleveren die nodig zijn voor de ontsleuteling.

    Het moet gezegd worden dat de mogelijkheid om sleuteluitbreiding "on-the-fly" uit te voeren (vooral als deze mogelijkheid zowel tijdens codering als decodering bestaat) als een voordeel van coderingsalgoritmen wordt beschouwd, aangezien in dit geval de sleuteluitbreiding parallel met codering kan worden uitgevoerd en verspil geen geheugen aan het opslaan van de sleutels van andere rondes dan de huidige.

    De Data Encryption Standard (DES) is een datacoderingsstandaard die in de jaren tachtig in de Verenigde Staten is uitgevonden. Onder de cijfers wordt hij terecht beschouwd als een "gepensioneerde", terwijl hij het werkpaard van cryptografie blijft. DES was niet langer nuttig in de omstandigheden van ultrasnelle technologie en grote hoeveelheden gegevens vanwege de beperkingen van 56 bits per sleutel en 64 bits voor gegevens. Het is echter nog steeds in gebruik.

    Wat zijn blokcijfers?

    DES is een blokcijferalgoritme. In de afgelopen 20-30 jaar zijn er veel block ciphers gemaakt, maar het creëren van een goede cipher die veilig is, is een nogal moeilijke taak. Het is belangrijk dat het cijfer kenmerken heeft waardoor het in veel gebieden en industrieën kan functioneren.

    Blokcijfers bestaan ​​uit verschillende iteraties waarbij een cijfer achtereenvolgens wordt gebruikt. Elke iteratie wordt een ronde genoemd. Zoals de praktijk laat zien, zijn zelfs enkele van de primitieve algoritmen, wanneer ze sequentieel worden gebruikt, in staat om betrouwbare cijfers te creëren. DES is een voorbeeld dat al 20 jaar betrouwbaar en onverwoestbaar is.

    Deze benadering van de ontwikkeling van cijfers vergemakkelijkt het proces aanzienlijk en vereenvoudigt de beveiligingsanalyse. Een testaanval op een blokcijfer begint bijvoorbeeld met een minimum aantal rondes en gaat methodisch verder met een toename van het aantal rondes.

    DES . gebruiken

    Hoewel DES als verouderd en niet up-to-date wordt beschouwd, kan het bijvoorbeeld worden gebruikt in de vorm van 3DES, wanneer het cijfer drie keer achter elkaar wordt toegepast. Deze aanpak heft de beperking op de grootte van de sleutel op, maar het blok versleutelde gegevens blijft hetzelfde. DES was ooit een redelijk snel en crypto-sterk cijfer. Nu is dit niet het geval en is 3DES eigenlijk drie keer langzamer. Desondanks wordt DES nog steeds gebruikt in een aantal systemen, maar het gebruik ervan in nieuwe projecten is verboden.

    DES was tot 1998 het officiële coderingsalgoritme in de Verenigde Staten. In 1997 begon de creatie van een nieuwe standaard genaamd System), en hoewel cryptanalyse aantoont dat het proberen om DES te doorbreken tot veel systemen van niet-lineaire vergelijkingen leidt, kunnen analytische methoden het probleem niet helpen oplossen - het zwakke punt is de kleine reeks mogelijke sleutels. Hun aantal is gelijk aan 2 56 en alle opties kunnen met behulp van moderne technologieën in relatief korte tijd worden opgesomd.

    Eén ronde in het algoritme

    Voor de duidelijkheid van de presentatie en beschrijving van het DES-algoritme gebruiken we figuur (lijndiagram van berekeningen) 4.1, die de structuur van één ronde laat zien.

    Elke rechthoek in een lijndiagram vertegenwoordigt een soort berekening, en een pijl die eruit komt, geeft aan waar de resultaten van het blok worden overgedragen. Het plusteken, omcirkeld, geeft een "exclusieve of" -bewerking aan, in de programmering bekend als XOR. De bewerking wordt ook wel "bitsgewijze toevoeging" of "toevoeging zonder carry" genoemd. Op internet kun je het DES-algoritme in C vinden en bestuderen voor een beter begrip.

    DES accepteert een 64-bits tekstblok. Het doorloopt de initiële permutatie volgens een bepaald principe. Bij het analyseren van het algoritme bleek dat deze permutatie weinig zin heeft, omdat het geen cryptografisch effect geeft. Het tekstblok is opgesplitst in 2 gelijke delen: rechts (R) en links (L). Vervolgens worden de versleutelde delen verwisseld en gecombineerd, en aan het einde van de ronde wordt een 64-bits gegevensblok verkregen, alleen versleuteld.

    Algemeen algoritme

    DES-algoritme omvat 16 ronden, uitgevoerd volgens het hierboven beschreven schema. Alle toeren zijn genummerd tot en met i, waarbij i = (1; 16). Elke i-de ronde van het paar (Li-1, Ri-1) krijgt een nieuw paar (Li, Ri) met behulp van de Ki-toets. De belangrijkste transformaties vinden plaats binnen de functie F.

    Algoritme van de functie F

    Zoals je kunt zien in figuur 4.1, doorloopt R de bewerking "Uitvouwen". Dit blok dupliceert een aantal bits van R en vult het daarmee aan, waardoor een waarde van 48 bits wordt verkregen. Het resulterende resultaat gaat door een bitsgewijze toevoeging met een 48-bit Ki-sleutel. En het resultaat van deze bewerking wordt overgebracht naar blok S. Blok S bevat 8 kleine substitutiematrices, die op een speciale manier zijn geselecteerd.

    Elke matrix ontvangt 6 bits informatie als invoer en voert een 4-bits waarde uit. Als resultaat ontvangt blok S 48-bits gegevens aan de ingang, en aan de uitgang vertegenwoordigt het het resultaat als een 32-bits waarde.

    Deze 32-bits waarde doorloopt nog een permutatiebewerking, waarna deze wordt opgeteld door de xor-bewerking met L. Ten slotte worden de rechter- en linkerkant verwisseld en eindigt de ronde. Zoals eerder vermeld, maakt het algoritme 16 van dergelijke ronden.

    Hier zullen we het artikel niet overladen met voorbeelden die veel ruimte in beslag nemen. DES-werk en voorbeelden kunnen op het net worden bekeken.

    Feistel-cijfer

    DES is gebaseerd op het Feistel-cijfer. Het idee is vrij elegant. Bij elke ronde wordt het L-deel toegevoegd met de waarde van F (R, Ki) en verandert L van positie met R. Het belangrijkste kenmerk van het Feistel-algoritme is dat decodering en encryptie uit dezelfde stappen bestaan: de L- en R-delen zijn verwisseld, en vervolgens wordt de optelbewerking L uitgevoerd en F (R, Ki). Dit maakt coderings- en decoderingsprocedures eenvoudig en duidelijk.

    Een interessante verandering wordt vaak geïntroduceerd in Feistel-cijfers - de afschaffing van de permutatie van L en R in de laatste iteratie. Dit maakt de coderings- en decoderingsalgoritmen volledig symmetrisch. Het enige verschil zit in de volgorde waarin de Ki-toetsen worden gebruikt. Dit principe bleek zeer handig te zijn voor gebruik op softwareniveau, aangezien encryptie en decryptie worden uitgevoerd door middel van één functie. Bijvoorbeeld, een laconieke implementatie van het DES-coderingsalgoritme in C.

    Coderingssleutels

    DES gebruikt zestien 48-bits sleutels om gegevens te versleutelen. Eén sleutel per ronde. Elke sleutel wordt gegenereerd door 48 bits te bemonsteren uit een 56-bits hoofdsleutel. Het genereren van sleutels voor een bepaalde ronde wordt bepaald door een mechanisme dat wordt beschreven in de DES-documentatie.

    In het kort is het algoritme voor het ophalen van de i-sleutel als volgt. Bits worden toegevoegd aan de hoofdsleutel op posities 8, 16, 24, 32, 40, 48, 56, 64. Dit is zo gedaan dat elke byte een oneven aantal enen bevat. Naleving van de regel helpt bij het detecteren van fouten bij het uitwisselen van sleutels. Daarna ondergaat de opgevulde sleutel, met behulp van speciale tabellen, permutaties en verschuivingen, met uitzondering van de toegevoegde bits. Zo wordt de vereiste sleutel verkregen.

    DES-componenten

    Elk onderdeel van het DES-algoritme lost een specifiek probleem op:

    1. Het algoritme van Feistel vereenvoudigt encryptie en decryptie en zorgt er tegelijkertijd voor dat beide helften van de tekst worden gemengd.
    2. Bitsgewijze sommatie van delen van tekst met sleutels vermengt de openbare gegevens met de sleutel en versleutelt deze.
    3. S-box en opzoektabellen maken het algoritme niet-lineair, waardoor de weerstand tegen verschillende aanvallen toeneemt.
    4. Uitbreiding, S-box en permutaties zorgen voor diffusie van het algoritme - lawine-effect. Met andere woorden, als ten minste 1 bit in de invoergegevens van de functie F verandert, dan zal dit een verandering van vele bits tegelijk veroorzaken. Als het lawine-effect in de cipher niet wordt waargenomen, zullen veranderingen in open data leiden tot equivalente veranderingen in versleutelde vorm, die kunnen worden gevolgd en gebruikt voor kraken. In cryptografie is er een criterium voor het lawine-effect. Het algoritme voldoet als, wanneer 1 bit open data verandert, tenminste de helft van de versleutelde data verandert. Het DES-algoritme voldoet eraan vanaf ronde 4. Bottom line - het veranderen van 1 bit open data in de DES-codering zal 29 bits veranderen.

    Beveiligingsproblemen in DES

    Het voor de hand liggende probleem met DES is het ophalen van coderingssleutels van een openbare sleutel. Wat gebeurt er als je nul als sleutel kiest (alle bits van de sleutel zijn gelijk aan 0)? Dit zal ertoe leiden dat de steekproef van alle sleutels voor codering in elke ronde hetzelfde zal zijn en dat alle sleutels gelijk zullen zijn aan nul. Niet alleen gaan 16 versleutelingen door met één sleutel, maar omdat DES-versleuteling en ontsleutelingsalgoritmen alleen verschillen in de volgorde waarin de sleutels worden gebruikt, zullen ze exact hetzelfde zijn. Het hele coderingspunt gaat verloren.

    DES heeft 4 toetsen, die zwakke toetsen worden genoemd, die tot het beschreven effect leiden. DES heeft 12 semi-zwakke en 48 pseudo-zwakke sleutels, die de variatie van gegenereerde sleutels in rondes beperken. Met andere woorden, er is een mogelijkheid dat tijdens de versleuteling in 16 ronden niet 16 verschillende sleutels worden gebruikt, maar 8, 4 of zelfs 2.

    Een minder voor de hand liggend nadeel van DES is de complementariteitseigenschap. Het betekent dat als u leesbare tekstcomplement en sleutelcomplement gebruikt voor codering, u een waarde krijgt die het complement is van de cijfertekst. Deze belachelijke eigenschap kan leiden tot succesvolle aanvallen op projecten die DES gebruiken voor beveiliging.

    Probleem met versleutelingssleutel

    Het is fundamenteel voor DES en wordt beschouwd als de belangrijkste reden waarom dit algoritme moet worden opgegeven. Aangezien de sleutelgrootte in DES 56 bits is, moet u 2 56 opties doorlopen om alle sleutels te herhalen. Is het zoveel?

    Als u 10 miljoen sleutelcontroles per seconde uitvoert, duurt de verificatie ongeveer 2000 jaar. Het algoritme lijkt behoorlijk robuust te zijn. Zo was het ook in de vorige eeuw, toen het bouwen van een computer met dit vermogen een bijna onmogelijke opgave was, zowel technisch als financieel.

    Als je een computer maakt met een miljoen chips, duurt het 20 uur om de hele set DES-sleutels te doorlopen. De eerste computer van dit soort voor decodering met behulp van het DES-algoritme verscheen in 1998, die de taak in 56 uur aankon. Moderne technologieën van netwerken en parallelle processen kunnen deze tijd nog meer verkorten.

    Cryptanalyse en DES

    Het kan zonder overdrijving worden gezegd dat DES aanleiding gaf tot een toegepaste wetenschap genaamd "cryptografische analyse". Vanaf het allereerste begin van het verschijnen van DES werden pogingen ondernomen om het te kraken, er werd wetenschappelijk werk verricht om het te bestuderen. Dit alles leidde tot de geboorte van wiskundegebieden als:

    • lineaire cryptanalyse - de studie en identificatie van de relatie tussen platte tekst en cijfertekst;
    • differentiële cryptanalyse - de studie en analyse van afhankelijkheden tussen verschillende open teksten en hun gecodeerde versies;
    • cryptanalyse op gekoppelde sleutels - de studie van afhankelijkheden tussen cijferteksten verkregen op de primaire sleutel en sleutels die op enigerlei wijze aan de primaire sleutel zijn gekoppeld.

    DES heeft 20 jaar wereldwijde cryptanalyse en aanvallen doorstaan, maar blijft een sterk cijfer. Maar wie zoekt zal altijd vinden...

    1. Biham en Shamir, wetenschappers uit Israël, toonden in 1991 met behulp van differentiële cryptanalyse aan dat DES kan worden aangevallen waarbij de sleutel wordt berekend, op voorwaarde dat de aanvaller 2,47 speciaal overeenkomende paren platte tekst en cijfertekst heeft.
    2. De Japanse wetenschapper Mitsuru Matsui toonde in 1993 aan dat de sleutel kan worden berekend met behulp van lineaire cryptanalyse. Om dit te doen, hoeft u alleen maar 2,47 paar leesbare tekst en de bijbehorende gecodeerde versie te kennen.

    In de toekomst werden deze hackmethoden iets verbeterd, verbeterd en vereenvoudigd en verschenen er een aantal nieuwe hackmethoden. Maar ze blijven te ingewikkeld, tegen hun achtergrond lijkt een volledige opsomming van alle belangrijke varianten de meest adequate aanval op DES.