Postavljanje autentifikacije i enkripcije wl-zzoge. ruska "magma"

  • 04.01.2022

Istraživači sigurnosti su pokazali da ga napadači mogu razbiti hardverom i softverom uz ukupnu cijenu manju od 1.000 dolara. Ovo je zastrašujuća vijest za one koji ne žele da njihovi privatni podaci procure trećim licima. Ali još strašnija je reakcija na hakovanje mobilnih operatera.

Prepoznali su samo trenutni 64-bitni GSM sistem enkripcije kao nesiguran, ali čak i sada samo zamahuju da pređu na sigurnije algoritme. Iako oni, kako je iskustvo pokazalo, nisu lijek za liječenje. U stvari, hakovan je i najbolji sigurnosni algoritam, 128-bitni A5/3 (KASUMI) sistem koji se koristi u 3G mrežama. Međutim, za hakovanje je bilo potrebno samo 2 sata.

Hak su izveli nastavnici matematičkog i računarskog odsjeka Weizmann instituta nauke u Izraelu. U rad su uključeni Orr Dunkelman, Nathan Keller i Adi Shamir, koji je poznat po svom saučesništvu u razvoju poznate RSA kripto šeme javnog ključa (slovo “S” u nazivu kripto šeme je u čast Shamira). Izveli su takozvani napad "pridruženog ključa". Istovremeno, istraživači su svoju tehniku ​​nazvali napadom „sendvič“, jer. sastoji se od tri dijela, od kojih se dva nalaze iznad i ispod, a treći je tanak - u sredini.

Prema istraživačima, ovom tehnikom mogu dobiti kompletan 128-bitni Kasumi ključ koristeći samo 4 povezana ključa, 226 jedinica podataka, 230 bajtova memorije i 232 vremenske jedinice. Svi ovi zahtjevi su toliko beznačajni da su uspješno uspjeli emulirati napad na jedan PC za manje od dva sata.

U isto vrijeme, prema Karstenu Nohlu, profesoru koji stoji iza nedavnog hakovanja GSM 64-bitnog enkripcije, novi napad je manje efikasan od nedavnog hakovanja A5/1. Da bi se dobio jedan ključ, nova metoda zahtijeva prikupljanje nekoliko miliona poznatih otvorenih tekstova. Cleartext se prenosi otprilike svake sekunde, tako da razbijanje enkripcije određenog nosioca može zahtijevati dugotrajno prikupljanje podataka. Štaviše, na jednom računaru, ovoj metodi će biti potrebno 2 sata da se probije određeni poziv. Iako, prema naučnicima, korištenje kompjuterskog klastera može smanjiti vrijeme potrebno na minimum.

Štaviše, prema Knowleu, hakovi bi trebali biti podsjetnik da se šifriranje A5/3, kao i svaka druga šifra, mora odmah zamijeniti. Knowle se nada da će se činjenice hakovanja uzeti u obzir prilikom nadogradnje GSM-a.

Istovremeno, većina telekomunikacionih kompanija još nije dostavila određene vremenske planove za prelazak na KASUMI. Stoga je sumnjivo da će se tranzicija dogoditi vrlo brzo (iako sam KASUMI već zahtijeva reviziju). To znači da u razgovorima preko GSM mreže sada nije potrebno davati nikakve tajne podatke. Osim ako, naravno, ne želite da postanu javni.

Priča

Prije Blowfisha, postojeći algoritmi su bili ili vlasnički ili nepouzdani, a neki su čak i držani u tajnosti (na primjer, Skipjack). Algoritam je 1993. godine razvio Bruce Schneier kao brzu i besplatnu alternativu zastarjelom DES-u i vlasničkoj IDEA-i. Prema autoru, kriterijumi dizajna za Blowfish bili su:

  • brzina (šifrovanje na 32-bitnim procesorima traje 26 ciklusa);
  • jednostavnost (zbog upotrebe jednostavnih operacija koje smanjuju vjerovatnoću greške u implementaciji algoritma);
  • kompaktnost;
  • podesiva izdržljivost.

Opis algoritma

