A GOST 28147 89 algoritmus az. Hazai adattitkosítási szabvány

Hazánkban egységes algoritmust hoztak létre az adatok kriptográfiai megjelenítésére a számítógépes hálózatok információfeldolgozó rendszereihez, az egyes számítástechnikai rendszerekhez és a számítógépekhez, amelyet meghatároztak. GOST 28147-89.

Ez a kriptográfiai adatkonverziós algoritmus egy 64 bites blokk algoritmus 256 bites kulccsal, amelyet hardveres és szoftver megvalósítás, megfelel a kriptográfiai követelményeknek, és nem ír elő korlátozásokat a védett információ titkosságának fokára vonatkozóan.

Az algoritmus leírásánál a következő jelölést használjuk:

L és R - bitsorozatok;
LR az L és R sorozatok összefűzése, amelyben az R sorozat bitjei követik az L sorozat bitjeit;
(+) - bitenkénti összeadás modulo 2 ("kizárólagos VAGY" művelet);
[+] - 32 bites számok összeadása modulo 2 32;
(+) - 32 bites számok összeadása modulo 2 32 -1.

A számok összegzése a következő szabály szerint történik:

A [+] B = A + B, ha A + B< 2 32 ,
A [+] B = A + B - 2 32, ha A + B >= 2 32 . A (+) B = A + B, ha A + B< 2^32 - 1, A {+} B = A + B - (2^32 - 1), если A + B >= 2^32 - 1.

Az algoritmus négy működési módot biztosít:

Mindenesetre egy 256 bites K kulcsot használnak az adatok titkosításához, amely nyolc 32 bites K i alkulcsként jelenik meg:

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

A visszafejtés ugyanazzal a kulccsal történik, mint a titkosítás, de a folyamat az adattitkosítási folyamat fordítottja.

Egyszerű csere mód

Az első és legegyszerűbb mód az csere. A titkosítandó adatok 64 bites blokkokra vannak osztva. A T 0 nyílt adatblokk titkosítási eljárása 32 ciklusból áll (j=1...32).

A T 0 blokk két 32 bites sorozatra oszlik: B(0)A(0), ahol B(0) a bal vagy magasabb rendű bitek, A(0) a jobb vagy alacsony rendű bitek.

Ezek a szekvenciák az N 1 és N 2 meghajtókba kerülnek az első titkosítási ciklus kezdete előtt.

A 64 bites adatblokk titkosítási eljárásának első ciklusát (j=1) a következő képletek írják le:

Itt az i az iterációs számot jelöli (i = 1, 2,..., 32).

Az f függvényt titkosítási függvénynek nevezzük. Az argumentuma az előző iterációs lépésben kapott 32 A(i) szám és az X(j) kulcsszám összege, modulo 2 (mindegyik szám dimenziója 32 számjegy).

A titkosítási funkció két műveletet foglal magában a kapott 32 bites összegen. Az első műveletet K helyettesítésnek nevezzük. A K helyettesítési blokk 8 K(1) ... K(8) helyettesítő csomópontból áll, amelyek mindegyike 64 bites memóriával rendelkezik. A helyettesítési blokkhoz érkező 32 bites vektort 8 szekvenciális 4 bites vektorra osztják, melyek mindegyikét 4 bites vektorokká alakítja át a megfelelő helyettesítő csomópont, amely egy 16 egész számból álló táblázat a 0 tartományban. .15.

A bemeneti vektor egy sor címét adja meg a táblázatban, amelyből egy szám a kimeneti vektor. A 4 bites kimeneti vektorokat ezután szekvenciálisan összefűzik egy 32 bites vektorba. A K helyettesítési blokktáblázat olyan kulcselemeket tartalmaz, amelyek a számítógépes hálózatban közösek, és ritkán változnak.

A második művelet egy ciklikus eltolás a 32 bites vektortól balra, amelyet a K helyettesítése eredményeként kapunk. A T sh titkosított adatok 64 bites blokkját a következőképpen ábrázoljuk: Tsh = A (32) B (32).

A többi nyitott adatblokk egyszerű csere módban ugyanúgy titkosításra kerül.

Kérjük, vegye figyelembe, hogy az egyszerű csere mód csak korlátozott esetekben használható az adatok titkosítására. Ezek az esetek magukban foglalják a kulcs generálását és titkosítását imitációs védelem (hamis adatok megadása elleni védelem) biztosításával a kommunikációs csatornákon történő továbbításhoz vagy a számítógép memóriájában való tároláshoz.

Gamma mód

A nyílt adatok, 64 bites T(i) blokkra bontva (i=1, 2,..., m, ahol m-t a titkosított adatok mennyisége határozza meg), gamma módban titkosításra kerül a modulo 2 bitenkénti összeadásával. a Гш gamma-rejtjel, amelyet 64 bites blokkokban állítanak elő, azaz Гш = (Г(1),Г(2),...,Г(i),...,Г(m)).

Az adattitkosítási egyenlet gamma módban a következőképpen ábrázolható:

Ш(i) = A (Y(i-1) [+] C2, Z(i-1) (+) C1) (+) T(i) = Г(i) (+) T(i) .
Itt Ш(i) egy 64 bites titkosított szöveg blokk,
A - titkosítási funkció egyszerű csere módban (a függvény argumentumai két 32 bites szám),
A C1 és C2 a GOST 28147-89 szabványban meghatározott állandók,
Y(i) és Z(i) olyan mennyiségek, amelyeket iteratív módon határoznak meg, amikor a gamma a következőképpen alakul ki:
(Y(0), Z(0)) = A(S), ahol S egy 64 bites bináris sorozat (szinkron üzenet);
(Y(i), Z(i)) = (Y(i-1) [+] C2, Z(i-1) (+) C1) i = 1, 2,...,m esetén.

Az adatok visszafejtése csak szinkronizációs üzenet jelenlétében lehetséges, amely nem a titkosítás titkos eleme, és a számítógép memóriájában tárolható, vagy a titkosított adatokkal együtt kommunikációs csatornákon továbbítható.

Gamma mód visszajelzéssel

Mód játék Val vel Visszacsatolás nagyon hasonlít a gamma módra. A gamma módhoz hasonlóan a nyílt adatokat 64 bites T(i) blokkra bontva (i=1, 2,..., m, ahol m-t a titkosított adatok mennyisége határozza meg) bitenkénti összeadás modulo titkosítja. 2 az Гsh gamma-rejtjellel, amelyet 64 bites blokkokban állítanak elő:

Gw = (G(1),G(2),...,G(i),...,G(m)).

A T(m) blokkban a bináris számjegyek száma kevesebb lehet, mint 64, míg a titkosítási tartománynak a G(m) blokkból a titkosításhoz nem használt része el lesz veszve.

Az adattitkosítási egyenlet zárt hurkú gamma módban a következőképpen ábrázolható:


Itt Ш(i) egy 64 bites titkosított szöveg blokk,
A - titkosítási funkció egyszerű csere módban. Az iteratív algoritmus első lépésében a függvény argumentuma egy 64 bites szinkronizálási üzenet, minden további lépésben pedig a titkosított adat előző blokkja Ш(i-1).

A betétutánzatok fejlesztései

Gyártási folyamat imitovstaki egységes az adattitkosítási módok bármelyikéhez.

Az imitációs beillesztés egy p bitből álló blokk (Imitation insertion), amely vagy a teljes üzenet titkosítása előtt, vagy a blokkonkénti titkosítással párhuzamosan jön létre. Az utánzó beillesztés létrehozásában részt vevő első nyílt adatok blokkok tartalmazhatnak szolgáltatási információkat (például címrészt, időt, szinkronizálási üzenetet), és nincsenek titkosítva. A p paraméter értékét (a bináris bitek száma a szimulációs betétben) kriptográfiai követelmények határozzák meg, figyelembe véve azt a tényt, hogy a hamis interferencia előidézésének valószínűsége 1/2^p.

A szimulált beillesztéshez a nyílt adatokat 64 bites T(i) blokkok formájában mutatjuk be (i = 1, 2,..., m, ahol m-t a titkosított adatok mennyisége határozza meg). A T(1) sima adat első blokkja a titkosítási algoritmus első 16 ciklusának megfelelő transzformáción megy keresztül egyszerű csere módban. Ezenkívül az adatok titkosításához használt kulcsot kulcsként használják az utánzó betét létrehozásához.

A 16 műveleti ciklus után kapott 64 bites szám modulo 2 összegzésre kerül a T(2) nyílt adat második blokkjával. Az összegzés eredményét ismét a titkosítási algoritmus első 16 ciklusának megfelelő transzformációnak vetjük alá egyszerű helyettesítési módban. Az így kapott 64 bites szám modulo 2 összegzésre kerül a T(3) nyílt adat harmadik blokkjával stb. Az utolsó T(m) blokkot, ha szükséges, teljes 64 bites blokkba töltve nullákkal, modulo 2 összegzésre kerül az m-1 lépésben végzett munka eredményével, majd egyszerű csere módban titkosításra kerül az elsőre. Az algoritmus 16 ciklusa. A kapott 64 bites számból kiválasztunk egy p bit hosszúságú Ir szegmenst.

Az Ir imitatív beillesztés egy kommunikációs csatornán vagy a számítógép memóriájába kerül a titkosított adatok után. A fogadott titkosított adatokat visszafejtjük, és a vett T(i) nyílt adatblokkokból egy szimulált Ir beillesztést generálunk, amelyet azután összehasonlítunk a kommunikációs csatornáról vagy a számítógép memóriájából kapott szimulált Ir beillesztéssel a beillesztések nem egyeznek, minden visszafejtett adat hamisnak minősül.

A rejtjel rövid leírása

