MARS (criptografie)

MARTE
Creator Carolyn Barwick, Don Coppersmith
Creată 1998 _
publicat 1998 _
Dimensiunea cheii 128-448 biți
Dimensiunea blocului 128 de biți
Numărul de runde 32
Tip de Rețeaua Feistel

MARS este un  cifr candidat AES dezvoltat de IBM , care a creat DES la un moment dat . IBM spune că algoritmul MARS se bazează pe cei 25 de ani de experiență criptoanalitică a companiei și, împreună cu puterea sa criptografică ridicată, cifrul permite implementarea eficientă chiar și în limitele cardurilor inteligente .

Don Coppersmith , unul dintre autorii cifrului Lucifer ( DES ), cunoscut pentru o serie de articole despre criptologie, a luat parte la dezvoltarea cifrului : îmbunătățirea structurii cutiilor S împotriva criptoanalizei diferențiale , metoda de multiplicare rapidă a matricei ( Algoritmul Coppersmith-Winograd ), criptoanaliza RSA . În plus față de el, la dezvoltarea algoritmului au luat parte Carolyn Barwick , Edward D'Evignon , Rosario Genaro , Shai Halevi , Charanjit Jutla , Steven M. Matyas Jr. , Luke O'Connor , Mohamed Pereviyan , David Safford , Nevenko Zunich .

Conform regulilor competiției AES , participanții ar putea face modificări minore la algoritmii lor. Profitând de această regulă, autorii MARSa au modificat procedura de extindere a cheii, ceea ce a făcut posibilă reducerea cerințelor pentru non-volatil și RAM . O versiune modificată a algoritmului va fi furnizată mai jos.

Pe baza rezultatelor competiției AES , MARS a ajuns în finală , dar a pierdut în fața lui Rijndael . După anunțarea rezultatelor (19 mai 2000), echipa de dezvoltare și-a format propria opinie cu privire la concursul AES [1] , unde a comentat pretențiile la creația lor.

MARS este acum distribuit în întreaga lume sub o licență fără drepturi de autor .

Scurtă descriere a algoritmului

MARS este un cifru bloc simetric cu o cheie secretă. Dimensiunea blocului pentru criptare este de 128 de biți, dimensiunea cheii poate varia de la 128 la 448 de biți inclusiv (multiplii de 32 de biți). Creatorii au căutat să combine viteza de codificare și puterea cifrului în algoritmul lor. Rezultatul este unul dintre cei mai puternici algoritmi din competiția AES .

Algoritmul este unic prin faptul că a folosit aproape toate tehnologiile existente utilizate în criptoalgoritmi, și anume:

Utilizarea amestecării duble prezintă o dificultate pentru criptoanaliza , pe care unii o atribuie dezavantajelor algoritmului. În același timp, în acest moment nu există atacuri eficiente asupra algoritmului, deși unele chei pot genera subchei slabe.

Structura algoritmului

Autorii cifrului au pornit de la următoarele ipoteze:

  1. Alegerea operațiunilor . MARS a fost conceput pentru a fi utilizat pe cele mai avansate computere ale vremii. Pentru a obține cea mai bună performanță defensivă, cele mai „operațiuni puternice” susținute în acestea au fost incluse în acesta. Acest lucru a permis un raport mai mare de securitate pe instrucțiune pentru diferite implementări de cifrare.
  2. Structura cifrului . Douăzeci de ani de experiență în domeniul criptografiei i-au condus pe creatorii algoritmului la ideea că fiecare rundă de criptare joacă un rol în asigurarea securității cifrului. În special, putem observa că prima și ultima rundă sunt de obicei foarte diferite de rundele intermediare („centrale”) ale algoritmului în ceea ce privește protecția împotriva atacurilor criptoanalitice. Astfel, la crearea MARSa s-a folosit o structură mixtă, unde prima și ultima rundă de criptare diferă semnificativ de cele intermediare.
  3. Analiza . Cel mai probabil, un algoritm cu o structură eterogenă va fi mai capabil să reziste metodelor criptoanalitice ale viitorului decât un algoritm cu toate rundele identice. Dezvoltatorii algoritmului MARS i-au dat o structură foarte eterogenă - rundele algoritmului sunt foarte diferite unele de altele.