Opcije

  • tajni ključ K (od 32 do 448 bita)
  • 32-bitni ključevi za šifriranje P1-P18
  • 32-bitne zamjenske tablice S1-S4: S1 S1 .. S1 S2 S2 .. S2 S3 S3 .. S3 S4 S4 .. S4

F(x) funkcija

Algoritam šifriranja za 64-bitni blok sa poznatim nizom P i F(x)

Feistelova mreža u enkripciji

Blowfish algoritam

Podijeljeno u 2 faze:

  1. Pripremno - generiranje ključeva za šifriranje pomoću tajnog ključa.
    • Inicijalizacija nizova P i S sa tajnim ključem K
      1. Inicijalizirajte P1-P18 fiksnim nizom koji se sastoji od heksadecimalnih cifara mantise od pi.
      2. XOR operacija se izvodi na P1 sa prva 32 bita ključa K, na P2 sa druga 32 bita, itd.
        Ako je ključ K kraći, onda se on ciklički superponira.
    • Šifriranje ključeva i tablice zamjene
      1. 64-bitni algoritam blok šifriranja, koristeći inicijalizirane ključeve P1-P18 i zamjensku tablicu S1-S4, šifrira 64-bitni null (0x0000000000000000) string. Rezultat se upisuje u P1, P2.
      2. P1 i P2 su šifrirani s promijenjenim vrijednostima ključeva i tablica zamjene. Rezultat se upisuje u P3 i P4.
      3. Šifriranje se nastavlja sve dok se ne promijene svi ključevi P1-P18 i zamjenske tablice S1-S4.
  2. Šifrovanje teksta sa primljenim ključevima i F(x), sa preliminarnom podelom na blokove od 64 bita. Ako nije moguće razbiti početni tekst tačno na blokove od 64 bita, koriste se različiti načini šifriranja za konstruiranje poruke koja se sastoji od cijelog broja blokova. Ukupna potrebna memorija 4168 bajtova: P1-P18: 18 varijabli od 32 bita; S1-S4: 4x256 varijabli od 32 bita.

Dešifriranje je slično, samo se P1-P18 primjenjuju obrnutim redoslijedom.

Odabir početne vrijednosti P-niza i tablice zamjene

Nema ništa posebno u vezi cifara pi. Ovaj izbor je da se inicijalizira sekvenca koja nije povezana s algoritmom, a koja se može pohraniti kao dio algoritma ili preuzeti po potrebi (Pi (broj)). Kao što Schneier ističe: "Svaki niz nasumičnih bitova cifara e, RAND tabela ili nasumično generisane cifre će poslužiti."

Kripto otpor

  • slab S-box (i slab ključ koji ga generiše) znači da postoje takvi i, j, N=(1,2,3,4) : SN[i]==SN[j]

Kriptografska snaga uglavnom zavisi od F(x). Ovo je istakao Serge Vaudenay, govoreći o prisutnosti male klase slabih ključeva (generisanje slabih S-kutija): vjerovatnoća pojave slabe S-kutije je . Razmatrao je i pojednostavljenu verziju Blowfisha, sa poznatom funkcijom F(x) i slabim ključem. Ova varijanta zahteva odabrane otvorene tekstove (t je broj krugova, a simboli označavaju operaciju dobijanja celobrojnog dela broja). Ovaj napad se može koristiti samo za algoritam sa . Za to su potrebni otvoreni tekstovi, a varijanta sa poznatim F(x) i slučajnim ključem zahtijevaju otvoreni tekstovi. Ali ovaj napad nije efikasan za Blowfish sa 16 rundi.

John Kelsey je razvio napad koji je omogućio krekiranje Blowfish-a od 3 iteracije. Oslanja se na činjenicu da modulo sabiranje i XOR nisu komutativni.

Nije moguće unaprijed odrediti da li je ključ slab. Možete provjeriti tek nakon što je ključ generiran.

Kriptografska snaga se može podesiti promjenom broja rundi šifriranja (povećanjem dužine P niza) i broja korištenih S-kutija. Smanjenje broja korištenih S-kutija povećava vjerovatnoću slabih tipki, ali smanjuje količinu korištene memorije. Prilagođavanjem Blowfisha 64-bitnoj arhitekturi može se povećati broj i veličina S-boxa (a samim tim i memorija za nizove P i S), kao i zakomplikovati F(x), a gore navedeni napadi su nemogući za algoritam sa takvom funkcijom F(x).