A GOST 28147-89 egy 1990-ben bevezetett szovjet és orosz szimmetrikus titkosítási szabvány, egyben FÁK-szabvány. Teljes név - „GOST 28147-89 Információfeldolgozó rendszerek. Kriptográfiai védelem. kriptográfiai konverziós algoritmus." Blokk titkosítási algoritmus. A gamma titkosítási módszer alkalmazásakor képes ellátni egy adatfolyam titkosítási algoritmus funkcióit.

A GOST 28147-89 egy blokk titkosítás 256 bites kulccsal és 32 konverziós ciklussal, amely 64 bites blokkon működik. A rejtjelezési algoritmus alapja a Feistel hálózat. A GOST 28147-89 szerinti alapvető titkosítási mód az egyszerű helyettesítési mód (összetettebb gamma, gamma visszacsatolásos és szimulált beillesztési módok is meg vannak határozva).

Hogyan működik az algoritmus

Az algoritmus alapvetően nem különbözik a DES-től. A Feistel-séma szerint (2.9. ábra) titkosítási ciklusokat is tartalmaz (ebből 32).

Rizs. 2.9. A GOST 28147-89 algoritmus titkosítási körei.

Alkulcsok generálásához az eredeti 256 bites kulcsot nyolc 32 bites blokkra osztják: k 1 ...k 8 . A k 9 ...k 24 billentyűk a k 1 ...k 8 billentyűk ciklikus ismétlődései (a legkisebb szignifikáns bitektől a legmagasabbig számozva). A k 25 …k 32 billentyűk a k 1 …k 8 billentyűk fordított sorrendben.

Az algoritmus mind a 32 körének befejezése után az A 33 és a B 33 blokkokat összeragasztják (megjegyezzük, hogy a legjelentősebb bit A 33, a legkisebb jelentőségű bit pedig B 33 lesz) - az eredmény az algoritmus eredménye.

Funkció f(A én ,K én) kiszámítása a következőképpen történik: A i és K i összeadjuk modulo 2 32 , majd az eredményt nyolc 4 bites részszekvenciára osztjuk, amelyek mindegyike a saját bemenetére kerül helyettesítő táblázat csomópontja(a bit elsőbbségének növekvő sorrendjében), az alábbiakban nevezzük S-blokk. A GOST S-blokkok száma összesen nyolc, azaz annyi, mint az alsorozatok száma. Minden S-blokk A számok permutációja 0-tól 15-ig. Az első 4 bites részsorozat az első S-box bemenetére megy, a második - a második bemenetére, stb. Mind a nyolc S-box kimenetét egyesítik egy 32 bites szó, akkor a teljes szó ciklikusan balra tolódik (a legjelentősebb bitek felé) 11 bittel. Mind a nyolc S-box különböző lehet. Valójában további kulcsfontosságú anyagok is lehetnek, de gyakrabban a felhasználók egy bizonyos csoportjában közös sémaparaméterek. A szabvány szövege azt jelzi, hogy a töltőpótló egységek (S-blokkok) szállítása az előírt módon történik, pl. algoritmus fejlesztő. Az orosz CIPF fejlesztők közössége megállapodott az interneten használt cserecsomópontokról.

A visszafejtés ugyanúgy történik, mint a titkosítás, de a k i alkulcsok sorrendje fordított.

A GOST 28147-89 algoritmus működési módjai

A GOST 28147-89 algoritmus négy üzemmóddal rendelkezik.

1. Módkönnyű csere olyan bemeneti adatokat fogad el, amelyek mérete 64 bit többszöröse. A titkosítás eredménye a bemeneti szöveg, amelyet 64 bites blokkokban konvertálunk a „32-Z” ciklusú titkosítás, illetve a „32-R” ciklusú dekódolás esetén.

2. Módjáték bármilyen méretű adatot fogad be bemenetként, valamint egy további 64 bites paramétert - üzenet szinkronizálása. Működés közben a szinkronizálási üzenet a „32-Z” ciklusban konvertálódik, az eredmény két részre oszlik. Az első rész modulo 2 32-vel egészül ki 1010101 16 állandó értékkel. Ha a második rész egyenlő 2 32 -1-gyel, akkor az értéke nem változik, ellenkező esetben modulo 2 32 -1-et ad hozzá 1010104 16 állandó értékkel. A két transzformált rész kombinálásával kapott érték, az úgynevezett titkosítási gamma, belép a „32-3” ciklusba, melynek eredményét bitenként modulo 2 adjuk hozzá a 64 bites bemeneti adatblokkhoz. Ha ez utóbbi kevesebb, mint 64 bit, akkor a kapott érték extra bitjeit eldobja. A kapott értéket elküldi a kimenetre. Ha még mindig vannak bejövő adatok, akkor a művelet megismétlődik: a 32 bites részekből álló blokkot részekre alakítják, és így tovább.

3. Módjáték visszajelzéssel bármilyen méretű adatot és szinkronizálási üzenetet is elfogad bemenetként. A bemeneti adatblokk bitenként modulo 2 kerül hozzáadásra a transzformáció eredményével a szinkronizálási üzenet „32-3” ciklusában. Az eredményül kapott érték elküldésre kerül a kimenetre. A szinkronizálási üzenet értékét titkosítás esetén a kimeneti blokk, dekódolás esetén pedig a bemeneti blokk, azaz a titkosított váltja fel. Ha a bejövő adatok utolsó blokkja kevesebb, mint 64 bit, akkor a gamma extra bitjei (a „32-3” ciklus kimenete) el lesznek dobva. Ha még mindig vannak bejövő adatok, akkor a művelet megismétlődik: a lecserélt érték titkosításának eredményéből egy titkosítási gamma keletkezik stb.

4. Termelési módutánzatú betétek legalább két teljes 64 bites blokk méretű bemeneti adatot vesz fel, és egy szimulált beillesztésnek nevezett 64 bites adatblokkot ad vissza. Az ideiglenes 64 bites értéket 0-ra állítjuk, majd amíg van bemenő adat, bitenként modulo 2 hozzáadódik a „16-3” ciklus eredményével, aminek a bemenete egy bemeneti blokk adat. A bemeneti adatok vége után az ideiglenes érték kerül visszaadásra eredményként.

Rejtjeles kriptoanalízis

A GOST 28147-89 titkosítás 256 bites kulcsot használ, és a kulcstér térfogata 2256. A jelenleg létező általános célú számítógépek egyikén sem található kulcs kevesebb mint sok száz éven belül. A GOST 28147-89 orosz szabványt nagy ráhagyással tervezték, és sok nagyságrenddel erősebb, mint az amerikai DES szabvány, a tényleges kulcsmérete 56 bit, és a kulcstér mennyisége mindössze 256.

Vannak támadások a teljes körű GOST 28147-89 ellen is, minden módosítás nélkül. Az elsők egyike nyitott művek, amelyben az algoritmust elemezték, számos jól ismert titkosítási algoritmus kulcsbővítési eljárásának gyengeségeit használja fel. Különösen a teljes körű GOST 28147-89 algoritmus törhető meg a kapcsolódó kulcsok differenciális kriptográfiai elemzésével, de csak akkor, ha gyenge helyettesítő táblákat használnak. Az algoritmus 24 körös változata (amelyből az első 8 kör hiányzik) hasonló módon nyílik meg bármilyen helyettesítő táblával, azonban az erős helyettesítő táblázatok teljesen kivitelezhetetlenné teszik az ilyen támadást.

A hazai tudósok A.G. Rosztovcev és E.B. Makhovenko 2001-ben egy alapvetően új kriptoanalízis-módszert javasolt úgy, hogy egy ismert nyílt szövegből, a megfelelő rejtjelezett szövegből és a kívánt kulcsértékből célfüggvényt képez, és megkeresi a kulcs valódi értékének megfelelő szélsőértékét. Megtalálták a GOST 28147-89 algoritmus gyenge kulcsainak nagy osztályát is, amelyek lehetővé teszik az algoritmus megnyitását csak 4 kiválasztott egyszerű szöveggel és a megfelelő titkosított szövegekkel, meglehetősen alacsony bonyolultsággal.

2004-ben koreai szakértők egy csoportja olyan támadást javasolt, amely a kapcsolódó kulcsok differenciális kriptoanalízisét alkalmazva 91,7%-os valószínűséggel 12 bites titkos kulcsot kaphat. A támadáshoz 2 35 kiválasztott egyszerű szövegre és 2 36 titkosítási műveletre van szükség. Amint látja, ez a támadás gyakorlatilag haszontalan az algoritmus tényleges megtörésére.

A cseretábla hosszú távú kulcselem, vagyis sokkal többre is érvényes hosszútávú mint egy külön kulcs. Feltételezhető, hogy ugyanazon a kriptográfiai védelmi rendszeren belüli összes titkosítási csomópontban közös. A titkosítás minősége a táblázat minőségétől függ. Egy „erős” helyettesítési táblázatnál a rejtjel erőssége akkor sem esik egy bizonyos elfogadható határ alá, ha nyilvánosságra hozzuk. Ezzel szemben a "gyenge" táblázat használata elfogadhatatlanul alacsony határra csökkentheti a titkosítás erősségét. Nincs információ a helyettesítési táblázat minőségéről nyílt sajtó Oroszországot nem tették közzé, de a „gyenge” táblázatok létezése kétségtelen - példa egy „triviális” helyettesítő táblázat, amelyben minden értéket önmagával helyettesít. Számos munka tévesen arra a következtetésre jutott, hogy a GOST 28147-89 algoritmus titkos helyettesítési táblái a kulcs részét képezhetik, és növelhetik annak tényleges hosszát (ami nem jelentős, mivel az algoritmus nagyon nagy, 256 bites kulccsal rendelkezik).

Ez az algoritmus titkosítási algoritmusként való használatához kötelező kormányzati szervezetek Orosz Föderáció és számos kereskedelmi.

Az algoritmus leírása

Az algoritmus diagramja az ábrán látható. 3.1. Amint láthatja, ennek az algoritmusnak a kialakítása meglehetősen egyszerű, ami egyértelműen leegyszerűsíti szoftveres vagy hardveres megvalósítását.