Cifrul MARS a folosit următoarele metode de criptare:

  1. Lucrul cu cuvinte pe 32 de biți . Toate operațiunile se aplică cuvintelor de 32 de biți. adică toate informațiile originale sunt împărțite în blocuri de 32 de biți. (dacă blocul s-a dovedit a fi mai scurt, atunci a fost umplut la 32 de biți)
  2. Rețeaua Feistel . Creatorii cifrului au crezut că aceasta este cea mai bună combinație între viteza de criptare și puterea criptografică. MARS folosește o rețea Feistel de tip 3.
  3. Simetria algoritmului . Pentru rezistența cifrului la diferite atacuri, toate rundele sale au fost făcute complet simetrice , adică a doua parte a rundei este o repetare în oglindă a primei sale părți.

Structura algoritmului MARS poate fi descrisă după cum urmează:

  1. Pre-cheie: subblocurile de 32 de biți A, B, C, D sunt suprapuse cu 4 fragmente ale cheii extinse k 0 ... k 3 de modulo 2 32 ;
  2. Se efectuează 8 runde de amestecare directă (fără participarea cheii de criptare);
  3. Se efectuează 8 runde de conversie cripto-directă;
  4. Se efectuează 8 runde de transformare cripto inversă; [2]
  5. Se efectuează 8 runde de mixare inversă, de asemenea, fără participarea cheii de criptare;
  6. Suprapunerea finală a fragmentelor cheii extinse k 36 ...k 39 prin operația de scădere modulo 2 32 .

Mixare directă

În prima fază, fiecare cuvânt de date este suprapus cu un cuvânt cheie, iar apoi sunt opt ​​runde de amestecare conform rețelei Feistel de al treilea tip, împreună cu unele amestecări suplimentare. În fiecare rundă, folosim un cuvânt de date (numit cuvânt sursă) pentru a modifica alte trei cuvinte (numite cuvinte țintă). Tratăm cei patru octeți ai cuvântului original ca indici în două casete S, S 0 și S 1 , fiecare constând din 256 de cuvinte de 32 de biți, apoi XOR sau anexăm datele corespunzătoare din caseta S în alte trei cuvinte.

Dacă cei patru octeți ai cuvântului original sunt b 0 , b 1 , b 2 , b 3 (unde b 0 este primul octet și b 3 este octetul înalt), atunci folosim b 0 , b 2 ca indici în blocul S 0 și octeții b 1 , b 3 , ca indici în S-box S 1 . Mai întâi XOR S 0 la primul cuvânt țintă și apoi adăugați S 1 la același cuvânt. De asemenea, adăugăm S 0 la al doilea cuvânt țintă și blocăm XOR-S 1 la al treilea cuvânt țintă. În cele din urmă, rotim cuvântul original cu 24 de biți spre dreapta.

În runda următoare, rotim cele patru cuvinte pe care le avem: astfel încât primul cuvânt țintă curent devine următorul cuvânt sursă, al doilea cuvânt țintă curent devine primul cuvânt țintă nou, al treilea cuvânt țintă devine următorul al doilea cuvânt țintă și cuvântul sursă curent devine al treilea cuvânt țintă.

Mai mult, după fiecare dintre cele patru runde, adăugăm unul dintre cuvintele țintă înapoi la cuvântul original. Mai exact, după prima și a cincea rundă, adăugăm al treilea cuvânt țintă înapoi la cuvântul original, iar după a doua și a șasea rundă, adăugăm primul cuvânt țintă înapoi la cuvântul original. Motivul acestor operațiuni suplimentare de amestecare este eliminarea câtorva atacuri cripto diferențiale simple în faza de amestecare pentru a rupe simetria în faza de amestecare și a obține un flux rapid.

Pseudocod 1. // Prima suprapunere a unei chei pe date 2. 3. 4. // Apoi 8 reprize de amestecare înainte 5. // folosiți D[0] pentru a modifica D[1]; D[2]; D[3] 6. // accesează 4 S-box 7.8.9.10 _ _ _ 11. // și rotiți cuvântul original la dreapta 12. 13. // faceți și operațiuni suplimentare de amestecare 14. 15. // adaugă D[3] cuvântului original 16. 17. // adaugă D[1] cuvântului original 18. // rotiți matricea D[ ] 19.20 .

Miez criptografic

