Algoritmen defineret af GOST 28147 89-standarden er. Nem udskiftningstilstand

"Mens du lever, skal du ikke dø, se på denne verden.
Mange her har en død sjæl – de er døde indeni.
Men de går og griner uden at vide, at de ikke er der,
Skynd dig ikke med din dødstid," fortalte hun mig.

Aria, "Deroppe"

  1. Introduktion
  1. Introduktion til blokcifre

2.1 Feistel netværk.
2.2 Blok chiffer GOST 28147-89

  1. Teoretisk minimum

3.1 Nøgleoplysninger
3.2 Grundlæggende trin i kryptokonvertering

3.3 Grundlæggende cyklusser:32-Z, 32-P.

  1. Øve sig

4.1 Implementering af det vigtigste kryptokonverteringstrin
4.2 Forøgelse af algoritmens hastighed
5.
6. Liste over brugt litteratur
7. Anerkendelser

Introduktion.

Dette dokument er mit forsøg på at beskrive en metode til simpelthen at erstatte GOST 28147-89-krypteringsalgoritmen med det enkleste, men ikke desto mindre teknisk kompetente sprog. Læseren vil fortælle sin mening om, hvor godt jeg lykkedes efter at have læst de første seks punkter.

For at mit arbejde kan være mere nyttigt, anbefaler jeg, at du bevæbner dig med forfatternes værker, der er angivet på listen over brugt litteratur. En lommeregner anbefales også, så den har en funktion til at beregne operationen XOR, fordi læsning af artiklen antager, at læseren har til hensigt at studere denne krypteringsalgoritme. Selvom det også er velegnet som en referenceguide, skrev jeg denne artikel specifikt som en træningsartikel.

Introduktion til blokcifre.

Før vi begynder at se på algoritmen, er vi nødt til at gøre os bekendt med historien om oprettelsen af ​​denne slags chiffer. Algoritmen tilhører kategorien af ​​blokcifre, i hvis arkitektur information er opdelt i et endeligt antal blokke, den sidste kan naturligvis ikke være komplet. Krypteringsprocessen foregår præcist over hele blokke, som danner chiffergrammet. Den sidste blok, hvis den er ufuldstændig, suppleres med noget (jeg vil tale om nuancerne i dens færdiggørelse nedenfor) og krypteres på samme måde som komplette blokke. Med ciphergram mener jeg resultatet af krypteringsfunktionen, der virker på en vis mængde data, som brugeren har indsendt til kryptering. Med andre ord er et chiffergram det endelige resultat af kryptering.

Historien om udviklingen af ​​blokcifre er forbundet med de tidlige 70'ere, hvor IBM-virksomheden, der indså behovet for at beskytte information ved overførsel af data over computerkommunikationskanaler, begyndte at implementere sit eget videnskabelige forskningsprogram dedikeret til beskyttelse af information i elektronisk netværk, herunder kryptografi.

En gruppe forskere og udviklere fra IBM, som begyndte at forske i krypteringssystemer med et symmetrisk nøgleskema, blev ledet af Dr. Horst Feistel.

2.1 Feistel netværk

Arkitekturen af ​​den nye krypteringsmetode foreslået af Feistel i klassisk litteratur blev kaldt "Feistel Architecture", men i øjeblikket bruges i russisk og udenlandsk litteratur et mere etableret udtryk - "Feistel netværk" eller Feistel's NetWork. Efterfølgende blev "Lucifer"-chifferet bygget ved hjælp af denne arkitektur - som senere blev offentliggjort og forårsagede en ny bølge af interesse for kryptografi generelt.

Idéen med Feistel-netværksarkitekturen er som følger: input-informationsstrømmen er opdelt i blokke med n bit i størrelse, hvor n er et lige tal. Hver blok er opdelt i to dele - L og R, derefter føres disse dele ind i en iterativ blokchiffer, hvor resultatet af det j-te trin bestemmes af resultatet af det foregående trin j-1! Dette kan illustreres med et eksempel:

Ris. 1

Hvor funktion A er hovedhandlingen af ​​en blokcifre. Det kan være en simpel handling, såsom XOR-operationen, eller den kan have en mere kompleks form og være en sekvens af en række simple handlinger - modulo-addition, venstreforskydning, elementudskiftning osv., tilsammen danner disse simple handlinger såkaldt hovedtrin i kryptokonvertering.

Det skal bemærkes, at nøgleelementerne i funktionens drift er leveringen af ​​nøgleelementer og XOR-operationen, og hvor godt disse operationer er gennemtænkt indikerer den kryptografiske styrke af chifferen som helhed.

For at ideen om Feistel-netværk skal være helt klar, lad os overveje det enkleste tilfælde afbildet i ris. 1, hvor i funktion A – vil operationerne “mod 2” (“xor”) fremkomme, men dette enkleste I en mere alvorlig situation, for eksempel ved at skjule information af national betydning, kan funktion A være mere kompleks (så vidt jeg har set, kan funktion A faktisk være meget kompleks):

Indledende data:

L=1110b, R=0101, K=1111b

Hent krypteringskoden

  1. (R + K) mod 2 4 = Smod, Smod = 0100b
  2. (Smod + L) mod 2 = Sxor, Sxor = 1010b
  3. L=R, R=Sxor

L=0101b, R=1010b

Lad os forklare vores handlinger:

  1. Denne operation er addition mod 2 4. I praksis kommer en sådan operation ned til simpel addition, hvor vi skal tilføje to tal og ignorere indførslen til det 5. ciffer. Da hvis vi sætter eksponenter over cifrene i den binære repræsentation af et tal, vil der være en eksponent fire over det femte ciffer, lad os tage et kig på figuren nedenfor, som viser handlingerne af vores operation:

Ris. 2

Her pegede jeg med en pil på eksponenterne, som du kan se, skulle resultatet have været 10100, men da mod 2 4 operationen ignorerer carry, får vi 0100.

  1. Denne operation kaldes mod 2 i litteraturen og implementeres i assemblersprog af kommandoen XOR. Men dets mere korrekte navn er mod 2 1. Uden denne unikke operation er det næppe muligt at bygge en hurtig, let implementeret krypteringsalgoritme og samtidig få den til at være ret krypto-resistent. Det unikke ved denne operation ligger i, at det er det modsatte af sig selv! For eksempel, hvis tallet A er XORED med tallet B, er resultatet B. I fremtiden er det nok at XOR tallene B og C med hinanden for at få den tidligere værdi af A!

I denne operation fik vi 1010 med tallene 1110 og 0100, for at få 1110 tilbage, er det nok at XOR tallene 0100 og 1010 med hinanden! Du kan læse mere om denne operation i artiklen vedhæftet hjemmesiden. www.wasm.ru, « Grundlæggende guide tilCRC_error detektionsalgoritmer» forfatteren, der Ross N. Williams. I dette arbejde er der en pointe - " 5. Binær aritmetik uden bærer" Det er i denne artikel, at operationen er beskrevet. xor! Jeg udbryder, fordi denne operation i denne artikel er så beskrevet, at læseren ikke kun forstår, hvordan denne operation fungerer, han selv begynder den se, hør og føl!

  1. Denne handling er nødvendig, så de originale værdier kan opnås ved dekryptering af chiffergrammet.

2.2 Blokcifre GOST 28147-89

GOST 28147 – 89-krypteringsalgoritmen tilhører kategorien af ​​blokcifre, der arbejder i henhold til arkitekturen af ​​balancerede Feistel-netværk, hvor to dele af den valgte informationsblok er af samme størrelse. Algoritmen blev udviklet i tarmene i den ottende afdeling af KGB, nu omdannet til FAPSI, og blev etableret som krypteringsstandarden for Den Russiske Føderation tilbage i 1989 under USSR.

For at denne algoritmemetode skal fungere, er det nødvendigt at opdele informationen i blokke med en størrelse på 64 bit. Generer eller indtast følgende nøgleoplysninger i krypteringssystemet: nøgle og substitutionstabel. Valget af nøgle og erstatningstabel ved kryptering bør tages meget alvorligt, pga Dette er grundlaget for sikkerheden af ​​dine oplysninger. For information om, hvilke krav der stilles til nøglen og udskiftningstabellen, se afsnittet "Krav til nøgleoplysninger".

Når vi overvejer metoden, vil vi ikke fokusere på dette, fordi denne artikel, som jeg sagde ovenfor, blev skrevet med det formål at lære læseren, hvordan man krypterer data ved hjælp af metoden til blot at erstatte en given krypteringsalgoritme, men vi vil helt sikkert komme ind på dette problem i slutningen af ​​artiklen.

Teoretisk minimum.

3.1 Nøgleoplysninger

Som jeg sagde ovenfor, deltager følgende aktivt i datakryptering:

3.1.1. En nøgle er en sekvens af otte elementer, hver 32 bit store. Yderligere vil vi betegne det med symbolet K, og de elementer, som det består af, er k1, k2, k3, k4, k5, k6, k7, k8.

3.1.2 Udskiftningstabel – en matrix med otte rækker og seksten kolonner, i det følgende benævnt Hij. Hvert element i skæringspunktet mellem række i og kolonne j optager 4 bit.

Hovedhandlingen i krypteringsprocessen er hovedtrinnet i kryptokonvertering. Dette er intet andet end handlingen med at kryptere data ved hjælp af en bestemt algoritme, kun udviklerne introducerede et meget besværligt navn :).

Før kryptering begynder, er blokken opdelt i to dele L og R, 32 bit hver. De vælger et nøgleelement og fører først derefter disse to dele af blokken, nøgleelementet og erstatningstabellen ind i hovedtrinsfunktionen Resultatet af hovedtrinnet er en iteration af den grundlæggende cyklus, som vil blive diskuteret i den næste afsnit. Hovedtrinet består af følgende:

  1. Tilføjelsesdelen af ​​blokken R summeres med nøgleelementet K mod 2 32. Jeg beskrev en lignende operation ovenfor, her er det samme, kun eksponenten er ikke "4", men "32" - resultatet af denne operation vil blive yderligere betegnet af Smod.
  2. Vi opdeler det tidligere opnåede resultat Smod i fire-bit elementer s7, s6, s5, s4, s3, s2, s1, s0 og føder det til erstatningsfunktionen. Udskiftningen foregår på følgende måde: vælg elementet Smod - s i , start fra begyndelsen med det laveste element, og erstat det med værdien fra erstatningstabellen for i - rækken og kolonnen angivet med værdien af ​​elementet s i . Vi går til s i +1 element og fortsætter på samme måde og fortsætter, indtil vi erstatter værdien af ​​det sidste element Smod - resultatet af denne operation vil blive betegnet som, Ssimple.
  3. I denne operation forskydes værdien af ​​Ssimple cyklisk til venstre med 11 bit, og vi opnår Srol.
  4. Vi vælger den anden del af blok L og tilføjer mod 2 med Srol, som et resultat har vi Sxor.
  5. På dette stadium bliver L-delen af ​​blokken lig med værdien af ​​R-delen, og R-delen initialiseres igen af ​​resultatet af Sxor, og dette er slutningen af ​​hovedtrinsfunktionen!

3.3 Grundlæggende cyklusser: "32-Z", "32-R".

For at kryptere information skal den opdeles i blokke på 64 bit store; naturligvis kan den sidste blok være mindre end 64 bit. Denne kendsgerning er akilleshælen for denne "simpele udskiftningsmetode". Da dets tilføjelse til 64 bit er en meget vigtig opgave i at øge den kryptografiske styrke af chiffergrammet, er dette følsomme sted, hvis det er til stede i rækken af ​​information, og det ikke er (for eksempel en fil på 512 bytes i størrelse !), bør behandles med stort ansvar!

Når du har opdelt informationen i blokke, bør du opdele nøglen i elementer:

K = k1,k2,k3,k4,k5,k6,k7,k8

Selve kryptering består af at bruge såkaldte basiscyklusser. Som igen inkluderer det n'te antal grundlæggende kryptokonverteringstrin.

Grundcyklusser er, hvordan skal jeg sige det, mærket: n – m. Hvor n er antallet af primære kryptokonverteringstrin i basiscyklussen, og m er "typen" af basiscyklussen, dvs. Hvad taler vi om, "Z"-kryptering eller "R"-kryptering af data.

Den grundlæggende krypteringscyklus 32-3 består af 32 hovedkryptotransformationstrin. Funktionen, der implementerer trinhandlingerne, leveres med blok N og nøgleelement K, hvor det første trin sker med k1, det andet over det opnåede resultat med elementet k2 osv. efter følgende skema:

k1,k2,k3,k4,k5,k6,k7,k8,k1,k2,k3,k4,k5,k6,k7,k8,k1,k2,k3,k4,k5,k6,k7,k8k8,k7, k6,k5,k4,k3,k2,k1

Dekrypteringsprocessen for 32-P foregår på lignende måde, men nøgleelementerne leveres i omvendt rækkefølge:

k1,k2,k3,k4,k5,k6,k7,k8,k8,k7,k6,k5,k4,k3,k2,k1,k8,k7,k6,k5,k4,k3,k2,k1,k8, k7,k6,k5,k4,k3,k2,k1

Øve sig.

Efter at vi havde stiftet bekendtskab med teorien om, hvordan man krypterer information, var det tid til at se, hvordan kryptering sker i praksis.

Indledende data:

Lad os tage informationsblokken N = 0102030405060708h, her er dele L og R ens:

L = 01020304h, R =05060708h, tag nøglen:

K = ' som 28 zw37 q839 7342ui23 8e2t wqm2 ewp1' (disse er ASCII-koder, for at se den hexadecimale repræsentation kan du åbne denne fil i visningstilstand i Total Commander ved at trykke på " F3"og så nøglen" 3 "). I denne nøgle vil elementværdierne være:

k1 = 'as28', k2 = 'zw37', k3 = 'q839', k4 = '7342'

k5 = 'ui23', k6 = '8e2t', k7 = 'wqm2', k8 = 'ewp1'

Lad os også tage følgende erstatningstabel:

Ris. 3

Her er rækkerne nummereret fra 0 til 7, kolonner fra 0 til F.

Advarsel: Al information, inklusive nøglen med erstatningstabellen, tages som et eksempel for at overveje algoritmen!

Ved at bruge "Input Data" er det nødvendigt at opnå resultatet af hovedtrinnet i kryptokonvertering.

  1. Vi vælger delen R = 05060708h og nøgleelementet k1 = 'as28', i hexadecimal form vil nøgleelementet se således ud: 61733238h. Nu udfører vi summeringsoperationen mod 2 32:

Ris. 4

Som du kan se på figuren, havde vi ikke en overførsel til 33 bit markeret med rødt og med eksponenten " 32 " Og hvis vi havde andre værdier for R og nøgleelementet, kunne dette meget vel ske, og så ville vi ignorere det, og i fremtiden ville vi kun bruge de bits, der er markeret med gult.

Jeg udfører denne operation ved hjælp af assembler-kommandoen tilføje:

; eax = R, ebx = 'as28'

Resultatet af denne operation er Smod = 66793940h

  1. Nu er dette den mest vanskelige operation, men hvis du ser nærmere efter, er den ikke længere så skræmmende, som den umiddelbart ser ud. Lad os forestille os Smod i følgende form:

FIGUR IKKE GEMMT

Ris. 5

Jeg forsøgte at visualisere Smod-elementerne i figuren, men jeg vil alligevel forklare:

s0 = 0, s1 = 4, s2 = 9, osv.

Nu, startende fra det laveste element s0, foretager vi udskiftningen. Husk pointen " 3.2 Grundlæggende trin i kryptokonvertering» i – række, s i – kolonne, se efter værdien i nulrækken og nulkolonnen:

Fig.6

Så den aktuelle værdi af Smod er ikke 6679394 0 h, a 6679394 5 h.

Lad os begynde at erstatte s1, dvs. fire. Brug af første række og fjerde kolonne (s1= 4!). Lad os se på billedet:

Ris. 7

Nu er værdien Smod, ikke 667939 4 5h, 667939 2 5 timer. Jeg antager, at udskiftningsalgoritmen nu er klar for læseren, og jeg kan sige, at efter dette vil det endelige resultat af Ssimple have følgende værdi - 11e10325h.

Jeg vil tale om, hvordan dette lettest kan implementeres i form af assembler-kommandoer senere i næste afsnit, efter jeg har talt om den udvidede tabel.

  1. Vi skal flytte den resulterende Ssimple-værdi 11 bit til venstre.

Ris. 8

Som du kan se, er denne handling ret enkel og implementeres med en assemblersprogkommando - rolle og resultatet af denne operation Srol er 0819288Fh.

  1. Nu er der kun tilbage at XOR delen L af vores informationsblok med værdien Srol. Jeg tager en lommeregner fra w2k sp4 og får Sxor = 091b2b8bh.
  2. Denne handling er endelig, og vi tildeler simpelthen R, værdien af ​​del L, og initialiserer del L med værdien af ​​Sxor.