A GOST 28147-89 algoritmus 64 bites blokkokban titkosítja az információkat, amelyek két 32 bites alblokkra (N1 és N2) vannak osztva. Az N1 alblokk feldolgozása meghatározott módon történik, majd az értékét összeadjuk

az N2 alblokk értékével (az összeadás modulo 2 történik), majd az alblokkok felcserélődnek. Ezt a transzformációt bizonyos számú körben hajtják végre: 16 vagy 32, az algoritmus működési módjától függően (lásd alább). Minden körben a következő műveleteket hajtják végre:

1. Kulcs alkalmazás. A /VI alblokk tartalma modulo 2 32 hozzáadásra kerül a Kx kulcs egy részével.

A GOST 28147-89 algoritmus titkosítási kulcsának mérete 256 bit, a Kx pedig 32 bites része, azaz a 256 bites titkosítási kulcs 32 bites alkulcsok összefűzéseként jelenik meg (3.2. ábra):

Shch ATI, AG2, Yu, AG4, K5, Kb, K7.

A titkosítási folyamat során a körszámtól és az algoritmus működési módjától függően ezek közül az alkulcsok egyikét használják.

Rizs. 3.1. Algoritmus diagram GOST 28147-

Rizs. 3.2. A GOST 28147-89 algoritmus titkosítási kulcsa

2. Asztalcsere. Kulcsolás után a /VI alblokk 8 darab 4 bites részre van felosztva, amelyek mindegyikének értékét az alblokk ezen részének helyettesítési táblázata szerint egyedileg cseréljük. A táblázat helyettesítéseket (Substitution box, S-box) gyakran használják modern algoritmusok titkosítást, ezért érdemes ezeket részletesebben megvizsgálni.

A táblahelyettesítést így használjuk: egy bizonyos méretű (jelen esetben 4 bites) adatblokk kerül a bemenetre, amelynek numerikus ábrázolása határozza meg a kimeneti érték számát. Például van egy S-boxunk a következő formájú:

4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1.

Jöjjön a 4 bites „0100” blokk a bemenetre, azaz a 4. érték. A táblázat szerint a kimeneti érték 15 lesz, azaz. „1111” (a 0 helyett 4, 1 helyett 11, a 2 értéke változatlan, stb.).

Mint látható, az algoritmus kialakítása nagyon egyszerű, ami azt jelenti, hogy az adattitkosítás legnagyobb terhe a helyettesítő táblákra hárul. Sajnos az algoritmusnak megvan az a tulajdonsága, hogy vannak „gyenge” helyettesítő táblák, amelyek segítségével az algoritmus kriptoanalitikus módszerekkel megoldható. A gyengék közé tartozik például egy táblázat, amelyben a kimenet megegyezik a bemenettel:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.

3. Bitenkénti ciklikus eltolás balra 11 bittel.

Algoritmus működési módok

A GOST 28147-89 algoritmusnak 4 üzemmódja van:

□ egyszerű csere mód;

□ gamma mód;

P gamma mód visszajelzéssel;

□ az imitációs kötődések fejlesztési módja.

Ezek a módok némileg eltérnek az általánosan elfogadott módoktól (lásd az 1.4. fejezetben), ezért érdemes ezeket részletesebben is megvizsgálni.

Ezeknek a módoknak más a célja, de ugyanazt a titkosítási átalakítást használják, mint fentebb leírtuk.

Egyszerű csere mód

Egyszerű csere módban minden 64 bites információblokk egyszerűen titkosításra kerül a fent leírt 32 kör segítségével. A 32 bites alkulcsok a következő sorrendben használatosak:

□ KO, Kl, K2, KZ, K4, K5, KB, AG7, KO, ATI stb. - 1-24. körben;

□ K1, Kb, K5, K4, KZ, K2, K\, KO - 25-32 körben.

Az egyszerű helyettesítési módban a visszafejtés pontosan ugyanúgy történik, de az alkulcsok használatának kissé eltérő sorrendjében:

□ KO, K\, K2, KZ, K4, K5, Kb, KP - 1-8 körben;

□ KP, Kb, K5, K4, KZ, K2, K\, KO, K1, Kb stb. - körökben 9-től 32-ig.

A szabványos ECB módhoz hasonlóan a blokkok külön titkosítása miatt az egyszerű csere mód szigorúan nem ajánlott magának az adatoknak a titkosítására; csak más titkosítási kulcsok titkosításához használható többkulcsos sémákban.

Gamma mód

Gamma módban (3.3. ábra) minden egyszerű szöveg blokk modulo 2 bitenként hozzáadódik egy 64 bites titkosított gamma blokkhoz. A gamma-rejtjel egy speciális sorozat, amelyet a fent leírt transzformációk segítségével állítanak elő az alábbiak szerint:

1. A kezdeti kitöltést az N1 és N2 regiszterbe írják - egy 64 bites értéket, amelyet „szinkron üzenetnek” neveznek (a szinkron üzenet gyakorlatilag az inicializálási vektor analógja CBC, CFB és OFB módban).

2. A /VI és N2 regiszterek tartalma (jelen esetben a szinkron üzenetek) egyszerű csere módban titkosítva van.

3. Az N1 tartalmát modulo (2 32 – 1) adjuk hozzá a CI = 2 24 + 2 16 + 2 8 + 4 konstanssal, az összeadás eredménye a /VI regiszterbe kerül.

4. Az N2 tartalmát modulo 2-vel összeadjuk C2 = 2 24 + 2 16 + 2 8 +1 állandóval, az összeadás eredményét az N2 regiszterbe írjuk.

5. A /VI és N2 regiszterek tartalma 64 bites titkosítási gammablokkként kerül kiadásra (azaz ebben az esetben a /VI és az N2 alkotja az első gammablokkot).

6. Ha a következő gamma blokkra van szükség (azaz további titkosításra vagy visszafejtésre van szükség), térjen vissza a 2. lépéshez.

A visszafejtéshez a gamma generálása hasonló módon történik, majd a titkosított szöveg és a gamma bitek ismét XOR-re kerülnek.

Ugyanazon rejtjelezési tartomány létrehozásához a kriptogramot visszafejtő felhasználónak ugyanazzal a kulccsal és ugyanazzal a szinkronizálási üzenet értékkel kell rendelkeznie, amelyet az információ titkosításakor használtak. Ellenkező esetben az eredeti szöveget nem lehet lekérni a titkosított szövegről.

A GOST 28147-89 algoritmus legtöbb megvalósításában a szinkronizálási üzenet nem titkos elem, azonban a szinkronizálási üzenet ugyanolyan titkos lehet, mint a titkosítási kulcs. Ebben az esetben úgy tekinthetjük, hogy az algoritmus effektív kulcshossza (256 bit) a szinkronizációs üzenet további 64 bitjével nő, ami további kulcselemnek tekinthető.

Gamma mód visszajelzéssel

A visszacsatolásos gamma módban a /VI és L/2 regiszterek kitöltésére az előző nyílt szöveg blokk titkosításának eredménye kerül felhasználásra, a 2. blokktól kezdve nem az előző gamma blokk, hanem az előző nyílt szöveg blokk titkosításának eredménye. (3.4. ábra). Az első blokk ebben a módban teljesen hasonlóan generálódik, mint az előző.

Rizs. 3.4. Rejtjel gamma generálása gamma módban visszajelzéssel

Melléklet-generálási mód

Az előtag egy titkosítási kulcs segítségével kiszámított kriptográfiai ellenőrző összeg, amelyet az üzenetek integritásának ellenőrzésére terveztek. Kiszámításához a GOST 28147-89 algoritmus speciális módja van.

Az utánzat előtag generálása a következőképpen történik:

1. Az első 64 bites információblokk, amelyhez az utánzat előtagot számítják, az N1 és N2 regiszterekbe kerül, és redukált egyszerű helyettesítési módban titkosítva történik, amelyben a 32-ből az első 16 kör kerül végrehajtásra.

2. A kapott eredményt modulo 2 összegzi a következő információblokkkal, az eredményt N1-ben és N2-ben tárolja.

3. M és N2 ismét titkosításra kerül a rövidített egyszerű csere módban stb. az utolsó információblokkig.

Az utánzó előtag az N1 és N2 regiszterek 64 bites eredő tartalmának vagy azok egy részének tekinthető. Leggyakrabban 32 bites utánzó előtagot használnak, azaz a regiszterek tartalmának felét. Ez elég, mivel, mint minden ellenőrző összeg, az imitációs melléklet célja elsősorban az információ véletlen torzulása elleni védelem. Az adatok szándékos módosítása elleni védelem érdekében más - elsősorban elektronikus - kriptográfiai módszereket alkalmaznak digitális aláírás(lásd az 1.1. pontot).

Az utánzat előtag a következőképpen használatos:

1. Bármilyen információ titkosításakor a rendszer kiszámítja a nyílt szöveg imitátort, és a titkosított szöveggel együtt elküldi.

2. A visszafejtés után az utánzat előtagot ismét kiszámítja és összehasonlítja a küldött előtaggal.

3. Ha a számított és az elküldött utánzati előtagok nem egyeznek, akkor a rejtjelezett szöveg torzult az átvitel során, vagy hibás kulcsokat használtak a visszafejtés során.

Az utánzó előtag különösen hasznos a kulcsinformációk helyes visszafejtésének ellenőrzéséhez többkulcsos sémák használatakor.

Az utánzó előtag a MAC üzenet hitelesítési kód néhány analógja, CBC módban számítva; A különbség az, hogy az imitációs előtag kiszámításakor a szinkronizálási üzenetet nem, míg a MAC kiszámításakor az inicializálási vektort használják.

Algoritmus kriptográfiai erőssége

1994-ben a GOST 28147-89 algoritmus leírását lefordították angolra és közzétették; ezt követően kezdtek megjelenni külföldi szakemberek által végzett elemzésének eredményei; azonban hosszú ideig nem találtak megvalósítható támadást.