Modifikacija F(x): 64-bitni blok se dovodi na ulaz, koji je podijeljen na osam 8-bitnih blokova (X1-X8). Rezultat se izračunava po formuli , gdje je
Do danas (novembar 2008.) ne postoje napadi koji se mogu izvesti u razumnom roku. Uspješni napadi su mogući samo zbog grešaka u implementaciji.

Primjer algoritma

Primjer slobodno distribuirane verzije Blowfish algoritma u akciji.
Opcije: Veličina ključa: 448 bit Veličina bloka: 64 bit Broj rundi: 16 način rada: ECB

Prijave

  • heširanje lozinke
  • zaštita Email i fajlove
    • GnuPG (sigurna pohrana i prijenos)
  • u komunikacijskim linijama: hrpa ElGamala (nije patentirano) ili RSA (patent je istekao 2000.) i Blowfish umjesto IDEA
    • na Intel Express 8100 ruteru sa 144-bitnim ključem
  • sigurnost u protokolima mrežnog i transportnog sloja
    • PuTTY (mrežni sloj)
    • SSH (transportni sloj)
    • OpenVPN (kreirajte šifrirane kanale)

Poređenje sa simetričnim kriptosistemima

Brzina enkripcije algoritma u velikoj mjeri ovisi o korištenoj tehnici i sistemu komandi. Na različitim arhitekturama, jedan algoritam može značajno nadmašiti svoje konkurente u brzini, dok se na drugom situacija može izjednačiti ili čak promijeniti u suprotnom smjeru. Štaviše, implementacija softvera u velikoj mjeri ovisi o korištenom kompajleru. Upotreba asemblerskog koda može povećati brzinu enkripcije. Na brzinu šifriranja utječe vrijeme izvršenja operacija mov, add, xor, a vrijeme izvršenja operacija se povećava prilikom pristupa ram memorija(za procesore Pentium serije oko 5 puta). Blowfish radi bolje kada koristi keš za pohranjivanje svih potključeva. U ovom slučaju je ispred DES, IDEA algoritama. Na IDEA kašnjenje utječe operacija množenja po modulu. Brzina Twofish-a može biti bliska Blowfish-u zbog većeg šifrovanog bloka.

Iako je Blowfish brži od svojih kolega, ali s povećanjem učestalosti promjene ključa, glavno vrijeme njegovog rada preći će u pripremnu fazu, što smanjuje njegovu efikasnost stotinama puta.

vidi takođe

Linkovi

  • Serge Vaudenay. O slabim ključevima Blowfisha
  • Dieter Schmidt. Kaweichel, proširenje Blowfisha za 64-bitne arhitekture

Comodo Disk Encryption štiti vrijedne informacije šifriranjem bilo koje particije tvrdi disk u sistemu. Šifriranje je proces kodiranja podataka pomoću algoritma koji je poznat samo programu za šifriranje, tako da niko drugi ne može pročitati podatke. Šifrovanje se dešava "u hodu" tako da nema potrebe da se računar isključi ili ponovo pokrene. Comodo Disk Encryption nudi nekoliko opcija za pristup šifriranim podacima koje možete birati ovisno o vašim zahtjevima. Prva opcija je da postavite lozinku i koristite je svaki put kada želite pristupiti zaštićenim podacima. Drugi način pristupa je korištenje USB uređaja kao "ključa" za pohranu podataka. Za pristup USB podacima, uređaj mora biti povezan sa računarom. I treća opcija je korištenje i lozinke i USB uređaja u isto vrijeme. Ova opcija je najpouzdanija. Da biste dešifrirali podatke, morat ćete povezati uređaj i unijeti lozinku.
Čuvanje i zaštita vrijednih podataka je pitanje koje je bilo i biće vrlo relevantno. Sadržaj povjerljivih informacija na stacionarnim i prijenosnim računarima povezan je s određenim rizikom od gubitka ovih informacija, koji stalno raste. I samo korištenje softvera kao što je Comodo Disk Encryption može riješiti ovaj problem. Nemojte zanemariti šifriranje vrijednih podataka - to će ih zaštititi od drugih korisnika vašeg računala, kao i od mrežnih napada hakera.