Nucleul criptografic al MARS este o rețea Feistel de tip 3 care conține 16 runde. În fiecare rundă, folosim funcția E-cheie, care este o combinație de înmulțiri, rotații și apeluri S-box. Funcția preia un cuvânt de date ca intrare și returnează trei cuvinte, cu care operația de adăugare sau XOR la ​​alte trei cuvinte de date va fi efectuată ulterior. În plus, cuvântul sursă este rotit cu 13 biți spre stânga.

Pentru a oferi rezistență serioasă la atacurile cripto, cele trei valori de ieșire ale funcției E (O 1 , O 2 , O 3 ) sunt utilizate în primele opt runde și în ultimele opt runde în ordine diferite. În primele opt runde, adăugăm O 1 și O 2 la primul și, respectiv, al doilea cuvânt țintă și XOR O 3 la al treilea cuvânt țintă. Pentru ultimele opt runde, adăugăm O 1 și O 2 la al treilea și, respectiv, al doilea cuvânt țintă și XOR O 3 la primul cuvânt țintă.

Pseudocod 1. // Efectuați 16 runde de criptare folosind cheia 2. 3. 4. 5. 6. // primele 8 runde de conversie forward 7. 8. 9. // apoi 8 runde de transformare inversă 10. 11. 12. 13. // rotiți matricea D[ ] 14. 15. E-funcție

Funcția E preia un cuvânt de date ca intrare și folosește încă două cuvinte cheie, producând trei cuvinte ca rezultat. În această funcție, folosim trei variabile temporare, notate L, M și R (pentru stânga, mijloc și dreapta).

Inițial, setăm R la valoarea cuvântului original deplasat cu 13 biți la stânga și setăm M la suma cuvintelor originale și primul cuvânt cheie. Apoi folosim primii nouă biți ai lui M ca index pentru una dintre cele 512 cutii S (care se obține prin combinarea S 0 și S 1 prin amestecare de fază) și stocăm în L valoarea cutiei S corespunzătoare.

Apoi înmulțim al doilea cuvânt cheie cu R, memorând valoarea în R. Apoi rotim R cu 5 poziții spre stânga (deci cei 5 biți înalți devin cei 5 biți inferiori ai lui R după rotație). Apoi XOR R în L și, de asemenea, ne uităm la cei cinci biți de jos ai lui R pentru a determina cantitatea de schimbare (de la 0 la 31) și rotim M la stânga cu acea cantitate. Apoi, rotim R cu alte 5 poziții la stânga și XOR L în L. În cele din urmă, ne uităm din nou la cei 5 biți cei mai puțin semnificativi ai lui R ca valoare de rotație și rotim L cu acea cantitate spre stânga. Astfel, rezultatul funcției E este de 3 cuvinte (în ordine): L, M, R.

Pseudocod 1. // folosiți 3 variabile temporare L; M; R 2. //adăugați primul cuvânt cheie 3. // înmulțiți cu al doilea cuvânt cheie, care trebuie să fie par 4. 5. // ia S-box 6. 7. // acești biți descriu cantitatea de rotație ulterioară 8. // prima rotatie prin variabila 9. 10. 11. 12. // acești biți descriu cantitatea de rotație ulterioară 13. // a doua rotație variabilă paisprezece.

Mixare inversă

Amestecarea înapoi este aproape aceeași cu cea înainte, cu excepția faptului că datele sunt procesate în ordine inversă. Adică, dacă am combina mixarea înainte și inversă, astfel încât ieșirile și intrările lor să fie conectate în ordine inversă (D[0] înainte și D[3] invers, D[1] înainte și D[2] invers), atunci nu ar vedea rezultatul amestecării. Ca și în amestecul direct, aici folosim și un cuvânt sursă și trei cuvinte țintă. Luați în considerare primii patru octeți ai cuvântului original: b 0 , b 1 , b 2 , b 3 . Vom folosi b 0 , b 2 ca indice pentru S-box - S 1 , și b 1 b 3 pentru S 0 . Să XOR S 1 [b 0 ] în primul cuvânt țintă, scădem S 0 [b 3 ] din al doilea cuvânt, S 1 [b 2 ] din al treilea cuvânt țintă și apoi XOR S 0 [b 1 ] de asemenea la al treilea cuvânt țintă . În cele din urmă, rotim cuvântul original cu 24 de locuri spre stânga. Pentru runda următoare, rotim cuvintele disponibile astfel încât primul cuvânt țintă curent să devină următorul cuvânt sursă, al doilea cuvânt țintă curent să devină primul cuvânt țintă, al treilea cuvânt țintă curent să devină al doilea cuvânt țintă și cuvântul sursă curent devine al treilea cuvânt țintă. În plus, înainte de una dintre cele patru runde „speciale”, scădem unul dintre cuvintele țintă din cuvântul sursă: înainte de a patra și a opta rundă, scădem primul cuvânt țintă; înainte de a treia și a șaptea rundă, scădem al treilea. cuvântul țintă din cuvântul sursă.