□ nagy kulcshossz - 256 bit; a titkos szinkronizálási üzenettel együtt az effektív kulcshossz 320 bitre nő;

□ 32 átalakítási kör; már 8 kör után elérjük a bemeneti adatok szórásának teljes hatását: a nyílt szöveg blokk egy bitjének megváltoztatása hatással lesz a titkosított szöveg blokk összes bitjére, és fordítva, azaz többszörös erősségű ráhagyás van.

Tekintsük a GOST 28147-89 algoritmus kriptográfiai elemzésének eredményeit.

A helyettesítési táblák elemzése

Mivel a szabvány nem tartalmazza a helyettesítő táblázatokat, számos munka (például in) azt sugallja, hogy egy „illetékes szervezet” „jó” és „rossz” helyettesítő táblázatokat is ki tud adni. A híres szakértő, Bruce Schneier azonban pletykáknak nevezi az ilyen feltételezéseket. Jól látható, hogy az algoritmus kriptográfiai erőssége nagymértékben függ a felhasznált helyettesítő táblák tulajdonságaitól, ennek megfelelően vannak gyenge helyettesítő táblák (lásd fentebb a példát), amelyek használata leegyszerűsítheti az algoritmus támadását. Mindazonáltal a különböző helyettesítő táblák használatának lehetősége nagyon méltó ötletnek tűnik, amely mellett a következő két tény idézhető a DES titkosítási szabvány történetéből (részletekért lásd a 3.15. szakaszt):

□ a DES algoritmus lineáris és differenciális kriptoanalízisét alkalmazó támadások a helyettesítő táblák sajátos jellemzőit használják; más táblák használatakor a kriptográfiai elemzést elölről kell kezdeni;

□ Kísérleteket tettek a DES megerősítésére a lineáris és differenciális kriptoanalízis ellen robusztusabb helyettesítési táblák használatával; ilyen, valóban robusztusabb táblázatokat javasoltak például az s 5 DES algoritmusban; de sajnos nem lehetett a DES-t s 5 DES-re cserélni, mivel a helyettesítő táblák szigorúan meghatározottak a szabványban, és ennek megfelelően az algoritmus implementációi valószínűleg nem támogatják a táblák más táblákra való cseréjét.

Számos munka (például , és ) tévesen arra a következtetésre jutott, hogy a GOST 28147-89 algoritmus titkos helyettesítő táblái a kulcs részét képezhetik, és növelhetik annak effektív hosszát (ami nem jelentős, mivel az algoritmus nagyon nagy 256 -bit kulcs). A munka azonban bebizonyítja, hogy a titkos helyettesítő táblák kiszámíthatók a következő, gyakorlatilag használható támadással:

1. Beállítjuk a nulla kulcsot, és végrehajtjuk a „nulla vektor” keresését, azaz a z = /(0) értéket, ahol /() az algoritmus körfüggvénye. Ez a szakasz körülbelül 2 titkosítási műveletet vesz igénybe.

2. A nulla vektor segítségével kiszámítjuk a helyettesítő táblázatok értékeit, ami legfeljebb 2 11 műveletet vesz igénybe.

Algoritmusmódosítások és elemzésük

A munka során a GOST 28147-89 algoritmus módosításainak kriptoanalízisét végezték el:

□ GOST-H algoritmus, amelyben az eredeti algoritmushoz képest megváltozott az alkulcsok használatának sorrendje, azaz körökben 25-től 32-ig direkt sorrendben használjuk az alkulcsokat, vagyis pontosan ugyanazt, mint az algoritmus előző köreiben;

□ 20 körös GOST® algoritmus, amelyben egy kör XOR-t használ a modulo-2 összeadás helyett a kulcs átfedésére.

Az elemzés eredményei alapján arra a következtetésre jutottak, hogy a GOST-H és a GOST© gyengébbek, mint az eredeti GOST 28147-89 algoritmus, mivel mindkettő rendelkezik gyenge kulcsosztályokkal. Érdemes megjegyezni, hogy a GOST© kriptoanalízis szempontjából a munka szóról szóra megismétli a GOST 28147-89 algoritmus kriptoanalízisének szentelt részt, amely egy jól ismert, 2000-ben megjelent munka (az eredetire való hivatkozás nélkül). Ez megkérdőjelezi a mű szerzőinek szakmai felkészültségét és egyéb eredményeit.

Az algoritmus egy nagyon érdekes módosítását javasoltam a munkában: az S\…Ss tábláknak szükségszerűen eltérőnek kell lenniük; az algoritmus minden körében át kell őket rendezni egy bizonyos törvény szerint. Ez a permutáció függhet a titkosítási kulcstól, de lehet titkos is (azaz egy nagyobb titkosítási kulcs része, mint az eredeti 256 bites kulcs). Mindkét lehetőség szerzőik szerint jelentősen növeli az algoritmus ellenállását a lineáris és differenciális kriptoanalízissel szemben.

És még egy, a helyettesítő táblákkal kapcsolatos módosítás szerepel a műben, amely a titkosítási kulcson alapuló helyettesítő táblák kiszámításának egyik lehetséges módszerét elemzi. A munka szerzői arra a következtetésre jutottak, hogy egy ilyen függőség gyengíti az algoritmust, mivel gyenge kulcsok jelenlétéhez és az algoritmus néhány lehetséges sebezhetőségéhez vezet.

Teljeskörű algoritmus-elemzés

Vannak támadások a teljes körű GOST 28147-89 ellen is, minden módosítás nélkül. Az egyik első nyilvános munka, amely elemzi az algoritmust, egy jól ismert munka, olyan támadásoknak szentelték, amelyek számos jól ismert titkosítási algoritmus kulcsbővítési eljárásának gyengeségeit használják ki. Különösen a teljes körű GOST 28147-89 algoritmus törhető meg a kapcsolódó kulcsok differenciális kriptográfiai elemzésével, de csak akkor, ha gyenge helyettesítő táblákat használnak. Az algoritmus 24 körös változata (amelyből az első 8 kör hiányzik) hasonló módon nyílik meg bármilyen helyettesítő táblával, de az erős helyettesítő táblázatok (például az itt megadott) teljesen kivitelezhetetlenné teszik az ilyen támadást.

A hazai tudósok, A. G. Rosztovcev és E. B. Makhovenko 2001-ben egy alapvetően új kriptoanalízis-módszert javasoltak (a szerzők szerint lényegesen hatékonyabb, mint a lineáris és differenciális kriptoanalízis) úgy, hogy a titkosított szövegnek és a kívánt kulcsértéknek megfelelő ismert nyílt szövegből célfüggvényt alkotnak. megtalálni a valódi kulcsértéknek megfelelő szélsőértékét. Megtalálták a GOST 28147-89 algoritmus gyenge kulcsainak nagy osztályát is, amelyek lehetővé teszik az algoritmus megnyitását csak 4 kiválasztott egyszerű szöveggel és a megfelelő titkosított szövegekkel, meglehetősen alacsony bonyolultsággal. Az algoritmus kriptoanalízise folytatódik a munkában.

2004-ben koreai szakértők egy csoportja olyan támadást javasolt, amely a kapcsolódó kulcsok differenciális kriptoanalízisét alkalmazva 91,7%-os valószínűséggel megszerezheti a titkos kulcs 12 bitjét. A támadáshoz 2 35 kiválasztott egyszerű szövegre és 2 36 titkosítási műveletre van szükség. Amint látja, ez a támadás gyakorlatilag haszontalan az algoritmus tényleges megtörésére.

A GOST 28147-89 által meghatározott algoritmus titkosítási kulcsa 256 bit. 64 bites blokkokban titkosítja az információkat (az ilyen algoritmusokat blokk-algoritmusoknak nevezzük), amelyeket ezután két 32 bites részblokkra (N1 és N2) osztanak fel (1. ábra). Az N1 alblokk feldolgozása meghatározott módon történik, majd értékét hozzáadjuk az N2 alblokk értékéhez (az összeadás modulo 2 történik, azaz a logikai XOR műveletet alkalmazzuk - „kizárólag vagy”), majd az alblokkok felcserélődnek. . Ezt a transzformációt bizonyos számú alkalommal („körök”) hajtják végre: 16 vagy 32 alkalommal, az algoritmus működési módjától függően. Minden körben két műveletet hajtanak végre.

1. ábra A GOST 28147-89 algoritmus vázlata.

Az első a kulcsolás. Az N1 alblokk tartalma modulo 2-ként hozzáadódik a Kx kulcs 32 bites részéhez. Teljes kulcs A titkosítás 32 bites alkulcsok összefűzéseként jelenik meg: K0, K1, K2, K3, K4, K5, K6, K7. A titkosítási folyamat során a körszámtól és az algoritmus működési módjától függően egy ilyen alkulcs kerül felhasználásra.

A második művelet az asztalcsere. Kulcsolás után az N1 alblokkot 8 darab 4 bites részre osztják, amelyek mindegyikének értékét az alblokk ezen részének helyettesítési táblázata szerint cserélik. Az alblokkot ezután 11 bittel balra forgatjuk.

A táblahelyettesítéseket (Substitution box - S-box) gyakran alkalmazzák a modern titkosítási algoritmusokban, ezért érdemes elmagyarázni, hogyan szerveződik egy ilyen művelet. A blokkok kimeneti értékeit a táblázat tartalmazza. Egy bizonyos dimenziójú (esetünkben 4 bites) adatblokknak saját numerikus ábrázolása van, amely meghatározza a kimeneti érték számát. Például, ha az S-box úgy néz ki, mint 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 és a 4 bites blokk „0100” érkezett a bemenetre (4-es érték), akkor a táblázat szerint a kimeneti érték 15 lesz, azaz „1111” (0 a 4, 1 a 11, 2 a 2 ...).