Endeligt resultat:

L = 091b2b8bh, R = 01020304h

4.2 Forøg algoritmens hastighed

Lad os nu tale om at optimere algoritmen for hastighed. Når man implementerer ethvert projekt, skal man tage højde for, at et program, der arbejder med registre oftere end med hukommelse, virker hurtigst, og her er denne bedømmelse også meget vigtig, fordi over en blok af information er der så mange som 32 krypteringshandlinger!

Da jeg implementerede krypteringsalgoritmen i mit program, gjorde jeg følgende:

  1. Jeg valgte en del af blokken L i eax-registret og R i edx-registret.
  2. esi-registret blev initialiseret med adressen på den udvidede nøgle, mere om det nedenfor.
  3. ebx-registret blev tildelt værdien af ​​adressen på det udvidede erstatningsbord, mere om det nedenfor
  4. Overførte oplysningerne i punkt 1,2, 3 til funktionen af ​​den grundlæggende cyklus 32 - Z eller 32 - R, afhængigt af situationen.

Hvis du ser på forsyningsdiagrammet over nøgleelementerne i afsnit " Grundlæggende cyklusser: "32-Z", "32-R"", så kan vores nøgle til grundcyklus 32 - Z repræsenteres som følger:

K 32-Z =

'as28','zw37','q839','7342','ui23','8e2t','wqm2','ewp1',

'as28','zw37','q839','7342','ui23','8e2t','wqm2','ewp1',

'ewp1','wqm2','8e2t','ui23','7342','q839','zw37','as28'

De der. fra begyndelsen er der k1, k2, k3, k4, k5, k6, k7, k8 - as28', 'zw37', 'q839', '7342', 'ui23', '8e2t', 'wqm2', 'ewp1' Denne sekvens gentages tre gange. Så går elementerne i omvendt rækkefølge, dvs.: k8,k7,k6,k5,k4,k3,k2,k1 - 'ewp1', 'wqm2', '8e2t', 'ui23', '7342', 'q839', 'zw37', 'as28'.

Jeg forudarrangerede elementerne i arrayet i den rækkefølge, de skulle føres ind i 32 - Z. Således øgede jeg den nødvendige hukommelse pr. tur, men reddede mig selv fra nogle tænkeprocesser, som jeg ikke havde brug for, og øgede hastigheden af algoritme, for ved at reducere hukommelsesadgangstiden! Her beskrev jeg kun nøglen for 32 - Z, for cyklus 32 - P gjorde jeg det samme, men ved at bruge et andet skema til levering af elementer, som jeg også beskrev i afsnittet " Grundlæggende cyklusser: "32-З", "32-Р"».

Det er tid til at beskrive implementeringen af ​​erstatningsfunktionen, som jeg lovede ovenfor. Jeg kunne ikke beskrive det tidligere, fordi... dette kræver introduktion af et nyt koncept - en udvidet substitutionstabel. Jeg kan ikke forklare dig, hvad det er. I stedet vil jeg vise dig det, og du kan selv formulere, hvad det er - en udvidet substitutionstabel?

Så for at forstå, hvad et udvidet udskiftningsbord er, har vi brug for et udskiftningsbord; for eksempel vil jeg tage den vist i fig. 3.

For eksempel skulle vi erstatte nummeret 66793940h. Jeg vil præsentere det i følgende form:

FIGUR IKKE GEMMT

Ris. 9

Hvis vi nu tager elementerne s1, s0, dvs. lav byte, så vil resultatet af erstatningsfunktionen være lig med 25h! Efter at have læst artiklen af ​​Andrei Vinokurov, som jeg citerede i afsnit " Liste over brugt litteratur", vil du faktisk opdage, at hvis du tager to strenge, kan du få et array, så du hurtigt kan finde erstatningselementer ved hjælp af en assembler-kommando xlat. De siger, at der er en anden hurtigere måde, men Andrei Vinokurov brugte omkring fire år på at undersøge hurtige algoritmer til implementering af GOST! Jeg tror, ​​der er ingen grund til at genopfinde hjulet, når det allerede eksisterer.

Så om arrayet:

Lad os tage de første to linjer, nul og første, og skabe en matrix på 256 bytes. Nu observerer vi en ejendommelighed: hvis vi skal konvertere 00h, så vil resultatet være 75h (vi stoler på fig. 3) - vi sætter denne værdi i arrayet ved offset 00h. Vi tager værdien 01h, resultatet af erstatningsfunktionen 79h, sætter den i arrayet ved offset 01 og så videre indtil 0FFh, hvilket vil give os 0FCh, som vi sætter i arrayet ved offset 0FFh. Så vi fik en udvidet tabel med erstatninger for den første gruppe af rækker: første og nul. Men der er stadig tre grupper: anden side 2, side 3, tredje side 4, side 5, fjerde side 6, side 7. Vi behandler disse tre grupper på samme måde som med den første. Resultatet er en udvidet udskiftningstabel!

Nu kan du implementere en algoritme, der udfører udskiftningen. For at gøre dette tager vi kildekoderne, som Andrey Vinokurov postede på sin side, se " Bibliografi».

lea ebx,extended_table_simple

mov eax,[indsæt nummeret, der skal erstattes]

tilføj ebx,100h ;hop til næste to noder

sub ebx,300h ; så ebx i fremtiden peger på bordet

Nu er der en funktion mere: med de tidligere handlinger erstattede vi ikke kun, men flyttede også tallet 8 bits til venstre! Alt vi skal gøre er at flytte tallet yderligere 3 bit til venstre:

og vi får resultatet af operationen rolle eax,11!

Jeg kan ikke tilføje noget mere vedrørende optimering, det eneste jeg kan understrege er, hvad jeg sagde ovenfor - brug registre oftere end adgang til hukommelse. Jeg tror, ​​at disse ord kun er for begyndere; erfarne mennesker forstår dette udmærket uden mine ord :).

Krav til nøgleoplysninger.

Som det fremgår af artiklen af ​​Andrey Vinokurov, er nøglen valgt i henhold til to kriterier:

— et kriterium for den ligesandsynlige fordeling af bit mellem værdierne 1 og 0. Sædvanligvis bruges Pearson-kriteriet ("chi-kvadrat") som et kriterium for den ligesandsynlige fordeling af bits.

Dette betyder, at nøglen i princippet kan være et hvilket som helst tal. Det vil sige, når den næste bit af nøglen dannes, er sandsynligheden for dens initialisering til en eller nul 50/50!

Bemærk venligst, at nøglen består af otte elementer, hver på 32 bit, så i alt er der 32 * 8 = 256 bit i nøglen og antallet af mulige nøgler er 2.256! Overrasker dette dig ikke? 🙂

- seriekriterium.

Hvis vi ser på vores nøgle, som jeg gav i afsnit " 4.1 Implementering af hovedtrinnet i kryptokonvertering", så vil du bemærke, at følgende notation er sand:

Ris. 10

I én sætning bør værdien af ​​k 1 ikke gentages i k 2 eller i noget andet nøgleelement.

Det vil sige, at nøglen, som vi valgte at betragte som en krypteringsalgoritme, opfylder fuldt ud de to ovenstående kriterier.

Nu om at vælge et erstatningsbord:

Lad os nu tale om, hvordan man vælger den rigtige substitutionstabel. Hovedkravet for at vælge erstatningstabeller er fænomenet "ikke-gentagelse" af elementer, som hver er 4 bit store. Som du allerede har set ovenfor, består hver række i erstatningstabellen af ​​værdierne 0h, 1h, 2h, 3h, ..., 0fh. Så hovedkravet siger, at hver linje indeholder værdierne 0h, 1h, 2h, ..., 0fh og hver sådan værdi i én kopi. For eksempel rækkefølgen:

1 2 3 4 5 6 7 8 9 A B C D E F

Det opfylder fuldt ud dette krav, men alligevel! Det anbefales ikke at vælge en sådan sekvens som en streng. For hvis du fodrer en værdi til input af en funktion, der er afhængig af en sådan streng, så får du den samme værdi som output! Tror du mig ikke? Tag derefter tallet 332DA43Fh og otte sådanne rækker som en tabel over erstatninger. Udfør udskiftningsoperationen, og jeg kan forsikre dig, at outputtet, du får, er 332DA43Fh! Det vil sige det samme som du har indsendt som input til operationen! Men dette er ikke et tegn på god manerer ved kryptering, og var det? 🙂

Dette var et krav, det næste kriterium siger, at - hver bit af outputblokken skal være statistisk uafhængig af hver bit af inputblokken!

Hvordan ser det nemmere ud? Og her er, hvordan vi for eksempel valgte elementet s0 = 0Fh, 01111b fra ovenstående tal. Sandsynligheden for at vi nu vil erstatte den første bit med en eller nul er 0,5! Sandsynligheden for at erstatte den anden, tredje og fjerde bit, hver bit, betragter vi separat, med enere eller nuller, er også 0,5. Når du vælger s1 = 0Eh, er sandsynligheden for, at vi erstatter nulbit, og dette er "0", med nul eller en for lig med – 0,5! Ifølge dette kriterium er der således ikke noget mønster mellem udskiftningen af ​​nul bits af elementerne s0, s1! Ja, du kan erstatte dem, men du kan også erstatte nuller. 🙂

For at evaluere tabellen i henhold til dette kriterium kan du bygge en tabel med korrelationskoefficienter beregnet ved hjælp af formlen:

— hvis p = 1, så er værdien af ​​bit j ved udgangen lig med værdien af ​​bit i ved input for enhver kombination af bit ved input;

— hvis p = -1, så er værdien af ​​bit j ved udgangen altid den omvendte af inputbit i;

— hvis p = 0, så tager udgangsbitten j med samme sandsynlighed værdierne 0 og 1 for enhver fast værdi af inputbit i.

Lad os tage et enkelt linje eksempel:

D B 4 1 3 F 5 9 0 EN E 7 6 8 2 C

Lad os opdele det i "komponenter":

Lad os beregne en koefficient ved hjælp af formlen ovenfor. For at gøre det lettere at forstå, hvordan dette gøres, vil jeg forklare mere detaljeret:

— vi tager den 0. bit af det 0. tal (0) ved input og den 0. bit af det 0. tal ved udgangen (1) og udfører operationen 0 XOR 1 = 1.

— vi tager den 0. bit af det 1. tal (1) ved indgangen og den 0. bit af det 1. tal ved udgangen (1) og udfører operationen 1 XOR 1 = 0.

— vi tager den 0. bit af det 2. tal (0) ved indgangen og den 0. bit af det andet tal ved udgangen (0) og udfører operationen 0 XOR 0 = 0.

— vi tager den 0. bit af det 3. tal (1) ved input og den 0. bit af det 3. tal ved udgangen (1) og udfører operationen 1 XOR 1 = 0.

Efter at have udført sekventielle XOR-operationer i denne sekvens, tæller vi antallet af alle ikke-nul-værdier, vi får værdien 6. Derfor P 00 = 1-(6/2 4-1) = 0,25. Så det viste sig, at værdien af ​​bit 0 ved udgangen er lig med værdien af ​​bit 0 ved input i 4 tilfælde ud af 16;

Finale odds tabel:

Tabellen med koefficienter vil være som følger (hvem der ikke er for doven kan genberegne)

Indgang
Afslut 0 1 2 3
0 -0,25 0,00 0,00 0,00
1 0,00 1,00 0,00 0,00
2 0,00 0,00 1,00 0,00
3 0,00 0,00 0,00 -0,50

Nå, i denne tabel er tingene endnu værre - bit 1 og 2 i gruppen forbliver uændrede! Kryptanalytikeren har plads til at vende om 🙂 Under hensyntagen til alle disse krav blev der ved simpel brute-force-søgning fundet permutationstabeller svarende til den specificerede teori (til dato - 1276 kombinationer). Her er nogle af dem:

09 0D 03 0E-06 02 05 08-0A 07 00 04-0C 01 0F 0B
00 05 0A 07-03 08 0F 0C-0E 0B 04 09-0D 06 01 02
06 0B 0F 00-0C 01 02 0D-08 07 09 04-05 0A 03 0E
04 0E 00 09-0B 01 0F 06-03 0D 07 0A-0C 02 08 05
04 02 08 0E-05 0F 03 09-0B 01 0D 07-0A 0C 06 00
07 03 09 0C-08 00 06 0F-0E 04 01 0A-0D 0B 02 05
06 0F 03 08-0D 04 0A 01-09 02 05 0C-00 0B 0E 07
0C 06 08 01-03 09 07 0E-0B 05 0F 02-04 0A 00 0D
04 0B 09 06-0E 01 00 0F-0A 05 03 0C-0D 02 07 08
00 0E 0F 01-07 08 09 06-04 0B 0A 05-03 0D 0C 02
0F 09 01 07-04 0A 08 06-0E 00 02 0C-05 03 0B 0D
0A 03 04 01-05 0C 0B 0E-08 06 0F 0D-07 09 00 02
0B 06 0F 01-04 0A 08 05-00 0D 0C 02-07 09 03 0E
0C 03 02 08-0D 06 0B 05-07 09 04 0F-0A 00 01 0E
02 0B 0F 04-09 00 06 0D-05 0E 01 08-0C 07 0A 03

Liste over brugt litteratur.

  1. Artikel af Andrey Vinokurov:

GOST 28147-89 krypteringsalgoritme, dens brug og implementering

til computere på Intel x86-platformen.