Pseudocod 1. // Faceți 8 reprize de amestecare înapoi 2. 3. // operații suplimentare de amestecare 4. 5. //scăderea D[3] din cuvântul original 6. 7. // scade D[1] din cuvântul original 8. // se referă la cele patru elemente ale S-box-urilor 9. 10. 11. 12. 13. // și rotiți cuvântul original spre stânga paisprezece. 15. // rotiți matricea D[] 16. 17. 18. // Scădere cuvânt cheie 19.20 .

Decriptare

Procesul de decodare este inversul procesului de codificare. Codul de decriptare este similar (dar nu identic) cu codul de criptare.

Mixare directă 1. // Suprapunerea cheii inițiale 2. 3. 4. // Apoi faceți 8 runde de amestecare înainte 5. 6. // rotiți matricea D[] 7. 8. // și rotiți cuvântul original la dreapta 9. 10. // accesează 4 elemente ale S-box-urilor 11. 12. 13. 14. 15. // amestecare suplimentară 16. 17. // adaugă D[3] cuvântului original 18. 29. // adaugă D[1] cuvântului original douăzeci. Miez criptografic 1. // Rulați 16 runde folosind tasta de suprapunere 2. 3. // rotiți matricea D[] 4. 5. 6. 7. 8. // ultimele 8 runde în ordine directă 9. 10. 11. // primele 8 runde în ordine inversă 12. 13. 14. 15.


Mixare inversă 1. // Faceți 8 reprize de amestecare înapoi 2. 3. // Rotiți matricea D[] patru. 5. // operatii suplimentare de amestecare 6. 7. // scade D[3] din cuvântul original 8. 9. // scade D[1] din cuvântul original 10. // Rotiți cuvântul original la stânga unsprezece. 12. // se referă la cele patru elemente ale S-box-urilor 13. 14. 15. 16. 17. 18. // scade o subcheie din date 19.20 .

Caracteristicile algoritmului

S-blocuri

La crearea unui S-box S, elementele sale au fost generate de un generator pseudo-aleatoriu, după care au fost testate pentru diferite proprietăți liniare și diferențiale. S-box-urile pseudo-aleatorie au fost generate cu următorii parametri:

(unde  este al-lea cuvânt din ieșirea SHA-1 ) Aici i este considerat a fi un întreg fără semn de 32 de biți, iar c1, c2, c3 sunt niște constante. În implementarea IBM: c1 = 0xb7e15162; c2 = 0x243f6a88 (care sunt notația binară a părții fracționale a și respectiv). c3 a fost schimbat până când au fost găsite cutii S cu proprietăți adecvate. SHA-1 funcționează pe fluxuri de date și folosește little endian.

Proprietăți S-box

Proprietăți diferențiale .

  1. S-box nu trebuie să conțină cuvinte formate din toate 0-urile sau 1-urile
  2. La fiecare două S-box S 0 , S 1 trebuie să difere unul de celălalt în cel puțin 3 din 4 octeți (Deoarece această condiție este extrem de puțin probabilă pentru S-box pseudo-aleatorie, una dintre cele două S-boxes este modificată)
  3. O cutie S nu conține două elemente astfel încât sau
  4. Cutia S nu conține două perechi de elemente ale căror diferențe xor sunt egale și două perechi de elemente a căror diferență ordonată este egală cu
  5. Fiecare două elemente ale S-box-ului trebuie să difere cu cel puțin 4 biți
Cerința #4 nu a fost îndeplinită în implementarea IBM pentru AES, dar a fost corectată imediat după finală. S-a observat că în cutiile S sunt prezente următoarele elemente, contrar acestei cerințe [3] :
XOR Scădere