A GOST 28147-89 által definiált algoritmus négy működési módot biztosít: egyszerű csere, gamma, gamma visszacsatolással és imitációs mellékletek generálása. Ugyanazt a titkosítási transzformációt használják, mint fentebb leírtuk, de mivel az üzemmódok célja eltérő, ez az átalakítás mindegyikben másként történik.

Egyszerű csere módban a fent leírt 32 kört hajtják végre az egyes 64 bites információblokkok titkosításához. Ebben az esetben a 32 bites alkulcsok a következő sorrendben kerülnek felhasználásra:

K0, K1, K2, K3, K4, K5, K6, K7, K0, K1 stb. - 1-24. körben;

K7, K6, K5, K4, K3, K2, K1, K0 - a 25-32. körben.

A visszafejtés ebben a módban pontosan ugyanúgy történik, de az alkulcsok használatának kissé eltérő sorrendjében:

K0, K1, K2, K3, K4, K5, K6, K7 - az 1-8. körben;

K7, K6, K5, K4, K3, K2, K1, K0, K7, K6 stb. - a 9-től 32-ig terjedő körben.

Minden blokk egymástól függetlenül titkosításra kerül, azaz az egyes blokkok titkosítási eredménye csak a tartalmuktól (az eredeti szöveg megfelelő blokkjától) függ. Ha az eredeti (sima) szövegnek több azonos blokkja van, akkor a megfelelő titkosított szövegblokkok is azonosak lesznek, ami további hasznos információ egy titkosítást feltörni próbáló kriptaelemző számára. Ezért ezt a módot elsősorban maguknak a titkosítási kulcsoknak a titkosítására használják (nagyon gyakran alkalmaznak többkulcsos sémákat, amelyekben számos okból a kulcsok egymáson vannak titkosítva). Két másik üzemmód az információ titkosítására szolgál - a gamma és a gamma visszacsatolással.

Gamma módban minden egyszerű szöveg blokk bitenként modulo 2-ként hozzáadódik egy 64 bites titkosítási gamma blokkhoz. A gamma titkosítás egy speciális sorozat, amelyet az N1 és N2 regiszterekkel végzett bizonyos műveletek eredményeként kapunk.

  • 1. A kezdeti kitöltést az N1 és N2 regiszterbe írják – ez egy 64 bites érték, amelyet szinkronizációs üzenetnek neveznek.
  • 2. Az N1 és N2 regiszterek (ebben az esetben a szinkron üzenetek) tartalma egyszerű csere módban titkosítva van.
  • 3. Az N1 regiszter tartalmát modulo (232 - 1) adjuk hozzá a C1 = 224 + 216 + 28 + 24 konstanssal, és az összeadás eredményét az N1 regiszterbe írjuk.
  • 4. Az N2 regiszter tartalmát 232 modulo hozzáadjuk a C2 = 224 + 216 + 28 + 1 konstanssal, és az összeadás eredményét az N2 regiszterbe írjuk.
  • 5. Az N1 és N2 regiszterek tartalma a titkosítás 64 bites gamma blokkjaként kerül kiadásra (ebben az esetben N1 és N2 alkotja az első gamma blokkot).

Ha a következő gamma blokkra van szükség (azaz a titkosítást vagy a visszafejtést folytatni kell), akkor visszatér a 2. lépéshez.

A visszafejtéshez a gamma generálása hasonló módon történik, majd a titkosított szöveg és a gamma bitek ismét XOR-re kerülnek. Mivel ez a művelet reverzibilis, helyesen kidolgozott skála esetén az eredeti szöveget kapjuk (1. táblázat).

Asztal 1. Titkosítás és visszafejtés gamma módban

A gamma visszafejtéséhez szükséges rejtjel kifejlesztéséhez a kriptogramot visszafejtő felhasználónak ugyanazzal a kulccsal és a szinkronizálási üzenet értékével kell rendelkeznie, amelyet az információ titkosításakor használtak. Ellenkező esetben az eredeti szöveget nem lehet lekérni a titkosított szövegről.

A GOST 28147-89 algoritmus legtöbb megvalósításában a szinkronizálási üzenet nem titkos, azonban vannak olyan rendszerek, ahol a szinkronizálási üzenet ugyanaz a titkos elem, mint a titkosítási kulcs. Az ilyen rendszerek esetében az algoritmus effektív kulcshosszát (256 bit) a titkos szinkronizációs üzenet további 64 bitjével növelik, ami szintén kulcselemnek tekinthető.

Zárt hurkú gamma módban az N1 és N2 regiszterek kitöltésére a 2. blokktól kezdve nem az előző gamma blokkot használjuk, hanem az előző nyílt szöveg blokk titkosításának eredményét (2. ábra). Az első blokk ebben a módban teljesen hasonlóan generálódik, mint az előző.

2. ábra Rejtjel gamma generálása zárt hurkú gamma módban.

Az utánzási előtagok generálási módjának mérlegelésekor meg kell határozni a generálás alanya fogalmát. Az előtag egy titkosítási kulcs segítségével kiszámított kriptográfiai ellenőrző összeg, amelyet az üzenetek integritásának ellenőrzésére terveztek. Utánzó előtag generálásakor a következő műveleteket hajtjuk végre: az információs tömb első 64 bites blokkját, amelyhez az utánzati előtagot számítjuk, az N1 és N2 regiszterekbe írjuk, és csökkentett egyszerű helyettesítési módban titkosítjuk (a 32-ből az első 16 kört végrehajtják). A kapott eredményt modulo 2 összegzi a következő információblokkkal, és az eredményt N1 és N2 tárolja.

A ciklus az utolsó információblokkig ismétlődik. Az N1 és N2 regiszterek vagy azok egy részének ezen átalakítások eredményeként kapott 64 bites tartalmát imitációs előtagnak nevezzük. Az utánzat előtag méretét az üzenetek szükséges megbízhatósága alapján választják ki: az utánzat előtag r bit hosszával annak a valószínűsége, hogy az üzenetben bekövetkezett változás észrevétlen marad, 2-r, leggyakrabban a 32 bites utánzó előtagot használnak, azaz a regiszterek tartalmának felét. Ez elég is, hiszen mint minden ellenőrző összeg, az imitációs melléklet is elsősorban az információ véletlen eltorzulása elleni védelmet szolgálja. Az adatok szándékos módosítása elleni védelem érdekében, egyéb kriptográfiai módszerek- elsősorban elektronikus digitális aláírás.

Az információcsere során az imitációs előtag egyfajta kiegészítő ellenőrzési eszközként szolgál. A rendszer a nyílt szövegre számítja ki, ha bármilyen információ titkosítva van, és a titkosított szöveggel együtt kerül elküldésre. A visszafejtés után az utánzat előtag új értékét számítják ki, és összehasonlítják az elküldött értékkel. Ha az értékek nem egyeznek, az azt jelenti, hogy a titkosított szöveg megsérült az átvitel során, vagy helytelen kulcsokat használtak a visszafejtés során. Az utánzó előtag különösen hasznos a kulcsinformációk helyes visszafejtésének ellenőrzéséhez többkulcsos sémák használatakor.

A GOST 28147-89 algoritmust nagyon erős algoritmusnak tekintik - jelenleg nem javasoltak hatékonyabb módszereket a közzétételére, mint a fent említett „nyers erő” módszer. Magas biztonságát elsősorban a nagy kulcshossznak köszönheti - 256 bit. Titkos szinkronizálási üzenet használatakor a tényleges kulcshossz 320 bitre nő, és a helyettesítő tábla titkosítása további biteket ad hozzá. Ezenkívül a kriptográfiai erősség a transzformációs körök számától függ, amelynek a GOST 28147-89 szerint 32-nek kell lennie (a bemeneti adatok diszperziójának teljes hatása 8 kör után érhető el).

A GOST 28147-89 előnyei a hamis adatok előírása elleni védelem (utánzatok generálása) és ugyanaz a titkosítási ciklus mind a négy GOST algoritmusban.

Titkosító algoritmus GOST 28147-89. Egyszerű cseremód. — Archívum WASM.RU

„Amíg élsz, ne halj meg, nézd ezt a világot.
Itt sokaknak halott a lelke – belül halottak.
De sétálnak és nevetnek, nem tudván, hogy nincsenek ott,
Ne siesd el a halál óráját – mondta nekem.

Aria, "Fenn"

2.1 Feistel hálózatok.
2.2 Blokk titkosítás GOST 28147-89

3.1 Kulcs információ
3.2 A kriptokonverzió alapvető lépése

3.3 Alap ciklusok:32-Z, 32-P.

4.1 A fő kriptokonverziós lépés végrehajtása
4.2 Az algoritmus sebességének növelése
5. Főbb információs követelmények
6. Felhasznált irodalom jegyzéke
7. Köszönetnyilvánítás

Bevezetés.

Ez a dokumentum egy olyan módszer leírására tett kísérletem, amellyel a GOST 28147-89 titkosítási algoritmust egyszerűen lecserélhetjük a legegyszerűbb, de technikailag kompetens nyelvre. Az olvasó az első hat pont elolvasása után mondja el véleményét arról, hogy mennyire sikerült.

Azért, hogy a munkám adja több haszon Azt javaslom, hogy a irodalomjegyzékben feltüntetett szerzők munkáival vértezzék fel magukat. Számológép is javasolt, hogy legyen funkciója a művelet kiszámításához XOR, mert a cikk olvasása feltételezi, hogy az olvasó tanulmányozni kívánja ezt a titkosítási algoritmust. Bár referencia útmutatónak is alkalmas, ezt a cikket kifejezetten képzésnek írtam.

Bevezetés a blokkolt titkosításba.