Ključne karakteristike i funkcije

  • Zaštita podataka od hakera i svakog drugog neovlaštenog pristupa.
  • Čak i ako je vaš laptop ukraden, napadači neće moći pročitati šifrirane podatke.
  • Slobodno dopustite drugim ljudima da koriste vaš računar, znajući da osjetljivi podaci neće pasti u njihove oči.

Posebni zahtjevi

32-bitna enkripcija

  • Windows 7 - 32 bit / Windows Vista / Windows XP / Windows 2000 / Windows Server 2003

64-bitna enkripcija

  • Windows 7 - 64 bit / Windows Vista / Windows XP / Windows Server 2003
  • 32 MB RAM-a i 6 MB slobodnog prostora na disku

Naše „perverzije sa supstitucijom uvoza“ (bilo je to davno, Eugene radi na doktorskoj disertaciji, a svi čekamo da se njegove članke mogu potpisivati ​​sa „profesorom“. 😉 - Napomena ur.) Mi smo. detaljno se upoznao sa algoritmom šifriranja Grasshopper, koji je definiran u GOST 34.12-2015. Pored ovog algoritma, još jedan je opisan u GOST-u, sa šifrovanom dužinom bloka od 64 bita, koji se zove "Magma".

Ovaj algoritam je tačna kopija algoritma blok šifriranja iz starog GOST 28147-89, sa jednim izuzetkom. Novi GOST 34.12-2015 definira i postavlja permutacijsku tablicu za nelinearnu bijektivnu transformaciju, koja je bila odsutna u starom GOST 28147-89, a zadatak njegovih elemenata je u potpunosti bio dat ljudima koji implementiraju ovaj algoritam. Teoretski, ako sami odredite elemente permutacijske tablice i držite tablicu u tajnosti, to će povećati snagu algoritma šifriranja (zbog toga se dužina ključa zapravo povećava), međutim, kao što vidite, programeri GOST-a 34.12-2015 odlučio da se korisnicima oduzme standard nezavisnosti.

Kao što je već spomenuto, dužina šifriranog bloka u Magma algoritmu je 64 bita. Dužina ključa za šifriranje je 256 bita.

UPOZORENJE

Kada čitate GOST, imajte na umu da se u svim 8-bajtnim nizovima testnih sekvenci nulti bajt nalazi na kraju niza, a sedmi na početku (ako pažljivo pročitate članke o Stribogu i Grasshopperu, onda bi ova karakteristika naših kriptostandarda trebala biti poznata).

Malo teorije

U opisanom algoritmu, blok koji se šifrira (podsjećam da je njegova dužina 64 bita) podijeljen je na dva dijela jednake dužine (32 bita) - desni i lijevi. Zatim se izvode 32 iteracije koristeći iteracijske ključeve dobivene iz originalnog 256-bitnog ključa za šifriranje.


Tokom svake iteracije (sa izuzetkom trideset druge), po jedna transformacija zasnovana na Feistelovoj mreži se izvodi na desnoj i lijevoj polovini bloka koji se šifrira. Prvo, desnoj strani se dodaje modulo 32 sa trenutnim ključem iteracije, zatim se rezultujući 32-bitni broj podijeli na osam 4-bitnih brojeva, a svaki od njih se konvertuje u drugi 4-bitni broj pomoću permutacijske tablice (ako ste zapamtite, u prethodna dva članka to se zvalo nelinearna bijektivna transformacija). Nakon ove konverzije, rezultirajući broj se ciklički pomiče ulijevo za jedanaest cifara. Rezultat se zatim bilježi lijevom polovinom bloka. Rezultirajući 32-bitni broj se upisuje u desnu polovinu bloka, a stari sadržaj desne polovine se prenosi u lijevu polovinu bloka.



Tokom posljednje (trideset druge) iteracije, desna polovina se transformira na isti način kao što je gore opisano, nakon čega se rezultat upisuje na lijevu stranu originalnog bloka, a desna polovina zadržava svoju vrijednost.