Proprietăți liniare

  1. Raport de compensare: . Este necesar ca această expresie să fie mai mare decât cel puțin
  2. Offset de un bit: această expresie trebuie să fie mai mare decât cel puțin
  3. Offset pe doi biți: . Este necesar ca această expresie să fie mai mare decât cel puțin
  4. Corelație de un bit : . Este necesar să se minimizeze această expresie printre toate casetele S posibile care satisfac punctele anterioare

Extensie cheie

procedura de extindere a cheilor extinde matricea dată de chei k[], constând din n cuvinte de 32 de biți (unde n este un număr întreg de la 4 la 14) într-o matrice K[] de 40 de elemente. Cheia originală nu trebuie să urmeze nicio structură. În plus, procedura de extindere a cheilor garantează următoarele proprietăți ale cuvântului cheie utilizat în multiplicare în miezul criptografic al algoritmului:

  1. cei doi biți cei mai puțin semnificativi ai cuvântului cheie vor fi întotdeauna unul
  2. niciunul dintre cuvintele cheie nu va conține zece 0 sau 1 consecutiv

Să descriem algoritmul de extindere a cheii.

  1. În primul rând, matricea este complet rescrisă într-o matrice intermediară constând din 15 elemente.
  2. Acest proces se repetă apoi de 4 ori. La fiecare iterație, sunt generate 10 cuvinte cheie extinse. variabilă care afișează numărul curent de iterație (0 pentru prima iterație, 1 pentru a doua etc.)
    1. Matricea T[] este convertită conform următoarei reguli:
    2. Apoi, amestecăm matricea folosind 4 runde ale rețelei Feistel de tip 1. Repetăm ​​următoarea operație de patru ori:
    3. Apoi, luăm zece cuvinte din matricea T[] și le inserăm ca următoarele zece cuvinte în matricea K[], amestecând din nou:
  3. În cele din urmă, trecem peste cele șaisprezece cuvinte folosite pentru înmulțire (K[5],K[7]...K[35]) și le modificăm pentru a se potrivi cu cele două proprietăți descrise mai sus.
    1. Notăm cei doi biți cei mai puțin semnificativi ai lui K[i], conform formulei , și apoi scriem în loc de acești doi biți unul, .
    2. Colectăm o mască M pentru biții w care aparțin unor secvențe de zece sau mai multe zerouri sau unu. De exemplu, dacă și numai dacă aparține unei secvențe de 10 sau mai multe elemente identice. Apoi resetăm (le setăm la 0) valorile acelor M care se află la sfârșitul secvențelor zero sau unu, precum și acelea care se află în biții înalți și inferiți. De exemplu, lăsați cuvântul nostru să arate astfel: (expresia sau înseamnă că 0 sau 1 se va repeta în cuvântul i ori). Atunci masca M va arăta astfel: . Deci resetăm biții în 4, 15, 16, 28 de poziții, adică
    3. În plus, pentru corectare, folosim un tabel de patru cuvinte B[]. Toate elementele tabelului B sunt selectate în așa fel încât pentru ele și pentru toate deplasările lor ciclice să fie îndeplinită proprietatea că nu au șapte 0 sau 1 consecutive. În implementarea IBM, tabelul a fost folosit . Apoi, cei doi biți scrisi j sunt utilizați pentru a selecta un cuvânt din tabelul B, iar cei cinci biți mai puțin semnificativi ai cuvântului K[i-1] sunt folosiți pentru a roti elementele acestuia,
    4. În cele din urmă, modelul p este XOR cu cuvântul original, ținând cont de masca M: . Este de remarcat faptul că cei 2 biți mai puțin semnificativi ai lui M sunt 0, atunci cei doi biți mai puțin semnificativi ai cuvântului final vor fi unul, iar utilizarea tabelului B face posibilă garantarea că nu vor exista 10 0 sau 1 consecutiv în cuvânt

Avantajele și dezavantajele algoritmului

Cifrul a fost un candidat AES , după câteva modificări minore în timpul primului tur al competiției, legate de o modificare a procedurii de extindere a cheii, MARS a trecut cu succes în finală.