Mielőtt elkezdenénk megvizsgálni az algoritmust, meg kell ismerkednünk az ilyen típusú rejtjelek létrehozásának történetével. Az algoritmus a blokk titkosítások kategóriájába tartozik, amelyek architektúrájában az információ véges számú blokkra van felosztva, a végső természetesen nem lehet teljes. A titkosítási folyamat pontosan teljes blokkokon keresztül megy végbe, amelyek a titkosítást alkotják. Az utolsó blokk, ha hiányos, kiegészítve van valamivel (a befejezésének árnyalatairól lentebb szólok), és ugyanúgy titkosítva van, mint a teljes blokkok. Rejtjelezés alatt azt az eredményt értem, hogy a titkosítási funkció egy bizonyos mennyiségű adatra hat, amelyet a felhasználó titkosításra adott be. Más szóval, a titkosítás a titkosítás végeredménye.

A blokk-rejtjelek fejlődésének története a 70-es évek elejéhez kötődik, amikor az IBM cég, felismerve az információ védelmének szükségességét a számítógépes kommunikációs csatornákon történő adatátvitel során, megkezdte a megvalósítást. saját program az elektronikus hálózatokban található információk védelmével foglalkozó tudományos kutatás, beleértve a kriptográfiát is.

Az IBM kutatóinak és fejlesztőinek egy csoportja, amely szimmetrikus kulcssémát alkalmazó titkosítási rendszereket kezdett kutatni, Dr. Horst Feistel.

2.1 Feistel hálózatok

A klasszikus irodalomban Feistel által javasolt új titkosítási módszer architektúráját „Feistel Architecture”-nak nevezték, de Ebben a pillanatban az orosz és a külföldi irodalomban egy megalapozottabb kifejezést használnak - „Feistel hálózata” vagy Feistel hálózata. Ezt követően ezzel az architektúrával megépült a „Lucifer” titkosítás – amelyet később publikáltak, és általánosságban új érdeklődési hullámot váltott ki a kriptográfia iránt.

A Feistel hálózati architektúra ötlete a következő: a bemeneti információfolyam n bites méretű blokkokra van felosztva, ahol n páros szám. Minden blokk két részre van osztva - L és R, majd ezeket a részeket betáplálják egy iteratív blokk titkosításba, amelyben a j-edik szakasz eredményét az előző szakasz j-1 eredménye határozza meg! Ezt egy példával illusztrálhatjuk:

Rizs. 1

Ahol az A függvény egy blokk titkosítás fő művelete. Ez lehet egy egyszerű művelet, mint például az XOR művelet, vagy lehet bonyolultabb formája és számos egyszerű művelet sorozata - modulo összeadás, balra eltolás, elemcsere stb., összesen ezek egyszerű lépéseket képezik a kriptotranszformáció úgynevezett fő lépését.

Megjegyzendő, hogy a funkció működésének kulcselemei a kulcselemek beszerzése és az XOR művelet, és az, hogy ezek a műveletek milyen jól vannak átgondolva, jelzi a rejtjel egészének kriptográfiai erősségét.

Annak érdekében, hogy a Feistel-hálózatok gondolata teljesen világos legyen, nézzük meg a legegyszerűbb esetet, rizs. 1, ahol az A függvényben – a „mod 2” („xor”) műveletek jelennek meg, de ez legegyszerűbb súlyosabb helyzetben, például országos jelentőségű információk elrejtése esetén az A funkció bonyolultabb lehet (amennyire én láttam, az A funkció valóban nagyon összetett lehet):

Kiinduló adatok:

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

Szerezze meg a titkosító kódot

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

Magyarázzuk meg tetteinket:

1. Ez a művelet a 2 4. mód. A gyakorlatban egy ilyen művelet az egyszerű összeadáshoz vezet, ahol két számot kell összeadnunk, és figyelmen kívül kell hagynunk az 5. számjegybe történő átvitelt. Mivel ha egy szám bináris reprezentációjának számjegyei fölé teszünk kitevőt, akkor az ötödik számjegy felett négyes kitevő lesz, nézzük meg az alábbi ábrát, amely a műveletünk műveleteit mutatja:

Rizs. 2

Itt egy nyíllal mutattam a kitevőkre, mint látható, az eredménynek 10100-nak kellett volna lennie, de mivel a mod 2 4 művelet figyelmen kívül hagyja a átvitelt, így 0100-at kapunk.

2. Ezt a műveletet a szakirodalom mod 2-nek nevezi, a parancs segítségével valósítja meg assembly nyelven XOR. De a helyesebb neve mod 2 1. E nélkül az egyedülálló művelet nélkül aligha lehet gyors, könnyen megvalósítható titkosítási algoritmust felépíteni, és ugyanakkor eléggé kripto-ellenálló legyen. Ennek a műveletnek az egyedisége abban rejlik, hogy önmagának az ellenkezője! Például, ha az A számot XOROZzuk B számmal, akkor az eredmény B. A jövőben elegendő a B és C számokat egymással XOR-ezni, hogy megkapjuk A korábbi értékét!

Ebben a műveletben 1010-et kaptunk az 1110-es és 0100-as számokkal, ahhoz, hogy 1110-et kapjunk vissza, elég a 0100-as és az 1010-es számokat XOR-ozni egymással! Erről a műveletről bővebben a honlaphoz csatolt cikkben olvashat. www.wasm.ru, « Alapvető útmutató aCRC_hibaészlelési algoritmusok» a szerző, aki Ross N. Williams. Ebben a munkában van egy pont - " 5. Bináris aritmetika hordozók nélkül" Ez a cikk ismerteti a műveletet. xor! felkiáltok, mert ebben a cikkben ez a művelet annyira le van írva, hogy az olvasó nem csak megérti, hogyan működik ez a művelet, de még el is kezdi. látni, hallani és érezni!

3. Erre a műveletre azért van szükség, hogy a rejtjelezés visszafejtésekor az eredeti értékeket lehessen megszerezni.

2.2 GOST 28147-89 blokk titkosítás

A GOST 28147 – 89 titkosítási algoritmus a kiegyensúlyozott Feistel hálózatok architektúrája szerint működő blokkrejtjelek kategóriájába tartozik, ahol a kiválasztott információblokk két része azonos méretű. Az algoritmust a KGB nyolcadik osztályán dolgozták ki, most FAPSI-vé alakították át, és az Orosz Föderáció titkosítási szabványaként hozták létre 1989-ben a Szovjetunió alatt.

Munkához ez a módszer Az algoritmusnak 64 bites blokkokra kell bontania az információkat. Generálja vagy írja be a titkosítási rendszerbe a következő kulcsinformációkat: kulcs és helyettesítési táblázat. A kulcs és a cseretábla kiválasztását titkosításkor nagyon komolyan kell venni, mert Ez az Ön adatai biztonságának alapja. A kulcsra és a cseretáblára vonatkozó követelményekkel kapcsolatos információkért lásd a „Kulcsinformációkra vonatkozó követelmények” című részt.

A módszer mérlegelésekor nem erre koncentrálunk, mert ezt a cikket, amint fentebb említettem, azzal a céllal írták, hogy megtanítsák az olvasónak az adatok titkosítását az egyszerű helyettesítési módszerrel ennek az algoritmusnak titkosítást, de mindenképpen érinteni fogjuk ezt a kérdést a cikk végén.

Elméleti minimum.

3.1 Főbb információk

Mint fentebb említettem, az alábbiak aktívan részt vesznek az adattitkosításban:

3.1.1. A kulcs nyolc elemből álló sorozat, amelyek mindegyike 32 bites. A továbbiakban K szimbólummal jelöljük, és az elemek, amelyekből áll, a következők: k1, k2, k3, k4, k5, k6, k7, k8.

3.1.2 Csere táblázat – nyolc sorból és tizenhat oszlopból álló mátrix, a továbbiakban Hij. Az i sor és a j oszlop metszéspontjában minden elem 4 bitet foglal el.

3.2 A kriptokonverzió alapvető lépése

A titkosítási folyamat fő művelete a kriptokonverzió fő lépése. Ez nem más, mint az adatok titkosítása egy bizonyos algoritmussal, csak a fejlesztők vezettek be egy fájdalmasan nehézkes nevet.

A titkosítás megkezdése előtt a blokkot két L és R részre osztják, mindegyik 32 bites. Kijelölnek egy kulcselemet, és csak ezután adják be a blokk két részét, a kulcselemet és a helyettesítő táblázatot a fő lépésfüggvénybe. A fő lépés eredménye az alapciklus egy iterációja, amelyről a következőben lesz szó bekezdés. A fő lépés a következőkből áll:

  1. Az R blokk összeadási részét a K mod 2 32 kulcselemmel összegezzük. Fentebb leírtam egy hasonló műveletet, itt ugyanaz, csak a kitevő nem „4”, hanem „32” - ennek a műveletnek az eredményét a továbbiakban Smod jelöli.
  2. A korábban kapott Smod eredményt s7, s6, s5, s4, s3, s2, s1, s0 négybites elemekre osztjuk és betápláljuk a helyettesítő függvénybe. A csere a következőképpen történik: jelöljük ki a Smod - s i elemet, kezdjük elölről a legalacsonyabb elemmel, és cseréljük le a helyettesítő táblázatban szereplő értékre az s i elem értékével jelzett i sor és oszlop mentén. Megyünk az s i +1 elemhez, és ugyanúgy járunk el, és addig folytatjuk, amíg az utolsó Smod elem értékét ki nem cseréljük - ennek a műveletnek az eredményét Ssimple-ként jelöljük.
  3. Ebben a műveletben az Ssimple értékét ciklikusan 11 bittel balra toljuk, és Srol-t kapunk.
  4. Kiválasztjuk az L blokk második részét, és hozzáadjuk a mod 2-t a Srol-lal, ennek eredményeként Sxor-t kapunk.
  5. Ebben a szakaszban a blokk L része egyenlővé válik az R rész értékével, az R részt pedig az Sxor eredménye inicializálja és ezzel a fő lépésfüggvény vége!

3.3 Alapciklusok: „32-Z”, „32-R”.