Ključevi iteracije su izvedeni iz originalnog 256-bitnog ključa. Originalni ključ je podijeljen na osam 32-bitnih potključeva, a zatim se koriste sljedećim redoslijedom: tri puta od prvog do osmog i jednom od osmog do prvog.



Za dešifriranje se koristi isti niz iteracija kao i za šifriranje, ali redoslijed ključeva je obrnut.


Dakle, nakon kratkog i malog poniranja u teoriju, krenimo s kodiranjem...

Osnovne funkcije standarda

Budući da algoritam koristi 32-bitne blokove (u obliku tzv. binarnih vektora), prvo definiramo upravo ovaj blok:

// Veličina bloka je 4 bajta (ili 32 bita) #define BLOCK_SIZE 4 ... // Definirajte tip vect kao 4-bajtni niz typedef uint8_t vect;

Sabiranje dva binarna vektora po modulu 2

Svaki bajt prvog vektora se iksuje sa odgovarajućim bajtom drugog vektora, a rezultat se upisuje u treći (izlazni) vektor:

Statički void GOST_Magma_Add(const uint8_t *a, const uint8_t *b, uint8_t *c) ( int i; for (i = 0; i< BLOCK_SIZE; i++) c[i] = a[i]^b[i]; }

Sabiranje dva binarna vektora po modulu 32

Ova funkcija je slična funkciji koja se zove “zbrajanje u prstenu ostataka po modulu 2 na stepen n” iz Stribog algoritma, osim što će n u našem slučaju biti 32, a ne 512, kao u Stribog standardu. Dva originalna 4-bajtna vektora su predstavljena kao dva 32-bitna broja, zatim se dodaju, prelivanje, ako postoji, se odbacuje:

Statički void GOST_Magma_Add_32(const uint8_t *a, const uint8_t *b, uint8_t *c) ( int i; unsigned int interni = 0; za (i = 3; i >= 0; i--) ( interni = a[i] + b[i] + (interno >> 8); c[i] = interno & 0xff; ) )

Nelinearna bijektivna transformacija (T transformacija)

Za razliku od algoritama Stribog i Grasshopper (usput, ova transformacija se tamo naziva S-transformacija), tablica permutacije se ovdje koristi drugačije:

Statički neoznačeni znak Pi= ( (1,7,14,13,0,5,8,3,4,15,10,6,9,12,11,2), (8,14,2,5,6 ,9,1,12,15,4,11,0,13,10,3,7), (5,13,15,6,9,2,12,10,11,7,8,1,4 ,3,14,0), (7,15,5,10,8,1,6,13,0,9,3,14,11,4,2,12), (12,8,2,1) ,13,4,15,6,7,0,10,5,3,14,9,11), (11,3,5,8,2,15,10,13,14,1,7,4 ,12,9,6,0), (6,8,2,3,9,10,5,12,1,14,4,7,11,13,0,15), (12,4,6) ,2,10,5,11,9,14,8,13,7,0,3,15,1) );

Budući da je u tekstu standarda (prema nepoznatoj tradiciji) nulti bajt napisan na kraju, a zadnji na početku, onda da bi program ispravno radio, redovi tabele moraju biti upisani obrnutim redosledom, a ne kako je navedeno u standardu.

Sam kod za funkciju konverzije T je sljedeći:

Statički void GOST_Magma_T(const uint8_t *in_data, uint8_t *out_data) (uint8_t first_part_byte, sec_part_byte; int i; for (i = 0; i< 4; i++) { // Извлекаем первую 4-битную часть байта first_part_byte = (in_data[i] & 0xf0) >> 4; // Izdvoj drugi 4-bitni dio bajta sec_part_byte = (in_data[i] & 0x0f); // Izvršite zamjenu prema tablici zamjene first_part_byte = Pi; sec_part_byte = Pi; // "Zalijepi" oba 4-bitna dijela nazad u bajt out_data[i] = (first_part_byte<< 4) | sec_part_byte; } }

I dalje dostupno samo članovima

Opcija 1. Pridružite se zajednici "site" da pročitate sve materijale na stranici

Članstvo u zajednici tokom navedenog perioda će vam omogućiti pristup SVIM Hakerskim materijalima, povećati vaš lični kumulativni popust i omogućiti vam da akumulirate profesionalnu ocjenu Xakep Score!