(kan findes på: http://www.enlight.ru/crypto/frame.htm).

Her er kildekoderne til implementering af krypteringsalgoritmen.

  1. Artikel af Horst Feistel:

Kryptografi og computersikkerhed.

(kan findes på samme adresse som forrige artikel)

  1. Ross N. Williams:

En grundlæggende vejledning til CRC-fejldetektionsalgoritmer

Udgivet på hjemmesiden www.wasm.ru.

Anerkendelser

Jeg vil gerne udtrykke min taknemmelighed til alle besøgende på forummet www.wasm.ru. Men jeg vil især gerne takke ChS, som i dag er kendt som SteelRat, han hjalp mig med at forstå ting, som jeg nok aldrig ville have forstået, samt hjælp til at skrive afsnittet: “ Krav til nøgleoplysninger", er hoveddelen af ​​dette afsnit skrevet af ham. Jeg er også den ansatte i KSTU dybt taknemmelig. A.N. Tupolev Anikin Igor Vyacheslavovich og det ville være en synd ikke at nævne Chris Kaspersky for hvad han er og Volodya / wasm.ru for hans instruktioner. Åh, og jeg får det fra ham :). Jeg vil også nævne Sega-Zero / Callipso for at bringe noget matematisk jungle til mit sind.

Det er nok alt, jeg gerne vil fortælle dig.

Jeg ville være taknemmelig for kritik eller spørgsmål relateret til denne artikel eller bare råd. Mine kontaktoplysninger: [e-mail beskyttet], ICQ – 337310594.

Med venlig hilsen, Evil's Interrupt.

P.S.: Jeg forsøgte ikke at overgå nogen med denne artikel. Det er skrevet med den hensigt at gøre det lettere at studere GOST, og hvis du har vanskeligheder, betyder det ikke, at jeg er skyld i dette. Vær fornuftig og vær tålmodig, alt det bedste til dig!

Kort beskrivelse af chifferen

GOST 28147-89 er en sovjetisk og russisk symmetrisk krypteringsstandard introduceret i 1990, også en CIS-standard. Fulde navn - "GOST 28147-89 Informationsbehandlingssystemer. Kryptografisk beskyttelse. Kryptografisk konverteringsalgoritme". Blok chifferalgoritme. Når du bruger gamma-krypteringsmetoden, kan den udføre funktionerne i en strømkrypteringsalgoritme.

GOST 28147-89 er en blokchiffer med en 256-bit nøgle og 32 konverteringscyklusser, der fungerer på 64-bit blokke. Grundlaget for chifferalgoritmen er Feistel Network. Den grundlæggende krypteringstilstand i henhold til GOST 28147-89 er den simple udskiftningstilstand (mere kompleks gamma, gamma med feedback og simulerede indsættelsestilstande er også defineret).

Hvordan algoritmen fungerer

Algoritmen er ikke fundamentalt forskellig fra DES. Den indeholder også krypteringscyklusser (32 af dem) i henhold til Feistel-skemaet (fig. 2.9.).

Ris. 2.9. Krypteringsrunder af GOST 28147-89-algoritmen.

For at generere undernøgler er den originale 256-bit nøgle opdelt i otte 32-bit blokke: k 1 ...k 8 . Tasterne k 9 ...k 24 er en cyklisk gentagelse af tasterne k 1 ...k 8 (nummereret fra mindst signifikante til højeste bit). Tasterne k 25 …k 32 er tasterne k 1 …k 8 i omvendt rækkefølge.

Efter at have gennemført alle 32 runder af algoritmen limes blokke A 33 og B 33 sammen (bemærk at den mest signifikante bit bliver A 33, og den mindst signifikante bit - B 33) - resultatet er resultatet af algoritmen.

Fungere f(EN jeg ,K jeg) beregnes som følger: A i og K i tilføjes modulo 2 32 , derefter opdeles resultatet i otte 4-bit undersekvenser, som hver er input til sin egen substitutionstabel node(i stigende rækkefølge efter bitprioritet), kaldet nedenfor S-blok. Det samlede antal GOST S-blokke er otte, dvs. det samme antal som undersekvenser. Hver S-blok er en permutation af tal fra 0 til 15. Den første 4-bit undersekvens går til indgangen af ​​den første S-boks, den anden - til indgangen af ​​den anden osv. Udgangene fra alle otte S-bokse kombineres til et 32-bit ord, så forskydes hele ordet cyklisk til venstre (mod de mest signifikante bits) med 11 bit. Alle otte S-bokse kan være forskellige. Faktisk kan de være yderligere nøglemateriale, men oftere er de en skemaparameter, der er fælles for en bestemt gruppe af brugere. Standardens tekst angiver, at leveringen af ​​påfyldningserstatningsenheder (S-blokke) udføres på den foreskrevne måde, dvs. algoritme udvikler. Fællesskabet af russiske CIPF-udviklere er blevet enige om de erstatningsknuder, der bruges på internettet.

Dekryptering udføres på samme måde som kryptering, men rækkefølgen af ​​undernøglerne k i er inverteret.

Driftstilstande for GOST 28147-89-algoritmen

GOST 28147-89-algoritmen har fire driftstilstande.

1. Modenem udskiftning accepterer som inputdata, hvis størrelse er et multiplum af 64 bit. Resultatet af kryptering er inputteksten, konverteret i blokke på 64 bit i tilfælde af kryptering med "32-Z" cyklus, og i tilfælde af dekryptering med "32-R" cyklus.

2. Modespil accepterer data af enhver størrelse som input, såvel som en ekstra 64-bit parameter - synkronisere besked. Under drift konverteres synkroniseringsmeddelelsen i "32-Z" cyklussen, resultatet er opdelt i to dele. Den første del er tilføjet modulo 2 32 med en konstant værdi på 1010101 16. Hvis den anden del er lig med 2 32 -1, ændres dens værdi ikke, ellers tilføjes den modulo 2 32 -1 med en konstant værdi på 1010104 16. Værdien opnået ved at kombinere begge transformerede dele, kaldet chiffergamma, går ind i "32-3" cyklussen, dens resultat tilføjes bit for bit modulo 2 med 64-bit blok af inputdata. Hvis sidstnævnte er mindre end 64 bit, så kasseres de ekstra bits af den resulterende værdi. Den resulterende værdi sendes til outputtet. Hvis der stadig er indgående data, gentages handlingen: blokken, der består af 32-bit dele, konverteres i dele, og så videre.

3. Modespil med feedback accepterer også data af enhver størrelse og en synkroniseringsmeddelelse som input. Blokken af ​​inputdata tilføjes bit for bit modulo 2 med resultatet af transformationen i "32-3" cyklussen af ​​synkroniseringsmeddelelsen. Den resulterende værdi sendes til outputtet. Værdien af ​​synkroniseringsmeddelelsen erstattes i tilfælde af kryptering af outputblokken, og i tilfælde af dekryptering - af inputblokken, det vil sige den krypterede. Hvis den sidste blok af indgående data er mindre end 64 bit, så kasseres de ekstra bits af gamma (output af "32-3" cyklus). Hvis der stadig er indgående data, gentages handlingen: fra resultatet af kryptering af den erstattede værdi dannes en chiffergamma osv.

4. Produktionstilstandimitationsindlæg tager som inputdata, der er mindst to hele 64-bit blokke i størrelse og returnerer en 64-bit blok af data kaldet en simuleret insert. Den midlertidige 64-bit værdi sættes til 0, og så længe der er inputdata, tilføjes den bit for bit modulo 2 med resultatet af "16-3" cyklussen, hvis input er en blok af input data. Efter afslutningen af ​​inputdata returneres den midlertidige værdi som resultat.

Krypteringskrypteringsanalyse

GOST 28147-89 chifferen bruger en 256-bit nøgle, og volumen af ​​nøglerummet er 2.256. På ingen af ​​de nuværende almindelige computere kan en nøgle findes på mindre end mange hundrede år. Den russiske standard GOST 28147-89 er designet med en stor margin og er mange størrelsesordener stærkere end den amerikanske DES-standard med dens faktiske nøglestørrelse på 56 bit og et nøglerumvolumen på kun 2 56 .

Der er også angreb på hele GOST 28147-89 uden nogen ændringer. Et af de første offentlige værker til at analysere algoritmen udnytter svagheder i nøgleudvidelsesproceduren for en række velkendte krypteringsalgoritmer. Især hele GOST 28147-89-algoritmen kan brydes ved hjælp af differentiel kryptoanalyse på relaterede nøgler, men kun hvis der bruges svage erstatningstabeller. 24-runders versionen af ​​algoritmen (hvor de første 8 runder mangler) åbnes på lignende måde med eventuelle erstatningstabeller, dog gør stærke erstatningstabeller et sådant angreb fuldstændig upraktisk.

De indenlandske videnskabsmænd A.G. Rostovtsev og E.B. Makhovenko foreslog i 2001 en fundamentalt ny metode til kryptoanalyse ved at danne en objektiv funktion ud fra en kendt klartekst, den tilsvarende chiffertekst og den ønskede nøgleværdi og finde dens ekstremum svarende til nøglens sande værdi. De fandt også en stor klasse af svage nøgler til GOST 28147-89 algoritmen, som gør det muligt at åbne algoritmen ved hjælp af kun 4 udvalgte klartekster og de tilsvarende chiffertekster med en forholdsvis lav kompleksitet.

I 2004 foreslog en gruppe specialister fra Korea et angreb, der ved hjælp af differentiel kryptoanalyse på relaterede nøgler kan opnå en 12-bit hemmelig nøgle med en sandsynlighed på 91,7 %. Angrebet kræver 2 35 udvalgte klartekster og 2 36 krypteringsoperationer. Som du kan se, er dette angreb praktisk talt ubrugeligt til faktisk at bryde algoritmen.

Udskiftningstabellen er et langsigtet nøgleelement, det vil sige, at den er gyldig i en meget længere periode end en enkelt nøgle. Det antages, at det er fælles for alle krypteringsnoder inden for det samme kryptografiske beskyttelsessystem. Kvaliteten af ​​chifferen afhænger af kvaliteten af ​​denne tabel. Med en "stærk" substitutionstabel falder chifferens styrke ikke under en vis acceptabel grænse, selvom den kompromitteres. Omvendt kan brug af en "svag" tabel reducere chifferens styrke til en uacceptabel lav grænse. Ingen information om kvaliteten af ​​erstatningsbordet er blevet offentliggjort i den åbne presse i Rusland, men eksistensen af ​​"svage" tabeller er uden tvivl - et eksempel er en "triviel" erstatningstabel, hvor hver værdi erstattes af sig selv. En række værker konkluderer fejlagtigt, at de hemmelige substitutionstabeller i GOST 28147-89-algoritmen kan være en del af nøglen og øge dens effektive længde (hvilket ikke er signifikant, da algoritmen har en meget stor 256-bit nøgle).

GOST 28147-89 krypteringsalgoritme, dens brug og softwareimplementering til computere på Intel x86-platformen.


Andrey Vinokurov

Beskrivelse af algoritmen.

Vilkår og betegnelser.

En beskrivelse af den russiske føderations krypteringsstandard er indeholdt i et meget interessant dokument med titlen "Kryptografisk konverteringsalgoritme GOST 28147-89". Det faktum, at der i dets navn i stedet for udtrykket "kryptering" optræder et mere generelt begreb " kryptografisk konvertering ”, er slet ikke tilfældigt. Ud over flere tæt beslægtede krypteringsprocedurer beskriver dokumentet en algoritme til generering imitationsindlæg . Sidstnævnte er intet andet end en kryptografisk kontrolkombination, det vil sige en kode genereret ud fra de originale data ved hjælp af en hemmelig nøgle med det formål at efterligningsbeskyttelse , eller beskyttelse af data mod uautoriserede ændringer.

Ved forskellige trin af GOST-algoritmer fortolkes og bruges de data, de opererer på, på forskellige måder. I nogle tilfælde behandles dataelementer som arrays af uafhængige bits, i andre tilfælde som et heltal uden fortegn, i andre som et struktureret komplekst element bestående af flere enklere elementer. For at undgå forvirring er det derfor vigtigt at blive enige om den anvendte notation.

Dataelementer i denne artikel er angivet med store bogstaver med kursiv stil (f.eks. x). Via | x| angiver størrelsen af ​​dataelementet x i stykker. Altså, hvis vi fortolker dataelementet x Som et ikke-negativt heltal kan vi skrive følgende ulighed:.

Hvis et dataelement består af flere mindre elementer, angives dette som følger: x=(x 0 ,x 1 ,…,Xn –1)=x 0 ||x 1 ||…||Xn-1. Processen med at kombinere flere dataelementer til ét kaldes sammenkædning data og er angivet med symbolet "||". Naturligvis skal følgende relation være opfyldt for størrelsen af ​​dataelementer: | x|=|x 0 |+|x 1 |+…+|Xn-1 |. Når komplekse dataelementer og sammenkædningsoperationen specificeres, er de konstituerende dataelementer anført i stigende rækkefølge. Med andre ord, hvis vi fortolker det sammensatte element og alle dets dataelementer som heltal uden fortegn, så kan vi skrive følgende lighed:

I algoritmen kan et dataelement fortolkes som et array af individuelle bits, i hvilket tilfælde bitsene er angivet med samme bogstav som arrayet, men i en version med små bogstaver, som vist i følgende eksempel:

x=(x 0 ,x 1 ,…,x n –1)=x 0 +2 1 · x 1 +…+2 n-1 · x n –1 .

Således, hvis du bemærkede, er den såkaldte GOST blevet vedtaget. "little-endian" nummerering af cifre, dvs. Inden for multi-bit dataord er individuelle bits og grupper af bit med lavere nummer mindre signifikante. Dette er direkte angivet i paragraf 1.3 i standarden: "Når binære vektorer tilføjes og skiftes cyklisk, anses de mest signifikante bit for at være bits af drev med store tal." Yderligere kræver klausuler i standarden 1.4, 2.1.1 og andre, at man begynder at fylde lagerregistrene på den virtuelle krypteringsenhed med data fra de laveste, dvs. mindre væsentlige kategorier. Nøjagtig den samme nummereringsrækkefølge er vedtaget i Intel x86-mikroprocessorarkitekturen, hvorfor der ikke kræves yderligere permutationer af bits inde i dataord, når du implementerer en chiffer i software på denne arkitektur.

Hvis en operation, der har en logisk betydning, udføres på dataelementer, så antages det, at denne operation udføres på de tilsvarende bits af elementerne. Med andre ord EN B=(-en 0 b 0 ,-en 1 b 1 ,…,en n –1 b n–1), hvor n=|EN|=|B|, og symbolet “ ” angiver en vilkårlig binær logisk operation; som regel betyder det operation eksklusiv eller , som også er operationen af ​​summeringsmodul 2:

Logikken i at konstruere en chiffer og strukturen af ​​GOST-nøgleinformation.

Hvis du omhyggeligt studerer den originale GOST 28147-89, vil du bemærke, at den indeholder en beskrivelse af algoritmer på flere niveauer. Helt i toppen er der praktiske algoritmer designet til at kryptere dataarrays og udvikle imitative inserts til dem. Alle er baseret på tre lav-niveau algoritmer, kaldet i GOST teksten cyklusser . Disse grundlæggende algoritmer omtales i denne artikel som grundlæggende cyklusser at skelne dem fra alle andre cyklusser. De har følgende navne og symboler, sidstnævnte er angivet i parentes, og deres betydning vil blive forklaret senere:

  • krypteringscyklus (32-З);
  • dekrypteringscyklus (32-P);
  • produktionscyklus af imiteret indsats (16-Z).

Til gengæld er hver af de grundlæggende cyklusser en multipel gentagelse af en enkelt procedure, der er påkrævet yderligere i dette arbejde det vigtigste trin i kryptokonvertering .

For at forstå GOST skal du således forstå følgende tre ting:

  • hvad er der sket grundlæggende trin kryptokonverteringer;
  • hvordan grundlæggende cyklusser dannes ud fra grundlæggende trin;
  • fra tre grundlæggende cyklusser alle praktiske GOST-algoritmer er lagt sammen.

Før vi går videre til at studere disse spørgsmål, bør vi tale om de vigtigste oplysninger, der bruges af GOST-algoritmer. I overensstemmelse med Kirchhoffs princip, som er opfyldt af alle moderne cifre kendt af den brede offentlighed, er det dens hemmeligholdelse, der sikrer hemmeligholdelsen af ​​den krypterede meddelelse. I GOST består nøgleinformation af to datastrukturer. Udover det faktiske nøgle , der er nødvendige for alle cifre, indeholder den også substitutionstabel . Nedenfor er de vigtigste karakteristika for nøglestrukturerne i GOST.

Det vigtigste trin i kryptokonvertering.

Det grundlæggende kryptokonverteringstrin er i det væsentlige en erklæring, der specificerer konverteringen af ​​en 64-bit datablok. En yderligere parameter for denne operatør er en 32-bit blok, der bruges som et nøgleelement. Hovedtrinsalgoritmediagrammet er vist i figur 1.


Figur 1. Skema over hovedtrinnet i kryptokonvertering af GOST 28147-89-algoritmen.

Nedenfor er forklaringer af hovedtrinsalgoritmen:

Trin 0

  • N– en konverteret 64-bit datablok, under udførelsen af ​​trinnet dens mindre ( N 1) og senior ( N 2) delene behandles som separate 32-bit heltal uden fortegn. Således kan vi skrive N=(N 1 ,N 2).
  • x– 32-bit nøgleelement;

Trin 1

Tilføjelse med nøgle. Den nederste halvdel af den konverterede blok tilføjes modulo 2 32 med nøgleelementet brugt på trinnet, resultatet overføres til næste trin;

Trin 2

Blok udskiftning. 32-bit værdien opnået i det foregående trin fortolkes som en matrix af otte 4-bit kodeblokke: S=(S 0 , S 1 , S 2 , S 3 , S 4 , S 5 , S 6 , S 7), og S 0 indeholder de 4 yngste, og S 7 – 4 mest betydningsfulde bits S.

Dernæst erstattes værdien af ​​hver af de otte blokke med en ny, som vælges fra erstatningstabellen som følger: blokværdi S iændringer til S i-te element i rækkefølge (nummerering fra nul) jeg-denne erstatningsknude (dvs. jeg linje i erstatningstabellen, nummerering også fra bunden). Med andre ord, et element fra erstatningstabellen med et rækkenummer svarende til nummeret på den blok, der udskiftes, og et kolonnenummer svarende til værdien af ​​den blok, der erstattes som et 4-bit ikke-negativt heltal, vælges som erstatning for værdien af ​​blokken. Dette gør størrelsen af ​​erstatningstabellen klar: antallet af rækker i den er lig med antallet af 4-bit elementer i en 32-bit datablok, det vil sige otte, og antallet af kolonner er lig med antallet af forskellige værdier af en 4-bit datablok, som er kendt for at være 2 4, seksten.

Trin 3

Roter 11 bits til venstre. Resultatet af det foregående trin forskydes cyklisk med 11 bit mod de mest signifikante bits og overføres til næste trin. I algoritmediagrammet angiver symbolet funktionen af ​​cyklisk at flytte sit argument 11 bit til venstre, dvs. mod de højere rækker.

Trin 4

Bitvis addition: Værdien opnået i trin 3 tilføjes bitvis modulo 2 med den øverste halvdel af blokken, der konverteres.

Trin 5

Skift langs kæden: Den nederste del af den konverterede blok flyttes til stedet for den ældre, og resultatet af det foregående trin placeres på sin plads.

Trin 6

Den resulterende værdi af den konverterede blok returneres som et resultat af udførelse af algoritmen for det primære kryptokonverteringstrin.

Grundlæggende cyklusser af kryptografiske transformationer.

Som nævnt i begyndelsen af ​​denne artikel tilhører GOST klassen af ​​blokcifre, det vil sige, at informationsbehandlingsenheden i den er en datablok. Derfor er det ret logisk at forvente, at det vil definere algoritmer til kryptografiske transformationer, det vil sige til kryptering, dekryptering og "regnskab" for en kontrolkombination af én datablok. Disse algoritmer kaldes grundlæggende cyklusser GOST, som understreger deres grundlæggende betydning for konstruktionen af ​​denne chiffer.

Grundlæggende løkker er bygget af hovedtrin kryptografisk transformation diskuteret i det foregående afsnit. Under hovedtrinnet bruges kun ét 32-bit nøgleelement, mens GOST-nøglen indeholder otte sådanne elementer. Derfor, for at nøglen kan bruges fuldt ud, skal hver af de grundlæggende sløjfer gentagne gange udføre hovedtrinnet med dets forskellige elementer. Samtidig forekommer det ret naturligt, at alle nøgleelementer i hver grundcyklus skal bruges det samme antal gange; af hensyn til chifferstyrken bør dette tal være mere end én.

Alle de antagelser, der blev gjort ovenfor, blot baseret på sund fornuft, viste sig at være korrekte. Grundlæggende loops består af gentagen udførelse hovedtrin bruger forskellige nøgleelementer og adskiller sig kun fra hinanden i antallet af tringentagelser og rækkefølgen, hvori nøgleelementerne bruges. Nedenfor er denne rækkefølge for forskellige cyklusser.

Krypteringscyklus 32-Z:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Figur 2a. Krypteringscyklusskema 32-З

Dekrypteringscyklus 32-P:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Figur 2b. Skema for 32-P dekrypteringscyklussen

Produktionscyklus af imiteret indsats 16-З:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 .


Figur 2c. Ordning af produktionscyklussen af ​​imiteret indsats 16-Z.

Hver af cyklerne har sin egen alfanumeriske betegnelse svarende til mønsteret " n-X", hvor det første element i betegnelsen ( n), angiver antallet af gentagelser af hovedtrinnet i cyklussen, og det andet betegnelseselement ( x), bogstav, angiver rækkefølgen af ​​kryptering (“Z”) eller dekryptering (“P”) i brugen af ​​nøgleelementer. Denne ordre kræver yderligere forklaring:

Dekrypteringscyklussen skal være den omvendte af krypteringscyklussen, det vil sige, sekventiel anvendelse af disse to cykler til en vilkårlig blok skal i sidste ende give den oprindelige blok, hvilket afspejles i følgende forhold: C 32-Р ( C 32-З ( T))=T, Hvor T– vilkårlig 64-bit datablok, C X ( T) – resultatet af loop-udførelsen x over datablokken T. For at opfylde denne betingelse for algoritmer, der ligner GOST, er det nødvendigt og tilstrækkeligt, at rækkefølgen af ​​brug af nøgleelementer ved de tilsvarende cyklusser er gensidigt omvendt. Det er let at verificere gyldigheden af ​​den skriftlige betingelse for den pågældende sag ved at sammenligne ovenstående sekvenser for cyklus 32-З og 32-Р. En interessant konsekvens følger af ovenstående: egenskaben ved, at en cyklus er invers i forhold til en anden cyklus, er reciprok, det vil sige, at 32-Z-cyklussen er invers i forhold til 32-P-cyklussen. Med andre ord kan kryptering af en blok af data teoretisk udføres ved hjælp af en dekrypteringscyklus, i hvilket tilfælde dekryptering af en blok af data skal udføres af en krypteringscyklus. Af de to gensidigt omvendte cyklusser kan den ene bruges til kryptering, så skal den anden bruges til at dekryptere data, men GOST 28147-89-standarden tildeler roller til cyklusser og giver ikke brugeren ret til at vælge i denne sag .

Cyklussen til fremstilling af en imitativ indsætning er halvt så lang som krypteringscyklusserne, rækkefølgen af ​​at bruge nøgleelementer i den er den samme som i de første 16 trin af krypteringscyklussen, hvilket er let at verificere ved at overveje ovenstående sekvenser, derfor denne rækkefølge i betegnelsen af ​​cyklussen er kodet med det samme bogstav "Z".

Skemaer af grundlæggende cyklusser er vist i figur 2a-c. Hver af dem tager som et argument og returnerer som et resultat en 64-bit blok af data, angivet i diagrammerne N. Symbol Trin( N,x) angiver udførelsen af ​​det vigtigste krypto-transformationstrin for en datablok N ved hjælp af nøgleelement x. Der er endnu en forskel mellem krypterings- og imitative indsættelsesberegningscyklusser, som ikke er nævnt ovenfor: i slutningen af ​​de grundlæggende krypteringscyklusser ombyttes de høje og lave dele af resultatblokken, dette er nødvendigt for deres gensidige reversibilitet.

Grundlæggende krypteringstilstande.

GOST 28147-89 giver følgende tre datakrypteringstilstande:

  • enkel udskiftning,
  • spil,
  • spil med feedback,

og en ekstra tilstand til generering af imiterede skær.

I enhver af disse tilstande behandles data i blokke på 64 bit, hvor arrayet er opdelt og udsat for kryptografisk transformation, hvorfor GOST refererer til blokchiffere. I to gamma-tilstande er det dog muligt at behandle en ufuldstændig blok af data på mindre end 8 bytes, hvilket er essentielt ved kryptering af dataarrays af vilkårlig størrelse, som måske ikke er et multiplum af 8 bytes.

Før du går videre til en diskussion af specifikke kryptografiske transformationsalgoritmer, er det nødvendigt at præcisere notationen, der bruges i diagrammerne i de følgende afsnit:

TÅh, T w – rækker af henholdsvis åbne og krypterede data;

, – jeg- sekventielle 64-bit blokke af henholdsvis åbne og krypterede data: , , den sidste blok kan være ufuldstændig: ;

n– antallet af 64-bit blokke i dataarrayet;

C X - funktion til at konvertere en 64-bit datablok ved hjælp af den grundlæggende cyklus "X" algoritme.

Nu vil vi beskrive de vigtigste krypteringstilstande:

Nem udskiftning.

Kryptering i denne tilstand består af at anvende cyklus 32-З til blokke af åbne data, dekryptering - cyklus 32-Р til blokke af krypterede data. Dette er den enkleste af tilstandene; 64-bit datablokke behandles uafhængigt af hinanden. Skemaer for krypterings- og dekrypteringsalgoritmer i simpel erstatningstilstand er vist i henholdsvis figur 3a og b; de er trivielle og behøver ikke kommentarer.


Tegning. 3a. Datakrypteringsalgoritme i simpel udskiftningstilstand


Tegning. 3b. Datadekrypteringsalgoritme i simpel udskiftningstilstand

Størrelsen af ​​arrayet af åbne eller krypterede data, der er underlagt henholdsvis kryptering eller dekryptering, skal være et multiplum af 64 bit: | T o |=| T w |=64· n , efter at have udført handlingen, ændres størrelsen af ​​det resulterende dataarray ikke.

Den enkle erstatningskrypteringstilstand har følgende funktioner:

  • Da datablokke er krypteret uafhængigt af hinanden og deres position i dataarrayet, resulterer kryptering af to identiske klartekstblokke i identiske chiffertekstblokke og omvendt. Den noterede egenskab vil give kryptanalytikeren mulighed for at konkludere om identiteten af ​​de originale datablokke, hvis han støder på identiske blokke i det krypterede dataarray, hvilket er uacceptabelt for en seriøs chiffer.
  • Hvis længden af ​​det krypterede dataarray ikke er et multiplum af 8 bytes eller 64 bit, opstår problemet med, hvordan og hvordan man supplerer den sidste ufuldstændige datablok af arrayet til de fulde 64 bits. Denne opgave er ikke så enkel, som den ser ud ved første øjekast. Indlysende løsninger som "suppler en ufuldstændig blok med nul bit" eller mere generelt "suppler en ufuldstændig blok med en fast kombination af nul og en bit" kan under visse betingelser give kryptanalytikeren mulighed for at bruge brute force metoder til at bestemme indholdet af denne meget ufuldstændige blok, og dette faktum betyder et fald i sikkerhedschiffer. Derudover vil længden af ​​chifferteksten ændre sig og øges til nærmeste heltalsmultipel på 64 bit, hvilket ofte er uønsket.

Ved første øjekast gør ovenstående funktioner det næsten umuligt at bruge den simple udskiftningstilstand, fordi den kun kan bruges til at kryptere dataarrays med en størrelse, der er et multiplum af 64 bit og ikke indeholder gentagne 64-bit blokke. Det ser ud til, at det for enhver reel data er umuligt at garantere opfyldelsen af ​​disse betingelser. Dette er næsten sandt, men der er en meget vigtig undtagelse: husk, at nøglestørrelsen er 32 bytes, og størrelsen på erstatningstabellen er 64 bytes. Derudover vil tilstedeværelsen af ​​gentagne 8-byte blokke i en nøgle eller erstatningstabel indikere deres meget dårlige kvalitet, så en sådan gentagelse kan ikke eksistere i rigtige nøgleelementer. Således fandt vi ud af, at den simple udskiftningstilstand er ganske velegnet til at kryptere nøgleinformation, især da andre tilstande er mindre bekvemme til dette formål, da de kræver et ekstra synkroniseringsdataelement - en synkroniseringsmeddelelse (se næste afsnit). Vores gæt er korrekt; GOST foreskriver brugen af ​​simpel erstatningstilstand udelukkende til kryptering af nøgledata.

Gumming.

Hvordan kan du slippe af med manglerne ved den simple udskiftningstilstand? For at gøre dette er det nødvendigt at gøre det muligt at kryptere blokke med en størrelse på mindre end 64 bit og sikre, at chiffertekstblokken afhænger af dens antal, med andre ord, randomisere krypteringsproces. I GOST opnås dette på to forskellige måder i to krypteringstilstande, hvilket giver spil . Gumming - dette er pålægning (fjernelse) af en kryptografisk skala på åbne (krypterede) data, det vil sige en sekvens af dataelementer genereret ved hjælp af en kryptografisk algoritme for at opnå krypterede (åbne) data. For at anvende gamma under kryptering og fjerne det under dekryptering, skal der anvendes gensidigt inverse binære operationer, for eksempel addition og subtraktion modulo 2 64 for 64-bit datablokke. I GOST bruges til dette formål operationen af ​​bitvis addition modulo 2, da det er det omvendte af sig selv og desuden er det mest simpelt implementeret i hardware. Gamma løser begge nævnte problemer: For det første er alle gamma-elementer forskellige for rigtige krypterede arrays, og derfor vil resultatet af kryptering af selv to identiske blokke i et dataarray være anderledes. For det andet, selvom gamma-elementerne genereres i lige store portioner af 64 bit, kan en del af en sådan blok med en størrelse svarende til størrelsen af ​​den krypterede blok anvendes.

Lad os nu gå direkte til beskrivelsen af ​​gamma-tilstanden. Gamma for denne tilstand opnås som følger: ved hjælp af en eller anden algoritmisk recurrent number sequence generator (RNGN) genereres 64-bit datablokke, som derefter konverteres ved hjælp af 32-3 cyklussen, det vil sige krypteret i den simple udskiftningstilstand, hvilket resulterer i gammablokke. På grund af det faktum, at gamma-applikation og fjernelse udføres ved hjælp af den samme bitvise eksklusive eller operation, er krypterings- og dekrypteringsalgoritmerne i gamma-tilstand identiske, deres generelle skema er vist i figur 4.

Den RGPG, der bruges til at generere skalaen, er en tilbagevendende funktion: – elementer i den tilbagevendende sekvens, f– transformationsfunktion. Derfor opstår spørgsmålet uundgåeligt om dets initialisering, det vil sige om elementet. Faktisk er dette dataelement en algoritmeparameter for gammatilstande; i diagrammerne er det betegnet som S, og kaldes i kryptografi sync send , og i vores GOST – indledende fyldning et af indkoderregistrene. Af visse grunde besluttede udviklerne af GOST ikke at bruge synkroniseringsmeddelelsen direkte til at initialisere RGFC, men resultatet af dens konvertering i henhold til 32-Z-cyklussen: . Sekvensen af ​​elementer, der genereres af RGHR, afhænger helt af dens indledende fyldning, det vil sige, at elementerne i denne sekvens er en funktion af deres antal og den indledende fyldning af RGHR: hvor f i(x)=f(f i –1 (x)), f 0 (x)=x. Under hensyntagen til transformationen ved hjælp af den simple udskiftningsalgoritme tilføjes en afhængighed af nøglen også:

Hvor Г ijeg- skalaens element, K- nøgle.

Rækkefølgen af ​​gamma-elementer, der skal bruges i gamma-tilstand, er således entydigt bestemt af nøgledataene og synkroniseringsmeddelelsen. For at krypteringsproceduren skal være reversibel, skal den samme synkroniseringsmeddelelse naturligvis bruges i krypterings- og dekrypteringsprocesserne. Af kravet om gammaens unikke karakter, hvis manglende overholdelse fører til et katastrofalt fald i chifferens styrke, følger det, at for at kryptere to forskellige dataarrays på den samme nøgle, er det nødvendigt at sikre brugen af forskellige synkroniseringsmeddelelser. Dette fører til behovet for at lagre eller transmittere synkroniseringsmeddelelsen langs kommunikationskanaler sammen med de krypterede data, selvom det i nogle specielle tilfælde kan forudbestemmes eller beregnes på en særlig måde, hvis kryptering af to arrays med den samme nøgle er udelukket.

Lad os nu se nærmere på den RGPC, der bruges i GOST til at generere gamut-elementer. Først og fremmest skal det bemærkes, at det ikke er nødvendigt at angive nogen statistiske karakteristika for den genererede talrække. RGHR blev designet af udviklerne af GOST baseret på behovet for at opfylde følgende betingelser:

  • gentagelsesperioden for talsekvensen genereret af RGPC'en bør ikke afvige meget (i procent) fra den maksimalt mulige værdi for en given blokstørrelse på 2 64;
  • tilstødende værdier produceret af RGPG skal afvige fra hinanden i hver byte, ellers vil kryptanalytikerens opgave blive forenklet;
  • RGPC'en skulle være ret nem at implementere både i hardware og software på de mest almindelige typer processorer, hvoraf de fleste er kendt for at være 32-bit.

Baseret på de anførte principper designede skaberne af GOST en meget vellykket RGHR, som har følgende egenskaber:

Hvor C 0 =1010101 16 ;

Hvor C 1 =1010104 16 ;

Sænkningen i et tal angiver dets talsystem, så konstanterne, der bruges i dette trin, er skrevet i hexadecimal.

Det andet udtryk har brug for kommentarer, da teksten i GOST indeholder noget andet: , med samme værdi af konstanten C 1 . Men længere nede i standardteksten er der givet en kommentar, at det viser sig under operationen at tage resten modulo 2 32 –1 der forstås ikke på samme måde som i matematik. Forskellen er, at ifølge GOST (2 32 –1) mod(2 32 –1)=(2 32 –1), ikke 0. Dette forenkler faktisk implementeringen af ​​formlen, og det matematisk korrekte udtryk for den er givet ovenfor.

  • gentagelsesperioden for sekvensen for den nederste del er 2 32, for den ældre del 2 32 -1, for hele sekvensen er perioden 2 32 (2 32 -1), beviset for dette faktum er meget enkelt, få det dig selv. Den første af de to formler er implementeret i en kommando, den anden, på trods af dens tilsyneladende besværlighed, i to kommandoer på alle moderne 32-bit processorer - den første kommando udfører den sædvanlige additionsmodulo 2 32 med lagring af carry bit, og den anden kommando tilføjer carry bit til den resulterende betydning.

Krypteringsalgoritmediagrammet i gammatilstand er vist i figur 4; nedenfor er forklaringer til skemaet:


Figur 4. Algoritme til kryptering (dekryptering) af data i gammatilstand.

Trin 0

Definerer inputdataene for det primære kryptokonverteringstrin:

  • T o(w) – et array af åbne (krypterede) data af vilkårlig størrelse, udsat for en kryptering (dekryptering) procedure; under proceduren konverteres arrayet i 64-bit portioner;
  • S synkronisere besked , et 64-bit dataelement, der kræves for at initialisere gammageneratoren;

Trin 1

Den indledende transformation af synkroniseringsmeddelelsen, udført for at "randomisere" den, det vil sige for at eliminere de statistiske mønstre, der er til stede i den, bruges resultatet som den indledende udfyldning af RGPC'en;

Trin 2

Et trin af RGPC-operationen, implementering af dens tilbagevendende algoritme. Under dette trin vil den ældste ( S 1) og junior ( S 0) dele af datasekvensen genereres uafhængigt af hinanden;

Trin 3

Gumming. Det næste 64-bit element, der genereres af RGPC'en, udsættes for en krypteringsprocedure ved anvendelse af cyklus 32-3, resultatet bruges som et gamma-element til at kryptere (dekryptere) den næste blok af åbne (krypterede) data af samme størrelse.

Trin 4

Resultatet af algoritmen er et krypteret (dekrypteret) dataarray.

Følgende er funktionerne i gamma som en krypteringstilstand:

  1. Identiske blokke i et åbent dataarray vil give forskellige chiffertekstblokke, når de krypteres, hvilket gør det muligt at skjule deres identitet.
  2. Da gamma-overlejring udføres bitvis, opnås kryptering af en delvis blok af data let ved at kryptere bits af denne delvise blok ved at bruge de tilsvarende bit af gamma-blokken. For at kryptere en ufuldstændig blok på 1 bit skal den mindst signifikante bit fra gammablokken ifølge standarden bruges.
  3. Synkroniseringsmeddelelsen, der bruges til kryptering, skal på en eller anden måde transmitteres til brug ved dekryptering. Dette kan opnås på følgende måder:
  • lagre eller transmittere en synkroniseringsmeddelelse sammen med et krypteret dataarray, hvilket vil føre til en stigning i størrelsen af ​​dataarrayet, når det krypteres med størrelsen af ​​synkroniseringsmeddelelsen, det vil sige med 8 bytes;
  • bruge en forudbestemt værdi af synkroniseringsmeddelelsen eller generere den synkront af kilden og modtageren i henhold til en bestemt lov, i dette tilfælde er der ingen ændring i størrelsen af ​​det transmitterede eller lagrede dataarray;

Begge metoder supplerer hinanden, og i de sjældne tilfælde, hvor den første, mest almindelige, ikke virker, kan den anden, mere eksotiske bruges. Den anden metode har meget mindre anvendelse, da det kun er muligt at lave en synkroniseringsmeddelelse forudbestemt, hvis ikke mere end et dataarray er krypteret på et givet sæt nøgleinformation, hvilket ikke sker særlig ofte. Det er heller ikke altid muligt at generere en synkroniseringsmeddelelse synkront ved kilden og modtageren af ​​et dataarray, da det kræver en streng forbindelse til noget i systemet. En tilsyneladende god idé at bruge nummeret på den transmitterede meddelelse som en synkroniseringsmeddelelse i et system til transmission af krypterede meddelelser er derfor ikke egnet, da meddelelsen kan gå tabt og ikke nå frem til modtageren, i hvilket tilfælde kildens krypteringssystemer og modtageren bliver desynkroniseret. Derfor er der i det betragtede tilfælde ikke noget alternativ til at transmittere synkroniseringsmeddelelsen sammen med den krypterede meddelelse.

På den anden side kan det modsatte eksempel gives. Lad os sige, at datakryptering bruges til at beskytte information på disken, og den er implementeret på et lavt niveau; for at sikre uafhængig adgang krypteres dataene efter sektor. I dette tilfælde er det umuligt at gemme synkroniseringsmeddelelsen sammen med de krypterede data, da sektorstørrelsen ikke kan ændres, men den kan beregnes som en funktion af diskens læsehovednummer, spor (cylinder) nummer og sektornummer på sporet. I dette tilfælde er synkroniseringsmeddelelsen bundet til sektorens position på disken, hvilket næppe vil ændre sig uden at omformatere disken, det vil sige uden at ødelægge dataene på den.

Gamma-tilstanden har en anden interessant funktion. I denne tilstand krypteres bits af dataarrayet uafhængigt af hinanden. Hver bit af chifferteksten afhænger således af den tilsvarende bit i klarteksten og selvfølgelig sekvensnummeret for biten i arrayet: . Dette indebærer, at ændring af en chiffertekstbit til den modsatte værdi vil resultere i en lignende ændring til den modsatte værdi af en almindelig tekstbit:

hvor betegner omvendt ift t bitværdi().

Denne egenskab giver en angriber mulighed for, ved at påvirke chiffertekstbits, at foretage forudsigelige og endda målrettede ændringer af den tilsvarende klartekst opnået efter dekryptering, uden at besidde den hemmelige nøgle. Dette illustrerer det velkendte faktum inden for kryptologi, at hemmeligholdelse og autenticitet er forskellige egenskaber kryptografiske systemer . Med andre ord er et kryptosystems egenskaber til at yde beskyttelse mod uautoriseret adgang til indholdet af en meddelelse og mod uautoriserede ændringer af en meddelelse uafhængige og kan kun overlappe i visse tilfælde. Det betyder, at der findes kryptografiske algoritmer, der giver en vis hemmeligholdelse af krypterede data og samtidig ikke beskytter mod ændringer på nogen måde, og omvendt, sikrer dataenes ægthed og på ingen måde begrænser muligheden for at sætte sig ind i dem. Af denne grund bør den betragtede egenskab ved gammatilstanden ikke betragtes som dens ulempe.

Gamma med feedback.

Denne tilstand ligner meget gamma-tilstanden og adskiller sig kun fra den i den måde, gamma-elementerne genereres på - det næste gamma-element genereres som et resultat af 32-3 cyklustransformationen af ​​den forrige blok af krypterede data, og for at kryptere den første blok af dataarrayet, genereres gamma-elementet som et resultat af den sammeklus. Dette opnår blokkæde-hver chiffertekstblok i denne tilstand afhænger af de tilsvarende og alle tidligere klartekstblokke. Derfor kaldes denne tilstand nogle gange spil med sammenlåsende blokke . Det faktum, at blokke er forbundet, har ingen indflydelse på chifferens styrke.

Diagrammet over krypterings- og dekrypteringsalgoritmerne i gammatilstanden med feedback er vist i figur 5 og behøver på grund af dets enkelhed ingen kommentarer.


Figur 5. Algoritme til kryptering (dekryptering) af data i gammatilstand med feedback.

Closed-loop gamma-kryptering har de samme funktioner som almindelig gamma-kryptering, bortset fra effekten af ​​korruption af krypteringstekst på den tilsvarende almindelig tekst. Til sammenligning, lad os nedskrive blokdekrypteringsfunktionerne for begge nævnte tilstande:

Gumming;

Gamma med feedback;

Hvis ændringer i visse bits af chifferteksten i den almindelige gammatilstand kun påvirker de tilsvarende bits af klarteksten, så er billedet i feedback-gammatilstanden noget mere kompliceret. Som det kan ses af den tilsvarende ligning, afhænger den åbne datablok af de tilsvarende og tidligere krypterede datablokke, når en datablok dekrypteres i gammatilstand med lukket sløjfe. Derfor, hvis du introducerer forvrængninger i en krypteret blok, vil to blokke af åbne data efter dekryptering blive forvrænget - den tilsvarende og den, der følger efter den, og forvrængningerne i det første tilfælde vil være af samme karakter som i gamma-tilstanden , og i det andet tilfælde - som i den nemme udskiftning. Med andre ord, i den tilsvarende blok af åbne data vil de samme bits blive ødelagt som i blokken af ​​krypterede data, og i den næste blok af åbne data er alle bits uafhængige af hinanden med sandsynlighed 1 / 2 vil ændre deres værdier.

Udvikling af en simuleret indsats til dataarrayet.

I tidligere afsnit diskuterede vi virkningen af ​​korruption af krypterede data på de tilsvarende almindelige data. Vi har fastslået, at ved dekryptering i den simple udskiftningstilstand, viser den tilsvarende blok af åbne data sig at være forvrænget på en uforudsigelig måde, og ved dekryptering af en blok i gammatilstanden er ændringerne forudsigelige. I gammatilstand med lukket sløjfe bliver to blokke forvrænget, den ene på en forudsigelig måde og den anden på en uforudsigelig måde. Betyder det, at gamma-tilstanden er dårlig fra et synspunkt om beskyttelse mod pålæggelse af falske data, og de simple udskiftnings- og feedback-gamma-tilstande er gode? - I intet tilfælde. Når man analyserer denne situation, er det nødvendigt at tage i betragtning, at uforudsigelige ændringer i en dekrypteret datablok kun kan detekteres, hvis de samme data er redundante, og jo større grad af redundans, jo mere sandsynligt er detektionen af ​​forvrængning. Meget stor redundans forekommer for eksempel for tekster på naturlige og kunstige sprog, i dette tilfælde opdages forvrængning næsten uundgåeligt. Men i andre tilfælde, når for eksempel komprimerede digitaliserede lydbilleder forvrænges, vil vi blot få et andet billede, som vores øre kan opfatte. Forvrængningen vil i dette tilfælde forblive uopdaget, medmindre der naturligvis er a priori information om lydens art. Konklusionen her er denne: da nogle krypteringstilstandes evne til at detektere forvrængninger indført i krypterede data i væsentlig grad afhænger af tilstedeværelsen og graden af ​​redundans af de krypterede data, er denne evne ikke en iboende egenskab ved de tilsvarende tilstande og kan ikke betragtes som deres fordel.

For at løse problemet med at detektere forvrængninger i et krypteret dataarray med en given sandsynlighed sørger GOST for en ekstra måde for kryptografisk transformation - udviklingen af ​​imitativ indsættelse. Imitationsindlæg er en kontrolkombination, der afhænger af åbne data og hemmelig nøgleinformation. Formålet med at bruge imitativ indsættelse er at detektere alle utilsigtede eller tilsigtede ændringer i informationsarrayet. Problemet beskrevet i det foregående afsnit kan med succes løses ved at tilføje imitative indsættelser til de krypterede data. For en potentiel angriber er følgende to opgaver næsten umulige at løse, hvis han ikke har nøglen:

  • beregning af imitativ indsættelse for en given åben række af information;
  • valg af åbne data for en given simuleringsindsats;

Diagrammet over algoritmen til udvikling af en simuleret indsats er vist i figur 6.


Figur 6. Algoritme til udvikling af et simuleret insert til et dataarray.

En del af blokken modtaget ved udgangen tages som en simuleret indsættelse, normalt dens 32 mindst signifikante bit. Når man vælger størrelsen på en falsk indsats, skal man tage højde for, at sandsynligheden for succesfuld indførelse af falske data er lig med 2 –| jeg | pr. selektionsforsøg, hvis angriberen ikke har en mere effektiv selektionsmetode til sin rådighed end simpelt gætte. Når du bruger en 32-bit simuleret indsats, er denne sandsynlighed lig med

Diskussion af GOST kryptografiske algoritmer.

Kryptografisk styrke af GOST.

Når man vælger en kryptografisk algoritme til brug i en bestemt udvikling, er en af ​​de afgørende faktorer dens styrke, det vil sige modstand mod modstanders forsøg på at afsløre den. Spørgsmålet om en chiffers styrke, ved nærmere undersøgelse, kommer ned til to indbyrdes forbundne spørgsmål:

  • Er det overhovedet muligt at knække denne chiffer?
  • hvis ja, hvor svært er det praktisk at gøre det?

Ciferer, der slet ikke kan brydes, kaldes absolut eller teoretisk stærke. Eksistensen af ​​sådanne cifre er bevist af Shannons sætning, men prisen for denne styrke er behovet for at bruge en nøgle til at kryptere hver meddelelse, der ikke er mindre i størrelse end selve meddelelsen. I alle tilfælde, med undtagelse af en række specielle, er denne pris for høj, så i praksis bruges hovedsageligt cifre, der ikke er absolut sikre. Således kan de mest almindelige krypteringsskemaer brydes på en begrænset tid, eller mere præcist, i et begrænset antal trin, som hver er en operation på tal. For dem er det vigtigste koncept praktisk vedholdenhed, som udtrykker den praktiske vanskelighed ved deres opdagelse. Et kvantitativt mål for denne vanskelighed kan være antallet af elementære aritmetiske og logiske operationer, der skal udføres for at åbne chifferen, det vil sige for at bestemme den tilsvarende klartekst for en given chiffertekst med en sandsynlighed ikke mindre end en given værdi. Samtidig kan kryptoanalytikeren ud over det dekrypterede dataarray have blokke af åbne data og tilsvarende krypterede data, eller endda evnen til at opnå tilsvarende krypterede data for enhver åben data, han vælger - afhængigt af de anførte og mange andre uspecificerede forhold skelnes der adskilte typer af kryptoanalyse.

Alle moderne kryptosystemer er bygget på Kirchhoff-princippet, det vil sige, at hemmeligholdelsen af ​​krypterede meddelelser er bestemt af nøglehemmeligheden. Dette betyder, at selvom krypteringsalgoritmen selv er kendt af kryptanalytikeren, er han ikke desto mindre i stand til at dekryptere beskeden, hvis han ikke har den passende nøgle. En chiffer anses for at være godt designet, hvis der ikke er nogen måde at bryde den mere effektivt end ved brute force over hele nøglerummet, dvs. over alle mulige nøgleværdier. GOST svarer sandsynligvis til dette princip - i løbet af årene med intensiv forskning er der ikke blevet foreslået en eneste effektiv metode til dets kryptoanalyse. Med hensyn til styrke er den mange størrelsesordener overlegen i forhold til den tidligere amerikanske krypteringsstandard, DES.

GOST bruger en 256-bit nøgle, og lydstyrken af ​​nøglerummet er 2.256. Ingen af ​​de elektroniske enheder, der i øjeblikket eksisterer eller forventes at blive implementeret i den nærmeste fremtid, kan bruges til at hente en nøgle på mindre end mange hundrede år. Denne værdi er blevet de facto nøglestørrelsesstandard for symmetriske kryptografiske algoritmer i disse dage, og den nye amerikanske krypteringsstandard understøtter det også. Den tidligere amerikanske standard, DES, er med sin reelle nøglestørrelse på 56 bit og volumen af ​​nøglerum på kun 2 56 ikke længere tilstrækkelig stabil i lyset af mulighederne i moderne computerværktøjer. Dette blev demonstreret i slutningen af ​​90'erne af adskillige vellykkede brute force-forsøg på at bryde DES. Derudover var DES modtagelig for specielle kryptoanalyseteknikker såsom differentiel og lineær. I denne forbindelse kan DES være af forskningsmæssig eller videnskabelig interesse snarere end praktisk interesse. I 1998 blev dens kryptografiske svaghed officielt anerkendt - US National Institute of Standards anbefalede brugen af ​​tredobbelt DES-kryptering. Og i slutningen af ​​2001 blev en ny amerikansk krypteringsstandard, AES, officielt godkendt, bygget på forskellige principper og fri for manglerne fra sin forgænger.

Noter om GOST-arkitektur.

Det er velkendt, at den indenlandske krypteringsstandard er en repræsentant for en hel familie af chiffer bygget på de samme principper. Dens mest berømte "slægtning" er den tidligere amerikanske krypteringsstandard, DES-algoritmen. Alle disse cifre, ligesom GOST, indeholder tre-niveau algoritmer. I kernen er der altid et vist "grundlæggende trin", på grundlag af hvilket "grundkredsløb" bygges på en lignende måde, og på grundlag heraf opbygges praktiske procedurer for kryptering og udvikling af imitative indstik. Således ligger specificiteten af ​​hver af chifferne i denne familie netop i dets hovedtrin, eller rettere endda i sin del. Selvom arkitekturen af ​​klassiske blokcifre, som GOST refererer til, ligger langt uden for denne artikels omfang, er det stadig værd at sige et par ord om det.

Algoritmerne for "hovedtrinene i kryptotransformation" for cifre som GOST er bygget på en identisk måde, og denne arkitektur kaldes afbalanceret Feistel-netværk (afbalanceret Feistel-netværk) efter navnet på den person, der først foreslog det. Datakonverteringsplan på én cyklus, eller som det almindeligvis kaldes, rund , er vist i figur 7.


Figur 7. Indhold af hovedtrinnet i kryptotransformation for blokcifre, der ligner GOST.

En blok af jævn størrelse leveres til indgangen til hovedtrinnet, hvis højere og nedre halvdele behandles separat fra hinanden. Under konverteringen placeres den nederste halvdel af blokken i stedet for den ældre halvdel, og den ældre halvdel kombineres ved hjælp af den bitvise operation eksklusiv eller ” med det resultat at beregne en bestemt funktion i stedet for den yngste. Denne funktion tager som argument den lave halvdel af blokken og nøgleinformationselementet ( x), er indholdsdelen af ​​chifferen og kaldes krypteringsfunktion . Af forskellige årsager viste det sig at være fordelagtigt at opdele den krypterede blok i to lige store dele: | N 1 |=|N 2 | – dette faktum afspejles af ordet "balanceret" i arkitekturens navn. Kryptering af ubalancerede netværk bruges dog også fra tid til anden, dog ikke så ofte som afbalancerede. Derudover kræver overvejelser om chifferstyrke, at størrelsen af ​​nøgleelementet ikke skal være mindre end størrelsen af ​​halvdelen af ​​blokken: i GOST er alle tre størrelser lig med 32 bit .

Hvis vi anvender ovenstående til diagrammet over hovedtrinet i GOST-algoritmen, vil det blive indlysende, at blokke 1,2,3 af algoritmen (se fig. 1) bestemmer beregningen af ​​dens krypteringsfunktion, og blokke 4 og 5 specificer dannelsen af ​​outputblokken for hovedtrinnet baseret på indholdet af inputblokken og krypteringsfunktionsværdier. Flere detaljer om arkitekturen af ​​moderne blokcifre med en hemmelig nøgle kan findes i klassiske værker, eller i en tilpasset form, i mine værker.

I det foregående afsnit sammenlignede vi allerede DES og GOST med hensyn til holdbarhed, nu vil vi sammenligne dem med hensyn til funktionelt indhold og nem implementering. I GOST-krypteringscyklusser gentages hovedtrinnet 32 ​​gange, for DES er denne værdi 16. Selve GOST-krypteringsfunktionen er dog meget enklere end den tilsvarende DES-funktion, som indeholder mange uregelmæssige bitpermutationer. Disse operationer er ekstremt ineffektive på moderne ikke-specialiserede processorer. GOST indeholder ikke sådanne operationer, så det er meget mere praktisk til softwareimplementering.

Ingen af ​​DES-implementeringerne til Intel x86-platformen, der er gennemgået af forfatteren, når endda halvdelen af ​​ydeevnen af ​​den GOST-implementering, der foreslås i denne artikel, på trods af den to gange kortere cyklus. Alt ovenstående indikerer, at udviklerne af GOST tog hensyn til både de positive og negative aspekter af DES og også mere realistisk vurderede de nuværende og fremtidige muligheder for kryptoanalyse. Det er dog ikke længere relevant at tage DES som grundlag, når man sammenligner effektiviteten af ​​chifferimplementeringer. Den nye amerikanske krypteringsstandard klarer sig meget bedre med effektivitet - med den samme nøglestørrelse som GOST (256 bit) fungerer AES omkring 14% hurtigere - dette er sammenlignet med antallet af "elementære operationer". Derudover kan GOST praktisk talt ikke paralleliseres, mens AES har meget flere muligheder i denne henseende. På nogle arkitekturer kan denne fordel ved AES være mindre, på andre kan den være større. Så på en Intel Pentium-processor når den 28%. Detaljer kan findes i.

Krav til kvaliteten af ​​nøgleinformation og nøglekilder.

Ikke alle nøgler og udskiftningstabeller giver maksimal krypteringsstyrke. Hver krypteringsalgoritme har sine egne kriterier for evaluering af nøgleinformation. For DES-algoritmen er det således kendt, at der er såkaldte " svage nøgler ", når det bruges, er forbindelsen mellem åbne og krypterede data ikke maskeret tilstrækkeligt, og chifferen brydes relativt let.

Hvis et omfattende svar på spørgsmålet om kvalitetskriterierne for GOST-nøgler og erstatningstabeller overhovedet kan fås hvor som helst, kan det kun være fra udviklerne af algoritmen. De relevante data blev ikke offentliggjort i den åbne presse. I henhold til den etablerede procedure skal nøgledata modtaget fra en autoriseret organisation dog bruges til at kryptere klassificeret information. Indirekte kan dette indikere tilstedeværelsen af ​​metoder til kontrol af nøgledata for lus. Hvis tilstedeværelsen af ​​svage nøgler i GOST er et diskutabelt problem, så er tilstedeværelsen af ​​svage erstatningsenheder hævet over enhver tvivl. Det er klart, at den "trivielle" udskiftningstabel, ifølge hvilken enhver værdi erstattes af sig selv, er så svag, at når du bruger den, kan chifferen simpelthen knækkes, uanset hvad nøglen er.

Som nævnt ovenfor er kriterier for vurdering af nøgleoplysninger ikke tilgængelige, men der kan stadig gøres nogle generelle overvejelser om dem.

Nøgle

Nøglen skal være en række statistisk uafhængige bits, der med lige stor sandsynlighed antager værdierne 0 og 1. Det kan ikke helt udelukkes, at nogle specifikke nøgleværdier kan vise sig at være "svage", dvs. ciffer giver muligvis ikke det specificerede styrkeniveau, hvis det bruges. Men formodentlig er andelen af ​​sådanne værdier i den samlede masse af alle mulige nøgler ubetydelig lille. I det mindste har intensiv forskning i chifferen endnu ikke afsløret en eneste sådan nøgle for nogen af ​​de kendte (dvs. foreslået af FAPSI) substitutionstabeller. Derfor vil nøgler genereret ved hjælp af en virkelig tilfældig talsensor være af høj kvalitet med en sandsynlighed, der adskiller sig fra enhed med en ubetydelig lille mængde. Hvis nøglerne genereres ved hjælp af en pseudo-tilfældig talgenerator, skal den anvendte generator give ovenstående statistiske egenskaber og desuden have høj kryptografisk styrke - ikke mindre end GOST selv. Med andre ord bør opgaven med at bestemme de manglende medlemmer af sekvensen af ​​elementer genereret af generatoren ikke være enklere end opgaven med at bryde chifferen. Derudover kan forskellige statistiske kriterier bruges til at afvise nøgler med dårlige statistiske egenskaber. I praksis er to kriterier sædvanligvis tilstrækkelige: for at kontrollere den ligesandsynlige fordeling af nøglebit mellem værdierne 0 og 1, bruges Pearson-testen (chi-kvadrat) normalt, og for at kontrollere uafhængigheden af ​​nøglebits, bruges køretesten . Du kan læse om de nævnte kriterier i lærebøger eller opslagsbøger om matematisk statistik.

Den bedste tilgang til at generere nøgler ville være at bruge hardware-mellemtonesensorer, men dette er ikke altid acceptabelt af økonomiske årsager. Når der genereres et lille array af nøgleinformation, er et rimeligt alternativ til at bruge en sådan sensor metoden "elektronisk roulette", som er meget udbredt i praksis, når den næste genererede del af tilfældige bit afhænger af det tidspunkt, hvor operatøren trykker på en bestemt tast på computerens tastatur. I dette skema er kilden til tilfældige data computerbrugeren, eller mere præcist, tidsegenskaberne for hans reaktion. I dette tilfælde kan der kun genereres nogle få bits af tilfældige data pr. tastetryk, så den samlede hastighed for generering af nøgleinformation er lav - op til flere bits per sekund. Denne tilgang er naturligvis ikke egnet til at opnå store arrays af nøgler.

I det tilfælde, hvor det er nødvendigt at generere et stort udvalg af nøgleoplysninger, er brugen af ​​forskellige softwaresensorer med pseudo-tilfældige tal mulig og meget udbredt. Da en sådan sensor kræver høje niveauer af kryptografisk styrke, er det naturligt at bruge gammageneratoren til selve chifferen som den - vi "skærer" simpelthen gamma genereret af chifferen i "stykker" af den nødvendige størrelse, for GOST - 32 bytes. Til denne tilgang har vi selvfølgelig brug for en "masternøgle", som vi kan få ved hjælp af den elektroniske roulettemetode beskrevet ovenfor, og med dens hjælp, ved hjælp af en chiffer i gammageneratortilstand, får vi en række nøgleoplysninger af størrelsen vi behøver. Så disse to metoder til at generere nøgler - "manuel" og "algoritmisk" - arbejder i tandem og komplementerer hinanden. Nøglegenereringsordninger i "low-budget" informationskryptografiske beskyttelsessystemer er næsten altid bygget på dette princip.

Udskiftningstabel

Udskiftningstabellen er et langsigtet nøgleelement, det vil sige, at den er gyldig i en meget længere periode end en enkelt nøgle. Det antages, at det er fælles for alle krypteringsnoder inden for det samme kryptografiske beskyttelsessystem. Selvom substitutionstabellens fortrolighed krænkes, forbliver chifferens styrke ekstremt høj og falder ikke under den tilladte grænse. Derfor er der ikke noget særligt behov for at holde bordet hemmeligt, og i de fleste kommercielle applikationer af GOST gøres dette. På den anden side er substitutionstabellen et kritisk element for at sikre styrken af ​​hele chifferen. Valg af den forkerte tabel kan resultere i, at chifferen let bliver brudt af kendte kryptoanalyseteknikker. Kriterierne for udvikling af erstatningsenheder er en nøje bevogtet hemmelighed, og FAPSI vil sandsynligvis ikke dele den med offentligheden i den nærmeste overskuelige fremtid. I sidste ende kræver det en enorm mængde arbejde at fortælle, om en given substitutionstabel er god eller dårlig - mange tusinde mand- og maskintimer. Når først den er valgt og brugt, skal en tabel udskiftes, hvis og kun hvis den chiffer, der bruger den, viste sig at være sårbar over for en eller anden form for kryptoanalyse. Derfor ville det bedste valg for den gennemsnitlige krypteringsbruger være at tage en af ​​flere tabeller, der er blevet offentlige. For eksempel fra standarden for hash-funktionen, også kendt som "centralbank"-funktionen; information om disse tabeller kan findes i den åbne presse og endda på internettet, hvis man ser godt nok efter.

For dem, der ikke er vant til at tage den lette vej, er nedenfor en generel ordning for at opnå borde af høj kvalitet:

  1. Ved hjælp af en eller anden teknik udvikler du et sæt på otte erstatningsenheder med garanterede ikke-linearitetskarakteristika. Der er flere sådanne teknikker, en af ​​dem er brugen af ​​såkaldte bøjede funktioner.
  2. Du kontrollerer opfyldelsen af ​​de enkleste "kvalitetskriterier" - for eksempel dem, der er offentliggjort for DES-erstatningsnoder. Her er et par mere generelle overvejelser i denne henseende: Hver substitutionsnode kan beskrives med fire logiske funktioner ud fra fire logiske argumenter. Hvis disse funktioner er skrevet ind minimal form(dvs. med den mindst mulige udtrykslængde) vil ikke være kompleks nok, en sådan erstatningsknude afvises. Derudover skal de enkelte funktioner inden for hele substitutionstabellen være tilstrækkeligt forskellige fra hinanden. På dette stadium er mange borde af åbenlyst lav kvalitet elimineret.
  3. For en chiffer med tabeller efter eget valg skal du bygge forskellige runde modeller svarende til forskellige typer kryptoanalyse og måle de tilsvarende "profil"-karakteristika. Så for lineær kryptoanalyse skal du bygge en lineær statistisk analog af krypteringsrunden og beregne "profil"-karakteristikken - en indikator for ikke-linearitet. Hvis det er utilstrækkeligt, afvises erstatningsbordet.
  4. Til sidst, ved hjælp af resultaterne fra det foregående afsnit, udsætter du chifferen med den tabel, du har valgt, for intensiv research - et forsøg på kryptoanalyse ved hjælp af alle kendte metoder. Denne fase er den sværeste og mest tidskrævende. Men hvis det er lavet med høj kvalitet, så kan det med en høj grad af sandsynlighed fastslås, at chifferen med de tabeller, du har valgt, ikke vil blive knækket af rene dødelige, og det er muligt, vil være for hård for intelligensen tjenester.

Du kan dog gøre det meget enklere. Sagen er den, at jo flere runder der er i en chiffer, jo mindre indflydelse har styrkeegenskaberne for en runde på styrken af ​​hele chifferen. GOST har hele 32 runder - flere end i næsten alle cifre med en lignende arkitektur. Derfor er det til de fleste indenlandske og kommercielle applikationer tilstrækkeligt at opnå substitutionsnoder som uafhængige tilfældige permutationer af tal fra 0 til 15. Dette kan praktisk implementeres, for eksempel ved at blande et spil med seksten kort, som hver er tildelt et af værdierne for det angivne område.

Med hensyn til substitutionstabellen skal der bemærkes endnu et interessant faktum. For reversibiliteten af ​​"32-З" og "32-Р" krypteringscyklusser er det ikke påkrævet, at erstatningsknuderne er permutationer af tal fra 0 til 15. Alt fungerer, selvom erstatningsknuden har duplikerede elementer, og erstatningen bestemt af en sådan node , er irreversibel, men i dette tilfælde reduceres chifferens styrke. Hvorfor det er præcis sådan, diskuteres ikke i denne artikel, men det er ikke svært at verificere selve kendsgerningen. For at gøre dette er det nok først at prøve at kryptere og derefter dekryptere en blok af data ved hjælp af en sådan "ufuldstændig" erstatningstabel, hvis noder indeholder duplikerede værdier.

Variationer over temaet GOST

Meget ofte, til brug i et kryptografisk databeskyttelsessystem, kræves en algoritme med en hurtigere implementeringshastighed end GOST, og så høj kryptografisk styrke er ikke påkrævet. Et typisk eksempel på sådanne opgaver er forskellige slags elektroniske aktiehandelssystemer, der administrerer handelssessioner i realtid. Her kræves de anvendte krypteringsalgoritmer for at gøre det umuligt at dekryptere systemets operationelle data under sessionen (data om afgivne ordrer, afsluttede transaktioner osv.), efter deres udløb er disse data som regel ikke længere ubrugelig for angribere. Med andre ord kræves en garanteret holdbarhed på kun et par timer - det er den typiske varighed af en handelssession. Det er klart, at brug af en fuldgyldig GOST i denne situation ville være at skyde spurve med en kanon.

Hvad skal man gøre i dette og lignende tilfælde for at øge krypteringshastigheden? Svaret ligger på overfladen - brug en modifikation af chifferen med færre hovedtrin (runder) i de grundlæggende cyklusser. De gange vi reducerer antallet af krypteringsrunder, øges ydeevnen med samme mængde. Denne ændring kan opnås på to måder - ved at reducere længden af ​​nøglen og reducere antallet af "gennemgangscyklusser" af nøglen. Husk, at antallet af grundlæggende trin i grundlæggende krypteringscyklusser er N=n·m, Hvor n– antallet af 32-bit elementer i nøglen, m– antal cyklusser med brug af nøgleelementer i standarden n=8, m=4. Du kan reducere et hvilket som helst af disse tal, men den enkleste mulighed er at reducere længden af ​​nøglen uden at påvirke den måde, den bruges på.

Det er klart, at prisen for at fremskynde arbejdet vil være et fald i chifferens styrke. Den største vanskelighed er, at det er ret vanskeligt mere eller mindre præcist at vurdere størrelsen af ​​denne reduktion. Det er klart, at den eneste mulige måde at gøre dette på er at udføre en fuldskala undersøgelse af chiffervarianter med reducerede kryptografiske konverteringscyklusser. Det er klart, at dette for det første kræver brug af klassificerede oplysninger, som kun ejes af udviklerne af GOST, og for det andet er det meget arbejdskrævende. Derfor vil vi nu forsøge at give en meget, meget grov vurdering, kun baseret på generelle mønstre.

Hvad angår chifferens modstand mod cracking ved hjælp af "omfattende" metoder, det vil sige mod et "brute force" angreb, er alt mere eller mindre klart her: en nøgle på 64 bit er et sted på grænsen til at være tilgængelig for denne type af angreb, er en chiffer med en nøgle på 96 bit eller højere (husk at nøglen skal indeholde et heltal på 32-bit elementer) ret modstandsdygtig overfor det. For flere år siden blev den tidligere amerikanske krypteringsstandard, DES, gentagne gange hacket af brute force-metoder – først blev den hacket af et computernetværk organiseret på basis af det globale internet, og derefter af et specialiseret netværk, dvs. en computer designet specielt til dette formål. Lad os antage, at standardversionen af ​​GOST, når den implementeres i software på moderne processorer, fungerer fire gange hurtigere end DES. Så vil den 8-runde "reducerede GOST" virke 16 gange hurtigere end DES. Lad os også antage, at i tiden siden DES-hacket er computerydelsen firedoblet ifølge Moores lov. Som et resultat får vi, at det nu er 64 gange hurtigere at kontrollere en 64-bit nøgle for den "reducerede GOST" med otte cyklusser end at kontrollere en DES nøgle ad gangen. Således er fordelen ved denne version af GOST frem for DES med hensyn til kompleksiteten af ​​et brute-force-angreb reduceret fra 2 64-56 = 2 8 = 256 til 256 / 64 = 4 gange. Enig, dette er en meget illusorisk forskel, næsten ingenting.

Det er meget vanskeligere at vurdere modstanden af ​​svækkede GOST-modifikationer over for "intensive" metoder til kryptoanalyse. Et generelt mønster kan dog også spores her. Faktum er, at "profil"-egenskaberne for mange af de mest kraftfulde typer af kryptoanalyse i dag afhænger eksponentielt af antallet af krypteringsrunder. Så for lineær kryptoanalyse (LCA) vil dette være en linearitetskarakteristik L :

Hvor C og er konstanter, R er antallet af runder. Et lignende forhold eksisterer for differentiel kryptoanalyse. I deres "fysiske betydning" er alle karakteristika af denne art sandsynligheder. Typisk er mængden af ​​indledende data, der kræves til kryptoanalyse, og dens kompleksitet omvendt proportional med sådanne karakteristika. Det følger heraf, at disse arbejdsintensitetsindikatorer vokser eksponentielt med antallet af grundlæggende krypteringstrin. Derfor, når antallet af runder reduceres flere gange, vil kompleksiteten af ​​de mest kendte typer analyser ændre sig som, meget tilnærmelsesvis og groft, roden til denne potens fra den oprindelige mængde. Dette er et meget stort fald i holdbarhed.

På den anden side er GOST designet med en stor sikkerhedsmargin og er i dag modstandsdygtig over for alle kendte former for kryptoanalyse, inklusive differentiel og lineær. I forhold til LCA betyder det, at for dens succesfulde implementering kræves der flere "åben blok-krypteret blok"-par end "eksisterer i naturen", det vil sige mere end 2 64 . Under hensyntagen til ovenstående betyder det, at for en vellykket LCA af en 16-runders GOST kræves der mindst blokke eller 2 35 bytes eller 32 GB data, og for en 8-runder mindst blokke eller 2 19 bytes eller 0,5 MB.

Konklusionerne fra alt ovenstående er givet i følgende tabel, som opsummerer egenskaberne ved de reducerede versioner af GOST.

Antal runder Nøglestørrelse, bits Præstationsindeks Sandsynlige karakteristika for chifferen (meget groft skøn)
24 192 1,33 Modstandsdygtig over for de fleste kendte typer CA, eller på randen af ​​resistens. Den praktiske implementering af CA er umulig på grund af høje krav til indledende data og arbejdsintensitet.
16 128 2 Teoretisk set er det ustabilt for nogle typer kryptoanalyse, men deres praktiske implementering er i de fleste tilfælde vanskelig på grund af høje krav til kildedata og arbejdsintensitet.
12 95 2,67 Det er ikke modstandsdygtigt over for nogle kendte former for kryptoanalyse, men er velegnet til at sikre hemmeligholdelse af små mængder data (op til titusinder eller hundreder af kilobytes) i en kort periode.
8 64 4 Det er ikke modstandsdygtigt over for nogle kendte former for kryptoanalyse, men er velegnet til at sikre hemmeligholdelsen af ​​små mængder data (op til snesevis af kilobytes) i en kort periode.

De sidste to muligheder, med 12 og 8 runder, er i stand til at give meget, meget begrænset tidsbeskyttelse. Deres brug er kun berettiget i opgaver, hvor der kun kræves kortvarig hemmeligholdelse af de beskyttede data, i størrelsesordenen flere timer. Et muligt anvendelsesområde for disse svage chiffervarianter er at blokere UDP-trafik fra elektroniske børshandelssystemer. I dette tilfælde krypteres hver datapakke (datagram, det midterste "D" fra forkortelsen UDP) ved hjælp af en separat 64-bit nøgle, og selve nøglen krypteres med en sessionsnøgle (en nøgle, hvis omfang er én kommunikationssession mellem to computere) og transmitteres sammen med data.

Før jeg afslutter med de reducerede versioner af GOST, vil jeg sige, at alle ovenstående overvejelser er meget spekulative. Standarden giver holdbarhed til kun én variant med 32 runder. Og ingen kan give dig garantier for, at modstanden af ​​reducerede versioner af chifferen mod revner vil ændre sig på den måde, der er angivet ovenfor. Hvis du alligevel beslutter dig for at bruge dem i din udvikling, så husk, at du er trådt på meget gyngende jord, som når som helst kan glide ud under dine fødder. Da krypteringshastighed er et kritisk problem for dig, bør du måske overveje at bruge en hurtigere krypteringskode eller en mere kraftfuld computer? En anden overvejelse, hvorfor dette er værd at gøre, er, at svækkede versioner af GOST vil være mest følsomme over for kvaliteten af ​​de anvendte erstatningsenheder.

Det spørgsmål, der overvejes, har også en bagside. Hvad hvis krypteringshastigheden ikke er kritisk, men styrkekravene er meget strenge? GOSTs modstand kan øges på to måder - lad os kalde dem "omfattende" og "intensive". Den første af dem er intet andet end en simpel stigning i antallet af krypteringsrunder. Det er ikke helt klart for mig, hvorfor dette faktisk kan være nødvendigt, da den indenlandske standard allerede giver den nødvendige holdbarhed uden dette. Men hvis du lider af paranoia mere end det krævede niveau (og alle "informationsforsvarere" er simpelthen forpligtet til at lide af det, dette er en betingelse for professionel egnethed, det eneste spørgsmål er alvoren af ​​sagen:), vil dette hjælpe du falder lidt til ro. Hvis du ikke er sikker på denne KGB-chiffer eller den substitutionstabel, du bruger, skal du blot fordoble, firdoble osv. antal runder – vælg multipliciteten baseret på sværhedsgraden af ​​din sag. Denne tilgang giver dig mulighed for virkelig at øge krypteringsstyrken - hvis tidligere krypteringsanalyse simpelthen var umuligt, nu er det umuligt i kvadrat!

Et mere vanskeligt og interessant spørgsmål er, om det er muligt at øge chifferens styrke uden at ændre antallet og strukturen af ​​de vigtigste krypteringstrin. Overraskende nok er svaret på dette positivt, selvom vi igen træder på spekulationernes vaklende grund. Faktum er, at i GOST, ved hovedkonverteringstrinnet, er det meningen, at det skal erstatte 4 gange 4 bit, men i praksis (vi vil tale om dette senere) udfører alle softwareimplementeringer erstatningsbyte for byte, dvs. 8 gange 8 bit - dette gøres af effektivitetsmæssige årsager. Hvis vi straks designer en sådan erstatning som en 8-bit, vil vi forbedre ydeevnen markant af en runde. For det første vil "diffusions"-karakteristikken eller "lavine"-indikatoren stige - en bit af kildedataene og/eller nøglen vil påvirke et større antal bits af resultatet. For det andet, for større udskiftningsknuder, kan lavere differentielle og lineære karakteristika opnås, og derved reducere chifferens modtagelighed for lignende typer kryptoanalyse. Dette gælder især for reducerede GOST-cyklusser, og for 8 og 12-runde muligheder er et sådant trin simpelthen nødvendigt. Dette vil i nogen grad kompensere for tabet af holdbarhed i dem fra reduktionen i antallet af runder. Det, der gør det vanskeligt at bruge denne teknik, er, at du selv bliver nødt til at designe sådanne "forstørrede" udskiftningsenheder. Og også det faktum, at større enheder generelt er meget sværere at konstruere end mindre.

Ikke-standard brug af standarden.

Selvfølgelig er hovedformålet med GOST kryptografiske algoritmer kryptering og databeskyttelse. De kan dog også finde andre applikationer relateret, naturligvis, til informationssikkerhed. Lad os kort tale om dem:

1. Til kryptering i gamma-tilstand sørger GOST for udvikling af en kryptografisk gamma - en sekvens af bits med gode statistiske egenskaber og høj kryptografisk styrke. Denne gamma bruges derefter til at ændre åbne data, hvilket resulterer i krypterede data. Dette er dog ikke den eneste mulige anvendelse af det kryptografiske gamma. Faktum er, at algoritmen til dens generering er en pseudo-tilfældig talsekvensgenerator (PRNG) med fremragende egenskaber. Selvfølgelig er det ikke særlig rimeligt at bruge en sådan PRNG, hvor kun de statistiske karakteristika for den genererede sekvens er påkrævet, men kryptografisk styrke ikke er nødvendig - i disse tilfælde er der meget mere effektive generatorer. Men til forskellige applikationer relateret til informationssikkerhed vil en sådan kilde være meget nyttig:

  • Som nævnt ovenfor kan gamma bruges som et "råmateriale" til at generere nøgler. For at gøre dette skal du bare have et gammasegment af den nødvendige længde - 32 bytes. På den måde kan nøgler laves efter behov og de skal ikke opbevares - skal der bruges en sådan nøgle igen, vil det være ret nemt at generere den igen. Du skal bare huske, hvilken nøgle den oprindeligt blev genereret på, hvilken synkroniseringsmeddelelse der blev brugt, og hvilken byte af den genererede gamma nøglen begyndte med. Alle oplysninger undtagen den anvendte nøgle er uklassificerede. Denne tilgang vil gøre det nemt at styre et ret komplekst og forgrenet nøglesystem ved hjælp af kun én "hovednøgle".
  • I lighed med den foregående kan gamma bruges som det indledende "råmateriale" til generering af adgangskoder. Her kan spørgsmålet opstå: hvorfor er det overhovedet nødvendigt at generere dem? Er det ikke nemmere blot at opfinde dem efter behov? Fejlen i denne tilgang blev tydeligt demonstreret af en række hændelser i computernetværk, hvoraf den største var den daglige lammelse af internettet i november 1988 forårsaget af Morris-ormen. En af måderne, hvorpå et ondsindet program trængte ind i en computer var ved at gætte adgangskoder: Programmet forsøgte at komme ind i systemet ved sekventielt at prøve adgangskoder fra sin interne liste på flere hundrede, og i en betydelig del af tilfældene lykkedes det. Den menneskelige fantasi til at opfinde adgangskoder viste sig at være meget dårlig. Det er grunden til, at i de organisationer, hvor sikkerheden er givet behørig opmærksomhed, genereres adgangskoder og distribueres til brugerne af systemsikkerhedsadministratoren. Generering af adgangskoder er lidt mere kompliceret end at generere nøgler, da det "rå" binære gamma i dette tilfælde skal konverteres til symbolsk form og ikke blot "skære" i stykker. Derudover skal individuelle værdier muligvis kasseres for at sikre, at det er lige sandsynligt, at alle alfabetiske tegn vises i adgangskoden.
  • En anden måde at bruge den kryptografiske gamma er garanteret sletning af data på magnetiske medier. Faktum er, at selv når information omskrives på et magnetisk medium, forbliver spor af tidligere data, som kan gendannes ved passende undersøgelse. For at ødelægge disse spor skal en sådan overskrivning udføres mange gange. Det viste sig, at det ville være nødvendigt at omskrive information til medierne færre gange, hvis en sådan procedure brugte tilfældige eller pseudo-tilfældige data, som ville forblive ukendte for eksperter, der forsøgte at gendanne den slettede information. Gamma-cifferet vil være nyttigt her.

2. Ikke kun den kryptografiske gamma, men også selve den kryptografiske transformation kan bruges til behov, der ikke er direkte relateret til kryptering:

  • Vi ved, at en af ​​disse muligheder for at bruge GOST er udviklingen af ​​simulerede inserts til dataarrays. På basis af enhver blokchiffer, inklusive GOST, er det dog ret nemt at konstruere et skema til beregning af en envejs hashfunktion, også kaldet i litteraturen MDC, som i forskellige kilder står for ændre detektionskode / manipulation (M modifikation/ M apulation D etektion C ode) eller beskedsammendrag (M historie D fordøje C ode). Den første afkodning dukkede op i litteraturen meget tidligere, den anden, kortere, tror jeg, blev opfundet af dem, der ikke var i stand til at huske den første :), - det var en joke. MDC kan anvendes direkte i imitationsbeskyttelsessystemer som en analog af imiteret indsættelse, som dog ikke afhænger af den hemmelige nøgle. Derudover er MDC meget udbredt i elektroniske digitale signaturer (EDS), fordi de fleste af sådanne ordninger er designet på en sådan måde, at det er bekvemt at signere en datablok af en fast størrelse. Som du ved, på grundlag af den diskuterede GOST 28147-89-standard blev den Russiske Føderations standard for beregning af envejs-hash-funktionen GOST R34.11-94 bygget.
  • Det er mindre kendt, at der på basis af enhver blokchiffer, inklusive GOST, kan bygges et fuldt funktionelt digitalt signaturskema med en hemmelig signaturnøgle og en åben verifikationskombination. Af en række årsager har denne ordning ikke fået stor praktisk udbredelse, men i nogle tilfælde kan den stadig betragtes som et meget attraktivt alternativ til de "matematiske" digitale signaturordninger, der i øjeblikket er dominerende i verden.