Az információ titkosításához természetesen 64 bites blokkra kell osztani, az utolsó blokk lehet 64 bitnél is kisebb. Ez a tény ennek az „egyszerű helyettesítési” módszernek az Achilles-sarka. Mivel a 64 bites kiegészítése nagyon fontos feladat a rejtjelezés kriptográfiai erősségének növelésében, ez az érzékeny hely, ha jelen van az információs tömbben, és lehet, hogy nincs (például egy 512 bájt méretű fájl !), nagy körültekintéssel és felelősséggel kell bánni!

Miután az információkat blokkokra osztotta, a kulcsot elemekre kell bontania:

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

Maga a titkosítás úgynevezett alapciklusokból áll. Ami viszont magában foglalja az n-edik számú alapvető kripto konvertálási lépést.

Az alapciklusok, hogy is fogalmazzak, jelöléssel: n – m. Ahol n a fő kriptokonverziós lépések száma az alapciklusban, m pedig az alapciklus „típusa”, azaz. Miről beszélünk, az adatok „Z” vagy „R” titkosításáról.

Az alap titkosítási ciklus 32-3 32 fő kriptotranszformációs lépésből áll. A lépésműveleteket megvalósító függvényt az N blokkkal és a K kulcselemmel látjuk el, ahol az első lépés k1-el történik, a második a kapott eredmény felett a k2 elemmel stb. a következő séma szerint:

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

A 32-P visszafejtési folyamata hasonló módon történik, de a kulcselemek fordított sorrendben kerülnek megadásra:

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

Gyakorlat.

4.1 A kriptokonverzió fő lépésének megvalósítása

Miután megismerkedtünk az információ titkosításának elméletével, ideje volt megnézni, hogyan történik a titkosítás a gyakorlatban.

Kiinduló adatok:

Vegyük az N = 0102030405060708h információs blokkot, itt L és R része egyenlő:

L = 01020304h, R = 05060708h, vegye ki a kulcsot:

K = ' as28 zw37 q839 7342ui23 8e2t wqm2 ewp1’ (ezek ASCII kódok, a hexadecimális ábrázolás megtekintéséhez megnyithatja ezt a fájlt megtekintési módban Total Commander a " gomb megnyomásával F3"majd a kulcs" 3 "). Ebben a kulcsban az elemek értékei a következők lesznek:

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

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

Vegyük a következő helyettesítő táblázatot is:

Rizs. 3

Itt a sorok 0-tól 7-ig, az oszlopok 0-tól F-ig vannak számozva.

Figyelem: Minden információ, beleértve a kulcsot a helyettesítő táblázattal, példaként szolgál az algoritmus mérlegeléséhez!

Az „Input Data” használatával meg kell szerezni a kripto-konverzió fő lépésének eredményét.

1. Válassza ki az R = 05060708h alkatrészt és a k1 kulcselemet = 'as28', hexadecimális formában a kulcselem így fog kinézni: 61733238h. Most végrehajtjuk a 2 32 mod összegzési műveletét:

Rizs. 4

Amint az ábrán is látható, nem történt átvitel a pirossal jelölt 33 bitre és a kitevővel 32 " És ha az R-hez és a kulcselemhez más értékeink is lennének, akkor ez nagyon megtörténhet, és akkor figyelmen kívül hagynánk, és a jövőben csak a sárgával jelölt biteket használnánk.

Ezt a műveletet az assembler paranccsal hajtom végre add hozzá:

; eax = R, ebx = 'as28'

Ennek a műveletnek az eredménye: Smod = 66793940h

2. Most ez a legtrükkösebb művelet, de ha jobban megnézed, már nem olyan ijesztő, mint amilyennek elsőre tűnik. Képzeljük el a Smodot a következő formában:

Rizs. 5

Megpróbáltam megjeleníteni az ábrán a Smod elemeket, de azért elmagyarázom:

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

Most a legalacsonyabb s0 elemtől kezdve elvégezzük a cserét. Emlékezz a lényegre" 3.2 A kriptokonverzió alapvető lépése» i – sor, s i – oszlop, keresse az értéket a nulla sorban és a nulla oszlopban:

6. ábra

Tehát a Smod jelenlegi értéke nem 6679394 0 h, 6679394 5 h.

Kezdjük el lecserélni az s1-et, azaz. négy. Az első sor és a negyedik oszlop használata (s1= 4!). Nézzük a képet:

Rizs. 7

Most az érték Smod, nem pedig 667939 4 5h, 667939 2 5 óra. Feltételezem, hogy a cserealgoritmus most már világos az olvasó számára, és elmondhatom, hogy ezután az Ssimple végeredménye a következő értékű lesz - 11e10325h.

Arról, hogy ez hogyan valósítható meg a legegyszerűbben assembler parancsok formájában, később a következő bekezdésben, miután a kiterjesztett tábláról beszélek.

  1. A kapott Ssimple értéket 11 bittel balra kell tolnunk.

Rizs. 8

Amint láthatja, ez a művelet meglehetősen egyszerű, és egyetlen assembly nyelvi paranccsal hajtható végre - rolés ennek a műveletnek az eredménye Srol: 0819288Fh.

4. Most az információs blokkunk Srol értékű L részét kell XOR-olni. Előveszek egy számológépet a w2k sp4-ből, és megkapom az Sxor = 091b2b8bh-t.

5. Ez a művelet végleges, és egyszerűen hozzárendeljük, megtisztítjuk R-t az L rész értékével, és inicializáljuk az L részt az Sxor értékével.

Végeredmény:

L = 091b2b8bh, R = 01020304h

4.2 Növelje az algoritmus sebességét

Most beszéljünk az algoritmus sebesség optimalizálásáról. Minden projekt megvalósítása során figyelembe kell venni, hogy az a program működik a leggyorsabban, amely gyakrabban dolgozik regiszterekkel, mint memóriával, és itt ez az ítélet is nagyon fontos, mert Akár 32 titkosítási lépés is lehetséges egy információblokkon keresztül!

Amikor implementáltam a titkosítási algoritmust a programomban, a következőket tettem:

1. Az L blokk egy részét az eax regiszterbe, az Rt pedig az edx-be választottuk.

2. Az esi regisztert a kiterjesztett kulcs címével inicializáltuk, erről alább.

3. A kiterjesztett helyettesítő tábla címének értékét az ebx regiszterhez rendeltem, erről lentebb

4. Az 1, 2, 3 pontok információit átvittük a 32 - Z vagy a 32 - R alapciklus függvényébe, helyzettől függően.

Ha megnézi a kulcselemek ellátási diagramját a „ Alapciklusok: „32-Z”, „32-R”", akkor a 32 - Z alapciklushoz tartozó kulcsunk a következőképpen ábrázolható:

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'

Azok. az elejétől kezdve vannak k1,k2,k3,k4,k5,k6,k7,k8 - as28”, „zw37", "q839', '7342', 'ui23', '8e2t', 'wqm2', 'ewp1' Ezt a sorozatot háromszor megismételjük. Ezután az elemek fordított sorrendben mennek, azaz: k8,k7,k6,k5,k4,k3,k2,k1 - 'ewp1', 'wqm2', '8e2t', 'ui23', '7342', 'q839', 'zw37', 'as28'.

A tömb elemeit előre elrendeztem abban a sorrendben, ahogyan azokat 32 - Z-be kell betáplálni. Így megnöveltem a fordulatonként szükséges memóriaigényt, de megkíméltem magam néhány olyan gondolkodási folyamattól, amelyekre nem volt szükségem, és megnöveltem a sebességet. algoritmus, a memória-elérési idő csökkentésével! Itt csak a 32 - Z kulcsot írtam le, a 32 - P ciklusnál ugyanezt tettem, de más sémát használtam az elemek ellátására, amit szintén leírtam a " bekezdésben Alapciklusok: „32-З”, „32-Р”».

Itt az ideje, hogy leírjam a helyettesítő funkció megvalósítását, ahogy fent ígértem. Nem tudtam korábban leírni, mert... ehhez egy új koncepció – egy kiterjesztett helyettesítési táblázat – bevezetésére van szükség. Nem tudom elmagyarázni, hogy mi az. Ehelyett megmutatom, és te magad is megfogalmazhatod, hogy mi ez – egy kiterjesztett helyettesítési táblázat?

Tehát ahhoz, hogy megértsük, mi az a kiterjesztett cseretábla, szükségünk van egy cseretáblára, például az ábrán láthatót veszem. 3.

Például ki kellett cserélnünk a 66793940h számot. A következő formában mutatom be:

Rizs. 9

Ha most vesszük az s1, s0 elemeket, azaz. alacsony bájt, akkor a helyettesítő függvény eredménye 25h lesz! Miután elolvasta Andrej Vinokurov cikkét, amelyet a „ bekezdésben idéztem Felhasznált irodalom jegyzéke", akkor valóban rá fog jönni, hogy ha vesz két karakterláncot, akkor kaphat egy tömböt, amely lehetővé teszi, hogy gyorsan megtalálja a helyettesítő elemeket egy assembler paranccsal xlat. Azt mondják, van egy másik gyorsabb módszer is, de Andrej Vinokurov körülbelül négy évet töltött a GOST megvalósításának gyors algoritmusainak kutatásával! Szerintem nem kell újra feltalálni a kereket, ha már létezik.

Tehát a tömbről:

Vegyük az első két sort, a nullát és az elsőt, és hozzunk létre egy 256 bájtos tömböt. Most egy sajátosságot figyelünk meg: ha 00h-t kell konvertálni, akkor az eredmény 75h lesz (a 3. ábrára támaszkodunk) - ezt az értéket 00h eltolásnál helyezzük a tömbbe. Felvesszük a 01h értéket, a 79h helyettesítő függvény eredményét, betesszük a tömbbe 01 eltolásnál és így tovább 0FFh-ig, ami 0FCh-t kap, amit 0FFh eltolásnál teszünk a tömbbe. Így kaptunk egy kibővített táblázatot a cseresorok első csoportjához: első és nulla. De még mindig van három csoport: második 2. oldal, 3. oldal, harmadik 4. oldal, 5. oldal, negyedik 6. oldal, 7. oldal. Ezzel a három csoporttal ugyanúgy foglalkozunk, mint az elsővel. Az eredmény egy kibővített helyettesítési táblázat!