În finala competiției, MARS a avut o serie de neajunsuri:

  1. Structură complexă . Structura complexă eterogenă a algoritmului a făcut dificilă nu numai analiza, ci și implementarea acestuia.
  2. Implementarea . Au existat probleme la implementarea cifrului pe platforme care nu suportau operații de multiplicare și rotație pe 32 de biți cu un număr arbitrar de biți.
  3. Resurse limitate . Incapacitatea de a implementa algoritmul în hardware cu resurse mici de memorie operațională sau nevolatilă .
  4. Protecție . MARS sa dovedit a fi slab protejat de atacurile de rulare și consum de energie .
  5. Extensie cheie . MARS a fost mai rău decât ceilalți finaliști AES în sprijinirea expansiunii cheie din mers.
  6. Paralelizabilitate . Este posibil să se paralelizeze doar o mică parte a algoritmului.

Pentru toate aceste deficiențe, comisia de experți a evidențiat un avantaj major al acestui algoritm - simetria sa. Pe baza deficiențelor identificate, MARS, așa cum era de așteptat, nu a devenit câștigătorul AES.

Răspuns la analiștii AES

După anunțarea rezultatelor competiției AES, echipa MARS și-a lansat recenzia întregii competiții. A pus sub semnul întrebării criteriile de evaluare a competiției. Ei credeau că principala caracteristică a cifrului ar trebui să fie tocmai fiabilitatea și rezistența acestuia (de exemplu, la atacuri cu forță brută ). În plus, au răspuns la fiecare pretenție a juriului la algoritmul lor.

1. MARS nu este potrivit pentru implementarea hardware Printre plângerile referitoare la cifr au fost implementarea sa hardware dificilă, care ar putea duce la povara Internetului, precum și introducerea unor scheme mari, de dimensiuni.

Dezvoltatorii susțin că implementarea lor este capabilă să funcționeze la o viteză de 1,28 Gbps, ceea ce este acceptabil pentru Internet, iar costul cipurilor lor poate fi mare (13 USD pentru un cip de 12 Gbps sau 1 USD pentru un cip de 1 Gbps), dar în prețul va scădea semnificativ în viitor.

2. MARS nu este potrivit pentru implementare pe dispozitive cu memorie redusă Pentru implementarea pe carduri SMART, algoritmii au doar 128 de octeți de memorie. Pentru procedura de extindere a cheii, MARS necesită 512 octeți.

Dezvoltatorii cred că nu există niciun motiv pentru a implementa AES pe o resursă atât de vulnerabilă cu memorie scăzută precum cardurile inteligente, deoarece toate aceste resurse pot fi convertite ușor și rapid în sisteme cu chei publice.

3. MARS nu este potrivit pentru implementare pe FPGA MARS nu este potrivit pentru implementare pe platforme unde rotația nu este permisă (în funcție de factori externi).

Dezvoltatorii observă că această problemă nu este fatală, dar necesită puțin timp pentru a adapta algoritmul la această platformă.

4. Extinderea tastei MARS este o operațiune foarte grea

Dezvoltatorii susțin că aceasta este o declarație ridicolă. Ei susțin că au raportul „ideal” între memoria suplimentară per cheie și debit (25 de octeți per cheie)

În concluzie, dezvoltatorii își oferă analiza algoritmilor participanților la AES, conform rezultatelor cărora MARS, împreună cu Serpent , a fost cel mai bun candidat pentru titlul de AES. [unu]

Analiza securității algoritmului

În prezent, nu există atacuri eficiente asupra acestui algoritm. Deși are câteva puncte slabe [1] :

  1. Subcheile cu un număr mare de zerouri sau unuuri repetate pot duce la atacuri eficiente asupra MARS, deoarece subcheile slabe vor fi generate pe baza acestora.
  2. Cei doi biți cei mai puțin semnificativi utilizați în înmulțire sunt întotdeauna 1. Astfel, există întotdeauna doi biți de intrare care sunt neschimbați în timpul procesului de multiplicare a cheii, precum și doi biți de ieșire care sunt independenți de cheie.

Literatură

  • Panasenko S. P. Algoritmi de criptare. Carte de referință specială - Sankt Petersburg. : BHV-SPb , 2009. - S. 65-68, 219-228. — 576 p. — ISBN 978-5-9775-0319-8

Note

  1. 1 2 3 Cercetare Criptografie . Consultat la 13 noiembrie 2011. Arhivat din original pe 16 mai 2006.
  2. Etapele 3 și 4 sunt numite „nucleul criptografic” al algoritmului MARS
  3. Cercetare Criptografie . Consultat la 14 noiembrie 2011. Arhivat din original la 23 mai 2009.

Link -uri