Litteratur

Informationsbehandlingssystemer. Kryptografisk beskyttelse. Kryptografisk transformationsalgoritme GOST 28147-89. Stat Com. USSR ifølge standarder, M., 1989. ftp://ftp.wtc-ural.ru/pub/ru.crypt/GOST-28147
Shannon Claude. Matematisk teori om hemmelige systemer. I samlingen "Works on information theory and cybernetics", M., IL, 1963, s. 333-369. http://www.enlight.ru/crypto/articles/shannon/shann__i.htm
Annoncering af godkendelse af Federal Information Processing Standard (FIPS) 197, Advanced Encryption Standard (AES), Federal Register Vol. 66, nr. 235 / Torsdag den 6. december 2001 / Meddelelser, s. 63369–63371. http://csrc.nist.gov/encryption/aes/
Feistel Horst. Kryptografi og computersikkerhed. Oversættelse af A. Vinokurov ifølge publikationen Horst Feistel. Cryptography and Computer Privacy, Scientific American, maj 1973, bind. 228, nr. 5, s. 15-23. http://www.enlight.ru/crypto/articles/feistel/feist_i.htm
Schneier Bruce. Anvendt kryptografi. 2. udg. Protokoller, algoritmer og kildetekster på C-sprog., M., "Triumph", 2002 http://www.ssl.stu.neva.ru/psw/crypto/appl_rus/appl_cryp.htm
Menezes Alfred, van Oorschot Paul, Vanstone Scott. Håndbog i anvendt kryptografi. ttp://www.cacr.math.uwaterloo.ca/hac/
Vinokurov Andrey. Hvordan fungerer en blokchiffer? Manuskript. http://www.enlight.ru/crypto/articles/vinokurov/blcyph_i.htm
Vinokurov Andrey. Spørgsmål om kryptografi til det elektroniske tidsskrift inFUSED BYTES online. http://www.enlight.ru/crypto/articles/ib/ib.htm
Vinokurov Andrey, Primenko Eduard. Tekst til rapporten "Om softwareimplementering af krypteringsstandarder i Den Russiske Føderation og USA," konference om informatisering, Moskva, MEPhI, 28.-29. januar 2001. Udgivet i konferenceartikler.
Informationsteknologi. Kryptografisk informationsbeskyttelse. Hash-funktion GOST R34.11-94, State Standard of the Russian Federation, M., 1994.