Most implementálhat egy algoritmust, amely végrehajtja a cserét. Ehhez vesszük forráskódok, amelyet Andrej Vinokurov tett közzé az oldalán, lásd: „ Bibliográfia».

lea ebx,extended_table_simple

mov eax, [add be a cserélendő számot]

ebx,100h hozzáadása ;ugrás a következő két csomópontra

sub ebx,300h ; hogy a jövőben az ebx a táblázatra mutasson

Most van még egy funkció: a korábbi műveletekkel nem csak lecseréltük, hanem el is toltuk a 8 bites számot balra! Csak annyit kell tennünk, hogy a számot további 3 bittel balra toljuk:

és megkapjuk a rol eax,11 művelet eredményét!

Az optimalizáláshoz nem tudok többet hozzáfűzni, csak azt tudom hangsúlyozni, amit fentebb mondtam - gyakrabban használjon regisztereket, mint a memória elérését. Azt hiszem, ezek a szavak csak a kezdőknek szólnak, a tapasztalt emberek ezt tökéletesen megértik az én szavaim nélkül is.

A legfontosabb információkkal kapcsolatos követelmények.

Amint azt Andrey Vinokurov cikkében kifejtette, a kulcsot két kritérium szerint választják ki:

Kritérium a bitek egyenlő valószínűségű eloszlására az 1 és 0 értékek között. Általában a Pearson-kritériumot („khi-négyzet”) használják a bitek kiegyensúlyozott eloszlásának kritériumaként.

Ez azt jelenti, hogy a kulcs elvileg tetszőleges szám lehet. Vagyis amikor a kulcs következő bitje létrejön, annak egy vagy nulla értékre történő inicializálásának valószínűsége 50/50!

Kérjük, vegye figyelembe, hogy a kulcs nyolc elemből áll, mindegyik 32 bites, így a kulcsban összesen 32 * 8 = 256 bit és a szám lehetséges kulcsok 2,256! Nem lep meg ez?

Sorozat kritérium.

Ha megnézzük a kulcsunkat, amelyet a „ 4.1 A kriptokonverzió fő lépésének megvalósítása", akkor észreveszi, hogy a következő jelölés igaz:

Rizs. 10

Egy mondatban a k 1 értéke nem ismétlődik k 2-ben vagy bármely más kulcselemben.

Vagyis az általunk titkosítási algoritmusnak tekintett kulcs teljes mértékben megfelel a fenti két kritériumnak.

Most a csereasztal kiválasztásáról:

Most beszéljünk arról, hogyan válasszuk ki a megfelelő helyettesítő táblázatot. A helyettesítő táblázatok kiválasztásának fő követelménye az elemek „nem ismétlődésének” jelensége, amelyek mindegyike 4 bites méretű. Mint fentebb már láthatta, a helyettesítő táblázat minden sora 0h, 1h, 2h, 3h, ..., 0fh értékekből áll. Tehát a fő követelmény az, hogy minden sor egy példányban tartalmazza a 0h, 1h, 2h, ..., 0fh értékeket és minden ilyen értéket. Például a sorrend:

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

Ennek a követelménynek teljes mértékben megfelel, de akkor is! Nem ajánlott egy ilyen sorozatot karakterláncként kiválasztani. Mert ha egy olyan függvény bemenetére betáplál egy értéket, ami egy ilyen karakterláncra támaszkodik, akkor ugyanazt az értéket kapod, mint a kimenet! Ne higgy nekem? Ezután vegye a 332DA43Fh számot és nyolc ilyen sort a helyettesítések táblázataként. Végezze el a csereműveletet, és biztosíthatom, hogy a kimenet 332DA43Fh! Vagyis ugyanaz, mint amit a művelet bemeneteként megadtál! De ez nem a jó modor jele a titkosításnál, és így volt?

Ez volt az egyik követelmény, a következő kritérium szerint - a kimeneti blokk minden bitjének statisztikailag függetlennek kell lennie a bemeneti blokk minden bitjétől!

Hogyan néz ki ez egyszerűbbnek? És így választottuk ki például a fenti számból az s0 = 0Fh, 01111b elemet. Annak a valószínűsége, hogy most az első bitet egyre vagy nullára cseréljük, 0,5! Annak valószínűségét, hogy a második, harmadik és negyedik bitet külön-külön cseréljük ki egyesekkel vagy nullákkal, szintén 0,5, ha s1 = 0Eh-t választunk, annak a valószínűsége, hogy a nulla bitet kicseréljük, ez pedig „0”. nulla vagy egy túl egyenlő – 0,5! Így e kritérium szerint az s0, s1 elemek nulla bitjeinek cseréje között nincs minta! Igen, helyettesíthetsz egyeseket, de helyettesíthetsz nullákkal is.

A táblázat e kritérium szerinti értékeléséhez összeállíthat egy táblázatot a korrelációs együtthatókról, amelyet a következő képlettel számítanak ki:

Ha p = 1, akkor a j bit értéke a kimeneten megegyezik az i bit értékével a bemeneten a bitek bármely kombinációja esetén a bemeneten;

Ha p = -1, akkor a j kimeneti bit értéke mindig az i bemeneti bit inverze;

Ha p = 0, akkor a j kimeneti bit valószínűleg 0 és 1 értéket vesz fel az i bemeneti bit bármely rögzített értékére.

Vegyünk egy egysoros példát:

Bontsuk „komponensekre”:

Számítsunk ki egy együtthatót a fenti képlet segítségével. Hogy könnyebb legyen megérteni, hogyan történik ez, részletesebben elmagyarázom:

A 0. szám (0) 0. bitjét a bemeneten, a 0. szám 0. bitjét a kimeneten (1) vesszük, és végrehajtjuk a 0 XOR 1 = 1 műveletet.

Az 1. szám (1) 0. bitjét a bemeneten, az 1. szám 0. bitjét a kimeneten (1) vesszük, és végrehajtjuk az 1 XOR 1 = 0 műveletet.

A 2. szám (0) 0. bitjét a bemeneten, a 2. szám 0. bitjét a kimeneten (0) vesszük, és végrehajtjuk a 0 XOR 0 = 0 műveletet.

A 3. szám (1) 0. bitjét a bemeneten, a 3. szám 0. bitjét a kimeneten (1) vesszük, és végrehajtjuk az 1 XOR 1 = 0 műveletet.

Sorozatosan végrehajtva XOR műveletek ebben a sorozatban megszámoljuk az összes nem nulla értéket, így a 6 értéket kapjuk. Így P 00 = 1-(6/2 4-1) = 0,25. Így kiderült, hogy a 0. bit értéke a kimeneten megegyezik a 0. bit értékével a bemeneten 16-ból 4 esetben;

A végső esélytáblázat:

Amint az a korrelációs együtthatók táblázatából látható, a 3. bit a bemeneten a 16-ból 14 esetben invertálódik a 0. bithez képest, ami 87,5% ez a normál titkosítási rendszerek esetében már nem elfogadható. Vegyünk egy másik példát a változatosságra:

Az együtthatók táblázata a következő lesz (aki nem túl lusta, újraszámolhatja)

Nos, ebben a táblázatban a dolgok még rosszabbak - a csoport 1. és 2. bitje változatlan marad! A kriptanalitikusnak van helye megfordulni. Mindezeket a követelményeket figyelembe véve egyszerű kereséssel ("durva erő") találtak a megadott elméletnek megfelelő permutációs táblázatokat (a mai napig - 1276 kombináció).

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

Felhasznált irodalom jegyzéke.

  1. Andrej Vinokurov cikke:

GOST 28147-89 titkosítási algoritmus, használata és megvalósítása

számítógépekhez Intel platformok x86.

Itt vannak a titkosítási algoritmus megvalósításához szükséges forráskódok.

  1. Horst Feistel cikke:

Kriptográfia és számítógépes biztonság.

(az előző cikkel azonos címen található)

  1. Ross N. Williams:

Útmutató a CRC hibaészlelési algoritmusokhoz

Felkerült a honlapra www.wasm.ru.

Köszönetnyilvánítás

Szeretném kifejezni hálámat a www.wasm.ru fórum minden látogatójának. De külön köszönetet szeretnék mondani ChS-nek, aki jelenleg SteelRat néven ismert, segített megértenem olyan dolgokat, amelyeket valószínűleg soha nem értettem volna, valamint a bekezdés megírásában is: “ Főbb információs követelmények", ennek a bekezdésnek a fő részét ő írta. Mélyen hálás vagyok a KSTU alkalmazottjának is. A.N. Tupolev Anikin Igor Vjacseszlavovics és bűn lenne nem említeni Chris Kaspersky-t azért, ami ő, és Volodya / wasm.ru utasításait. Ja, és kapom tőle. Szeretném megemlíteni a Sega-Zero / Callipso-t is, amiért eszembe juttatta a matematikai dzsungelt.

Valószínűleg ez minden, amit el szeretnék mondani.

Hálás lennék a cikkhez kapcsolódó kritikákért vagy kérdésekért, vagy csak tanácsért. Elérhetőségem: [e-mail védett], ICQ – 337310594.

Üdvözlettel: Evil`s Interrupt.

P.S.: Nem próbáltam senkit felülmúlni ezzel a cikkel. Azzal a szándékkal írták, hogy megkönnyítsék a GOST tanulmányozását, és ha nehézségei vannak, ez nem jelenti azt, hogy én vagyok a hibás. Légy ésszerű és türelmes, minden jót neked!



Betöltés...
Top