Algoritme GOST 28147-89

GOST 28147-89 er en sovjetisk og russisk symmetrisk krypteringsstandard introduceret i 1990, også en CIS-standard. Fulde navn - "GOST 28147-89 Informationsbehandlingssystemer. Kryptografisk beskyttelse. Kryptografisk konverteringsalgoritme".

Ris. 4.

Blok chifferalgoritme. Når du bruger gamma-krypteringsmetoden, kan den udføre funktionerne i en strømkrypteringsalgoritme. GOST 28147-89 -- blokchiffer med en 256-bit nøgle og 32 konverteringscyklusser, der fungerer på 64-bit blokke. Grundlaget for chifferalgoritmen er Feistel-netværket. Der er fire driftstilstande i henhold til GOST 28147-89: simpel udskiftning, gamming, gamming med feedback og simuleringsindsætningsgenereringstilstand.

Fordelene ved algoritmen: nytteløsheden af ​​et kraftangreb, effektiviteten af ​​implementering og følgelig høj ydeevne på moderne computere, tilstedeværelsen af ​​beskyttelse mod pålæggelse af falske data (generering af imitativ indsættelse) og den samme krypteringscyklus i alle fire GOST-algoritmer, en større nøgle sammenlignet med DESX-algoritmen.

Ulemper ved algoritmen: De vigtigste problemer med GOST er relateret til standardens ufuldstændighed med hensyn til generering af nøgler og erstatningstabeller. Det menes, at GOST har "svage" nøgler og erstatningstabeller, men standarden beskriver ikke kriterierne for at vælge og eliminere "svage". Standarden specificerer heller ikke en algoritme til generering af en substitutionstabel (S-bokse). På den ene side kan dette være yderligere hemmelig information (ud over nøglen), og på den anden side rejser det en række problemer: det er umuligt at bestemme algoritmens kryptografiske styrke uden at kende substitutionstabellen på forhånd ; implementeringer af algoritmen fra forskellige producenter kan bruge forskellige erstatningstabeller og kan være inkompatible med hinanden; muligheden for bevidst levering af svage erstatningstabeller af licensmyndighederne i Den Russiske Føderation.

Fordele ved IDEA frem for analoger

I softwareimplementering på Intel486SX er dobbelt så hurtig som DES IDEA, hvilket er en markant stigning i hastigheden; IDEAs nøglelængde er 128 bit, mod 56 bit for DES, hvilket er en god forbedring i forhold til brute-force-nøgler. Sandsynligheden for at bruge svage taster er meget lille og beløber sig til 1/2 64 . IDEA er hurtigere end GOST 28147-89-algoritmen (i softwareimplementering på Intel486SX). Brug af IDEA i parallelle krypteringstilstande på Pentium III- og Pentium MMX-processorer gør det muligt at opnå høje hastigheder. Sammenlignet med AES-finalisterne er 4-vejs IDEA kun lidt langsommere end RC6 og Rijndael på Pentium II, men hurtigere end Twofish og MARS. På Pentium III er 4-vejs IDEA endnu hurtigere end RC6 og Rijndael. En anden fordel er, at det er godt undersøgt og modstandsdygtigt over for velkendte kryptoanalyseværktøjer.

1 Blokdiagram af den kryptografiske transformationsalgoritme 1

2 Nem udskiftningstilstand 4

3 Gamma-tilstand 8

4 Gammatilstand med feedback 11

5 Simuleringsindlægsgenereringstilstand 14

Bilag 1 Udtryk anvendt i denne standard og deres definitioner 16

Bilag 2 Værdier af konstanter C1, C2 18

Bilag 3 Skemaer til softwareimplementering af den kryptografiske algoritme

transformationer. 19

Bilag 4 Regler for summering modulo 2 32 og modulo (2 32 -I) 25

STATENS STANDARD

USSR UNION

INFORMATIONSBEHANDLINGSSYSTEMER. KRYPTOGRAFISK SIKKERHED

Kryptografisk konverteringsalgoritme

Dato for introduktion 07/01/90

Denne standard etablerer en samlet kryptografisk transformationsalgoritme for informationsbehandlingssystemer i netværk af elektroniske computere (computere), individuelle computersystemer og computere, som definerer reglerne for datakryptering og udvikling af efterligninger.

Den kryptografiske transformationsalgoritme er designet til hardware- eller softwareimplementering, opfylder kryptografiske krav og pålægger i sine muligheder ikke begrænsninger på graden af ​​hemmeligholdelse af den beskyttede information.

Standarden er obligatorisk for organisationer, virksomheder og institutioner, der anvender kryptografisk beskyttelse af data lagret og transmitteret i computernetværk, i separate computersystemer eller i computere.

De termer, der bruges i denne standard, og deres definitioner er angivet i bilag 1.

I. BLOKDIAGRAM AF DEN KRYPTOGRAFISKE TRANSFORMATIONSALGORITME

1.1. Blokdiagrammet for den kryptografiske transformationsalgoritme (kryptoskema) indeholder (se figur 1):

Officiel publikation ★

en 256-bit nøglelagerenhed (KSD), bestående af otte 32-bit drev (X0, Xt. X2, A3 L4, X$, X6, Xu); fire 32-bit drev (/V (, N2, Nj, /V4);

Reproduktion er forbudt

© Standards Publishing House, 1989 © IPK Standards Publishing House, 1996

to 32-bit drev L/$,) med permanente fyldninger C 2, C\\ registreret i dem

to 32-bit modulo 2 32 addere (SM|, SL/3);

32-bit adderer af bitvis summering modulo 2 (SL/2);

32-bit modulo adderer (2 32 - 1) (SL/ 4);

modulo 2(SL/5) adder, der er ingen begrænsning på kapaciteten af ​​SL/$ adder;

substitutionsblok (A);

cyklisk skifteregister elleve trin mod det mest signifikante ciffer (R).

1.2. Substitutionsblokken A" består af otte substitutionsnoder A'j,

A 2, A“z, K 4, A5, A7, A 8 med hver 64-bit hukommelse. Stolpe

En 32-bit vektor anvendt på en substitutionsblok opdeles i otte sekventielle 4-bit vektorer, som hver konverteres til en 4-bit vektor af den tilsvarende substitutionsnode, som er en tabel med seksten rækker indeholdende fire polstringsbit pr. . Inputvektoren bestemmer adressen på en række i tabellen, udfyldningen af ​​denne række er outputvektoren. 4-bit outputvektorerne sammenkædes derefter sekventielt til en 32-bit vektor.

1.3. Ved tilføjelse og cyklisk forskydning af binære vektorer anses de mest signifikante bit for at være bits af lagerenhederne med store tal.

1.4. Når du skriver nøglen (I", W 2 ..., W q e (0,1), d = N256, i

RCU-værdien W\ indtastes i det i-te ciffer af drevet Xq, værdien W 2 indtastes i det 2. ciffer af drevet L#, ..., værdien W^ 2 indtastes i det 32. ciffer af drevet Xq; værdien W33 indtastes i 1. ciffer af drevet X\ y, værdien indtastes i 2. ciffer af drev X\ y..., værdien W M indtastes i 32. ciffer i drevet X\\ værdien W 6 5 indtastes i det 1. ciffer i drevet X 2 osv., værdien 1U 2 5b indtastes i den 32. bit af Xy-drevet.

1.5. Ved omskrivning af information omskrives indholdet af det p-te ciffer på et drev (adder) til det p-te ciffer på et andet drev (adder).

1.6. Værdierne for konstante fyldninger Cj, C 2 (konstanter) for lagerenheder /V 6, /V5 er angivet i bilag 2.

1.7. Nøglerne, der bestemmer fyldningen af ​​KZU'en og tabellerne i substitutionsblokken K, er hemmelige elementer og leveres på den foreskrevne måde.

At udfylde tabellerne i substitutionsblokken K er et langsigtet nøgleelement, der er fælles for computernetværket.

Organiseringen af ​​forskellige typer kommunikation opnås ved at bygge et passende nøglesystem. I dette tilfælde kan muligheden for at generere nøgler (fylde KZU) i en simpel udskiftningstilstand og kryptere dem i en simpel udskiftningstilstand, samtidig med at der ydes efterligningsbeskyttelse til transmission via kommunikationskanaler eller lagring i computerhukommelse, bruges.

1.8. Kryptoordningen sørger for fire typer arbejde: kryptering (dekryptering) af data i simpel udskiftningstilstand; kryptering (dekryptering) af data i gamma-tilstand;

kryptering (dekryptering) af data i gammatilstand med feedback;

simuleringsindstiksgenereringstilstand.

Skemaer for softwareimplementering af den kryptografiske transformationsalgoritme er angivet i bilag 3.

2. LET ÆNDRINGSMODUS

2.1. Kryptering af klare data ved hjælp af simpel udskiftningstilstand

2.1.1. Kryptoskemaet, der implementerer krypteringsalgoritmen i simpel erstatningstilstand, skal have formen vist i figur 2.

Åbne data, der skal krypteres, er opdelt i blokke på hver 64 bit. Input af enhver blok T () = (D|(0), ^(O), ..., d 3 1(0), i 32 (0), £|(0), b 2 (0) y. ..., Z> 32 (0)) binær information i drev N\ og N 2 udføres således, at værdien D|(0) indtastes i den 1. bit af N|, værdien a 2 (0) er indtastet i 2. bit / Vj osv., er værdien i 32 (0) indtastet i det 32. ciffer iVj; værdi />|(0) er indtastet

1. ciffer L/ 2, værdien b 2 (0) indtastes i 2. ciffer N 2 osv., værdien >> 32 (0) indtastes i 32. ciffer N 2. Som et resultat opnås tilstanden (i 32 (0), i 3 |(0), ... og 2 (0) y<7|(0)) накопителя yVj и состояние (/>32 (0), b 2 1(0), ... , />|(0)) lagerenhed N 2.

2.1.2. 256 bit af nøglen indtastes i RCU'en. Indholdet af otte 32-bit drev Aq, X\ t ..., Xj har formen:

^0 = (^32^3.....

*1 =(^64^63, . ^34^33)

*7 = (^56> ^255. ... , I/ 226, ^ 225)

2.1.3. Krypteringsalgoritmen for en 64-bit blok af almindelige data i simpel erstatningstilstand består af 32 cyklusser.

I den første cyklus summeres den indledende fyldning af lageret modulo 2 32 i adderen CM\ med fyldningen af ​​lageret Xq, mens fyldningen af ​​lageret Nj opretholdes.

Resultatet af summeringen konverteres i substitutionsblokken K, og den resulterende vektor sendes til indgangen til registret /?, hvor den cyklisk forskydes med elleve trin mod de mest signifikante cifre. Resultatet af skiftet summeres bit for bit modulo 2 i adderen CM 2 med 32-bit fyldning af drevet yV 2 . Resultatet opnået i CM 2 skrives i N\%, med den gamle fyldning N| omskrevet til N 2. Den første cyklus slutter.

Efterfølgende cyklusser udføres på samme måde, med

I 2. cyklus aflæses påfyldningen X\ fra RCU'en, i 3. cyklus fra RCU'en

fyldningen X2 aflæses osv., i 8. cyklus aflæses fyldningen Xj fra RCU'en. I cyklusser fra 9 til 16 såvel som i cyklusser fra 17 til 24 læses fyldninger fra RCU i samme rækkefølge:

I de sidste otte cyklusser fra den 25. til den 32. er rækkefølgen af ​​aflæsning af RCD-fyldninger omvendt:

helvede, helvede, helvede, helvede.

Ved kryptering i 32 cykler udføres følgende rækkefølge for valg af lagerfyldninger:

helvede, ^2,^),^4>^5,^6"^7, helvede, ^2,^3"^4,^5,-^6,^7, helvede, helvede, helvede, helvede, helvede ,helvede, helvede, helvede.

I den 32. cyklus indtastes resultatet fra adderen SL/2 i drevet CU 2, og den gamle fyldning lagres i drevet N\.

Modtaget efter den 32. cyklus af kryptering af udfyldning af N| og N2 er den krypterede datablok svarende til den almindelige datablok.

2.1 4 Krypteringsligninger i simpel erstatningstilstand har formen:

J*Cr> "(

I b(/) = a(/~ I)

ved y = 1-24;

G"

\bO) - a O - O ved / 8* 25 -g 31; a(32) = a(31)

A (32) = (d (31) ffl X 0)KRG> b (31)

hvor d(0) = (a 32 (0), «з|(0), ... , Д|(0)) er den indledende udfyldning af N\ før den første krypteringscyklus;

6(0) = (632(0), 63j(0), ... , 6j(0)) - indledende udfyldning /U2 før den første krypteringscyklus;

a(j) = (032(7), 0з|(/) e... , 0|(/)) - fyldning af styreenheden, efter den y-te krypteringscyklus;

b(j) = (6× 2 (/), 63j(/"), ... , 6|(/)) - udfyldning /V 2 efter den y. krypteringscyklus, y = 032.

Tegnet φ betyder den bitvise summering af 32-bit vektorer modulo 2.

Tegnet Ш betyder summeringen af ​​32-bit vektorer modulo 2 32. Reglerne for summering modulo 2 32 er givet i bilag 4;

/? - driften af ​​et cyklisk skift på elleve trin mod de højeste cifre, dvs.

^(g 32"O|>g 30>g 29>g 28>g 27>g 26"g 25>g 24>g 23'G 22"G 2b G 20>"g 2* g |)~

= (g 21" g 20> - "g 2* g 1 * G 32>G31 *GzO" g 29* g 28*, 27e"26e/"25>, 24>G23", 22)*

2.1.5. 64-bit blok af krypterede data Tsh udsendes fra drev L^, VU 2 i følgende rækkefølge: fra 1., 2., ..., 32. bit af drev L7|, derefter fra 1., 2., ... , 32. bit lager W 2, dvs.

t w - (a,<32),0 2 (32),0 32 (32), 6,(32), 6 2 <32),6 32 <32».

De resterende blokke af åbne data i simpel erstatningstilstand krypteres på samme måde.

2.2. Dekryptering af krypterede data ved hjælp af nem udskiftningstilstand

2.2.1. Kryptoskemaet, der implementerer dekrypteringsalgoritmen i simpel erstatningstilstand, har samme form (se Chsrt.2) som for kryptering. 256 bits af den samme nøgle, der bruges til kryptering, indtastes i RCU'en. De krypterede data, der skal dekrypteres, er opdelt i blokke på hver 64 bit. Indtast en hvilken som helst blok

T w - (0,(32),o 2 (32), ..., 0 32 (32), 6,(32), 6 2 (32), ..., 6 32 (32))

i akkumulatorerne L', og N 2 produceres således, at værdien dj(32) indtastes i 1. ciffer /V, værdien o 2 (32) indtastes i 2. ciffer /V osv., værdien a 32 (32) indtastes i det 32. ciffer /V,; værdien 6,(32) indtastes i 1. ciffer af N2 osv., værdien 6 32 (32) indtastes i 32. ciffer i N2.

2.2.2. Dekryptering udføres i henhold til samme algoritme som krypteringen af ​​åbne data, med den forskel, at fyldningerne af drevene Xq, X\y..., Xj læses fra RCU'en i dekrypteringscyklusser i følgende rækkefølge:

helvede, helvede 3, helvede, helvede, helvede, helvede, helvede, helvede 0,

helvede 6, helvede 4, helvede 2, helvede, helvede, helvede, helvede 2, helvede.

2.2.3. Dekrypteringsligningerne ser sådan ud:

G d (32 - /) = (d (32 - / + 1) SHLG,.,) *LF6(32 - / + 1) b (32 - /) = d (32 - / + 1) at, / = 1+8;

I o(32- /) = (a(32-/M)SHDG (32 _ /)(tod8))KLFL(32./M) |6(32-/) = d (32 - / + 1)

ved /= 9 + 31;

b(0) = (a (1) ШДГо) ОФй(1)

2.2.4. W- og N2-drevene opnået efter 32 driftscyklusser udgør en blok af åbne data.

Så = (fli(O), a 2 (0), ... , Az 2 (0)" 6, (0), 6 2 (0), ... , 6 32 (0)), svarende til blok af krypterede data, mens værdien o,(0) i blok 7® svarer til indholdet af 1. bit yV, svarer værdien 02(0) til

S. 8 GOST 28147-89

svarer til indholdet af 2. bit N\ osv., svarer værdien Dz2(0) til indholdet af 32. bit N\; værdien 6j(0) svarer til indholdet af 1. bit; værdien ^(0) svarer til indholdet af 2. bit N2 osv., værdien £зг(0) svarer til indholdet af 32. bit N2 -

De resterende blokke af krypterede data dekrypteres på samme måde.

2.3. Krypteringsalgoritmen i modusen simpel udskiftning af 64-bit blokken Go er betegnet med Ay, dvs.

A (T 0) = A (a (0), b (0)) = (a (32), b (32)) = T w.

2.4. Den simple erstatningstilstand kan kun bruges til at kryptere (dekryptere) data i de tilfælde, der er angivet i paragraf 1.7.

3. SPILTILSTAND

3.1. Kryptering af åbne data i gamma-tilstand

3.1.1. Kryptoskemaet, der implementerer krypteringsalgoritmen i gamma-tilstand, har formen vist i figur 3.

Åbne data, opdelt i 64-bit blokke T\)\ 7), 2) ..., 7)) m “, 1 7[) M), krypteres i gammatilstand ved bitvis summering modulo 2 i adderen SL/ 5 med chifferen gamma Гш, som produceres i blokke på 64 bit, dvs.

G _/L1) R2) Lm-1) LM)\

"ill V 1 w e * w * » " Sh » " * * * " 111 /»

hvor M er bestemt af mængden af ​​krypterede data.

Tjj) - Yth 64-bit blok, /“ antallet af binære cifre i blok 7J) M) kan være mindre end 64, mens den del af chifferskalaen, der ikke bruges til kryptering fra blok Г\^] kasseres.

3.1.2. 256 bit af nøglen indtastes i RCU'en. En 64-bit binær sekvens (synkroniseringsmeddelelse) S = (5*1, S 2, ..., 5^4) indføres i drevene iVj, N 2, som er den indledende fyldning af disse drev for den efterfølgende generation af M-blokke af chiffer gamma. Synkroniseringsmeddelelsen indtastes i jV| og L^så at værdien 5[ indsættes i 1. ciffer i VU), værdien S 2 indtastes i 2. ciffer N\ osv., værdien ^indlæses i 32. ciffer 7V|; værdien S33 indtastes i 1. ciffer N2, værdien 4S34 indtastes i 2. ciffer N2 osv., værdien indtastes i 32. ciffer N2.

3.1.3. Den indledende fyldning af drev /Vj og N 2 (sync message.5) er krypteret i simpel udskiftningstilstand iht.