Sunteți pe pagina 1din 9

WHIRLPOOL

În știința calculatoarelor și criptografie , Whirlpool (uneori în stil WHIRLPOOL ) este o


funcție hash criptograficea . Acesta a fost proiectat de Vincent Rijmen (co-creator al
Advanced Encryption Standard ) și Paulo SLM Barreto , care lau descris pentru prima dată în
2000.
Hash-ul a fost recomandat de proiectul Nessie (New European Schemes for Signatures,
Integrity and Encryption). Acesta a fost , de asemenea , adoptat de Organizația
Internațională de Standardizare (ISO) și Comisia Electrotehnică Internațională (IEC) , ca parte
comuna a standardului internațional ISO/IEC 10118-3 .

Caracteristici de design

Whirlpool Galaxy (M51), care a inspirat numele


algoritmului.

Funcția de hash Whirlpool numit după Whirlpool Galaxy (M51) , din constelația câinii de
vânătoare care primele galaxii cu structura spirala observate.
Whirlpool este un hash proiectat după Square block cipher(algoritm determinist) , și este
considerat a fi din familia de funcții cifru bloc.
Whirlpool este o construcție Miyaguchi-Preneel bazat pe modificarea substanțiala a Advanced
Encryption Standard (AES).
Whirlpool ia un mesaj de orice lungime mai mică de 2 256 biți și returnează un mesaj digest de
512-biți.
Autorii au declarat că
"WHIRLPOOL nu este (și nu va fi niciodată) brevetate. Acesta poate fi utilizat în mod
gratuit pentru orice scop."
Schimbări versiune
Versiunea Originala Whirlpool a fost numita Whirlpool-0 , prima revizuire Whirlpool a
fost numita Whirlpool-T și cea mai recentă versiune numita Whirlpool în următorirea de
vectori de test.

 În prima revizuire din 2001, s-box a fost schimbat dintr-un generator aleator cu
proprietăți criptografice bune la una care are proprietăți criptografice mai bune și este
mai ușor de implementat în hardware.
 În cea de a doua revizuire (2003), s-a adăugat lista de recomandat pentru utilizare
funcțiilor criptografice ale Nessie . Modificările în cauzul blocul de substituție ( S-
box) Whirlpool: în prima versiune a structurii S-box nu a fost descrisă, și in generat
destul de arbitrar, ceea ce a creat unele probleme cu implementare hardware
Whirlpool. În versiunea WHIRLPOOL-T S-box-ul a capatat o structură clară.
Un defect difuz Matrici WHIRLPOOL-T, găsit de Taizo Shirai si Kyoji Shibutani a fost
modificată ulterior, iar ultima ( a treia) versiune, numită pe scurt Whirpool, a fost adoptat de
ISO (organizație internațională pentru standardizare) standardul ISO / IEC 10118-3: 2004 în
2004 .

Descriere

Algoritmul folosite în operatia câmpului Galois 𝐺𝐹(2)8 dupa modulul polinomului ireductibil
𝑝8 (𝑥) = 𝑥 8 + 𝑥 4 + 𝑥 2 + 1.
Polinoamele pentru concizie sunt scrise în hexazecimal. De exemplu, 11𝐷𝑥 insemana 𝑝8 (𝑥).
 simbolul ○ desemnată operator al compoziției . Expresie f○g înseamnă compoziția
funcțiilor f și g. Pentru a indica funcțiile compoziției secvenței
utilizeaza simbolul :

 -setul de matrici m x n peste 𝐺𝐹(2)8


 - Matricea circulant m x m, primul rând care este alcătuit din
elementele , și anume:

, sau pur si simplu


.
Formatul datelor
După cum sa menționat mai sus, Whirlpool construiteste un cifru bloc special de 512 biti W.
Care funcționează cu cheie de 512 biți.
Transformarea unui rezultat intermediar al unui hash numit hash-stare sau doar stare. La
calcularea stării de obicei este reprezentat de matricea de stare. Pentru Whirlpool într - o
matrice Prin urmare, blocurile de 512 biți de date urmează să fie convertite în
acest format înainte de orice calcule. Acest lucru se realizează prin introducerea unei funcții
μ:

Simplu vorbind, starea de umplere a datelor de matrice merge linie cu linie. Astfel, fiecare
octet al matricei este un polinom care corespunde .
Transformări
Transformarea neliniare ϒ (S-box)
Funcția constă dintr - o unitate de substituție aplicație
paralelă ( S-box ) la toate matrice de stare pe biti:

Unitatea de substituție reprezentată prin următorul tabel de substituție:


Tabel 1. Bloc de substitutie

Permutare circulară π

Permutare rotește starea fiecărei coloane a matricei,


astfel încât coloana j se deplasează în jos cu j poziţii:

Obiectivul acestei transformări - schimbarea starii rândurilor de bytes a matricei între ele.
Difuzie liniară θ

Difuzia liniară - O matrice de transformare liniară, care


este o matrice MDS (Maximum Distance Separable)
, respectiv:
astfel:
Cu alte cuvinte, starea matricei din dreapta este multiplicat cu matricea C. Să ne amintim că
elementele de matrice ale operațiilor de adunare și înmulțire sunt efectuate în
Matrice MDS- Este o matrice peste un câmp finit K, dacă am lua ca o matrice a unei
transformări liniare spațiul în spațiu , atunci orice doi vectori în
spațiu de genul va avea cel putin diferențiale în componente. Adică, un
set de vectori formează un cod având proprietati maxime de distanțată ( Eng.
Maximum Distance Separable code). Astfel, codul este, ca exemplu, cod Reed-Solomon . In
Whirlpool proprietatea maximă de distanțată MDS-matrix inseamnă că numărul total de
schimbare vectoruluide biti x și vectorul nu mai puțin de 8+1=9. Cu alte
cuvinte, orice schimbare într-un singur bit x se schimbă toti 8 biti In aceasta consta
problema liniara a difuziei .
După cum sa menționat mai sus, MDS-matrix din ultima versiune, Whirlpool a fost schimbata
datorita articolului lui Taizo Shirai si Kyoji Shibutani. Ei au analizat MDS-matrix, din a doua
versiune a WHIRLPOOL și au indicat posibilitatea de creșterea rezistenței in criptanaliza
diferențială din Whirlpool. De asemenea, au oferit 224 candidati pentru poziția noului MDS-
matrix. Din această listă, autori Whirlpool au ales pe cel mai ușor de implementat în
hardware.

Adăugarea unei chei

Funcția de adăugare a cheie reprezintă adăugarea


operatiei pe biti ( XOR ) la matricea de stare a și a cheii :

Constanta rundei

În fiecare rundă, se folosește o matrice de constante astfel


încât:
De aici vedem că primul rând al matricei este rezultatul blocului de substituție la
numărul de biti . Restul 7 rânduri sunt cu zero.

Funcţia rundei
Pentru fiecare rundă, funcția rundei este o transformare compusa
parametrul este de fapt matricea cheiei
. Descrierea funcției rundei după cum urmează:
Extensia cheii

Pentru fiecare rundă, cheia de criptare necesită 512-bit . Pentru a rezolva


această problemă, mulți algoritmi au introdus așa-numita procedură de expansiune a cheii .
Extensia cheii în Whirlpool este pus în aplicare după cum urmează:

Astfel, din cheia cunoscută se face pentru secvența chei pentru fiecare rundă
din cifru bloc.
Cifru bloc W

Cifrul bloc special de 512 bit utilizează in


calitate de parametru o cheie de 512 biți și efectuează următoarea succesiune de transformări:

unde cheile generată prin procedeul


expansiune cheii descris mai sus . In funcția hash Whirlpool numărul de runde este R=10.
Mesajul suplimentar de intrare
Whirlpool, la fel ca orice altă funcție hash ar trebui să pună în aplicare un mesaj hashing de
lungime arbitrară. Deoarece unitatea de criptare internă funcționează cu un mesaj de intrare de
512 biți, mesajul original trebuie să fie împărțită în blocuri de 512 biți. În acest caz, ultimul
bloc, care conține sfârșitul mesajului poate fi incomplet.
Pentru a rezolva această problemă Whirlpool folosește un algoritmul Merkle-Damgaard
suplinind mesajul de intrare. Rezultatul adăugări la mesajul este mesajul a cărei lungime este
un multiplu de 512. Fie - lungimea mesajului original, atunci se obținute în mai multe etape:
1. La sfârșitul mesajului M se atribuie bitul 1.
2. Se atribuie x biti „0” astfel încât lungimea șirului rezultat un număr impar de ori
3. În cele din urmă se atribuită 256-biți reprezentării numărul.

Mesajul consolidat este scris sub forma și este împărțit în blocuri


de 512 biți pentru o prelucrare ulterioară.
Funcția de compresie
Whirlpool aplică schema hash Miyaguchi-Preneel:

blocuri a mesajului
modificatcriptate secvențial in cifru bloc :

unde (Vectorul de inițializare) - șir de 512-bit, compus din "0".


Calculare hash
Suma hash pentru mesajul este valoarea de ieșire 𝐇𝐭 funcții de compresie pentru convertire
înapoi la un șir de 512 biți:
Fiabilitatea
Funcţia hash considerata criptografic rezistenta dacă îndeplinește trei cerințe de bază, care se
bazează pe majoritatea aplicațiilor de funcții hash în criptografie : ireversibilitate , rezistenta
la coliziuni de primul tip și rezistența la coliziuni de al doilea tip .
Fie 𝐡𝐧 - hash Whirlpool de 512-bit cu un subșir de n-biti arbitrari. Autorii Whirlpool sustin ca
funcția hash îndeplinește următoarele cerințe de fiabilităte :

 Generare de conflict necesită calcul de ordinul pentru unui hash WHIRLPOOL


(rezistenta la coliziuni de - al doilea tip ).
 Pentru un anumit 𝐡𝐧 cautarea unui mesaj că 𝐡𝐧 este nevoie de calcul de ordinul 2𝑛 un
hash WHIRLPOOL ( ireversibilitatea ).
 Pentru un mesaj dat detectarea altor mesaje pentru care este nevoie de calcul de
ordinul 2𝑛 pentru un hash WHIRLPOOL (rezistenta la coliziuni de primul tip ).
 Nu se poate găsi corelații sistematice între orice combinație liniară de biți de intrare,
precum și orice combinație liniară de biți de hash sau anticipa care biți din hash isi va
schimba valoarea lor atunci când se schimbă anumiti biți de intrare (rezistență la
criptanaliza liniară și criptanaliza diferențială ).
Prin această declarație autorii Whirlpool adăugat notă:
Acuzațiile provin dintr-o marjă substanțială de siguranță în ceea ce privește toate atacurile
cunoscute. Cu toate acestea, înțelegem că este imposibil să nu facă declarații speculative cu
privire la lucruri necunoscute.

Criptanaliza
Astăzi WHIRLPOOL rezistent la toate tipurile de criptanaliză. In cei 8 ani de existenta
Whirlpool nu a fost înregistrat nici un atac la el.
Cu toate acestea, în 2009 a fost publicata o noua metodă de atac asupra unui hash - The
Rebound Attack (Atac de Revigorarea) . Primele atacuri noi "experimentale" sau efectuat
asupra hashuilor Whirlpool si Grøstl . Rezultatele din criptanaliza sunt prezentate în tabel.
Tabelul 2. Rezultatele de criptanaliza a funcțiilor hash Whirlpool și Grøstl prin metoda
The Rebound attack

Nr de Cantitatea de memorie
Funcţia hash Complexitate Tip de colizie
runde necesară

2120 216 colizie

2120 216 coliziune semi-free-start


WHIRLPOOL
aproape de coliziune
2128 216
semi-free-start

Grøstl-256 2120 270 coliziune semi-free-start

Autorii au folosit următorii termeni și definiții:

 - Vector Inițializare
 – Mesajul, subectul hashului
 - Funcția hash
 funcţia de compresie
Tipurile de coliziune :
 coliziune :
– fixata

 aproape de o coliziune :
- fixata

un număr mic de biți hash diferiti


 coliziune semi-free-start:

coliziune libera :

După cum se poate observa din tabel pentru Whirlpool, s-a reușit crearea unei coliziuni doar
pentru versiunea sa "trunchiata" in rundă a 4.5. Mai mult decât atât, complexitatea calculelor
cerute este destul de mare.
Aplicare
Whirlpool - funcție hashfreeware. Prin urmare, este utilizat pe scară largă în software-ul open
source. Iată câteva exemple de utilizare a Whirlpool:
 Autorii oferă implementări de referință ale algoritmului WHIRLPOOL, inclusiv o versiune
scrisă în C și o versiune scrisă în Java . Aceste implementări de referință au fost eliberate
în domeniul public.
 Jacksum - utilitar freeware pentru a calcula checksum
 ++ Crypto - o bibliotecă de clasă a primitivelor criptografice gratuita disponibila in C ++
 TrueCrypt - un program pentru criptare "on the fly"
 FreeOTFE - software open source proiectat pentru a cripta "on the fly". Disponibil pentru
sistemele de operare, pentru Windows și pentru Windows Mobile (FreeOTFE4PDA)
 DarkCrypt - instrument criptografic și steganographic disponibil gratuit ca un plug-in
pentru Total Commander
Exemple de hash
Pentru comoditatea 512 biți (64 bytes) hashul Whirlpool este adesea prezentate sub forma
unui număr hexazecimal de 128 cifre.
După cum sa menționat mai sus, algoritmul a suferit două schimbări de la lansarea în 2000.
Următoarele exemple de hash-uri sunt calculate din ASCII text PANGRAM The quick brown
fox jumps over the lazy dog pentru toate cele trei versiuni ale Whirlpool:

WHIRLPOOL -0 ("The quick brown fox jumps over the lazy dog") =
4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C
3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D
WHIRLPOOL-T( "The quick brown fox jumps over the lazy dog") =
3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183
AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1
WHIRLPOOL ( "The quick brown fox jumps over the lazy dog") =
B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F
D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35

Chiar și o mică schimbare în textul original al mesajului (în acest caz , se înlocuiește cu o
singură literă: simbolul «d» se înlocuiește cu «e» caracter) conduce la o schimbare completă
în hash :

WHIRLPOOL -0 ( "The quick brown fox jumps over the lazy eog") =
228FBF76B2A93469D4B25929836A12B7D7F2A0803E43DABA0C7FC38BC11C8F2A
9416BBCF8AB8392EB2AB7BCB565A64AC50C26179164B26084A253CAF2E012676
WHIRLPOOL -T ( "The quick brown fox jumps over the lazy eog") =
C8C15D2A0E0DE6E6885E8A7D9B8A9139746DA299AD50158F5FA9EECDDEF744F9
1B8B83C617080D77CB4247B1E964C2959C507AB2DB0F1F3BF3E3B299CA00CAE3

WHIRLPOOL ( "The quick brown fox jumps over the lazy eog") =
C27BA124205F72E6847F3E19834F925CC666D0974167AF915BB462420ED40CC5
0900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38C

Adăugarea de caractere într-un șir de caractere, concatenare de cuvinte și alte modificări vor
afecta, de asemenea, rezultatul.
Exemplu de hash pentru un șir "gol":

WHIRLPOOL -0 ("") =
B3E1AB6EAF640A34F784593F2074416ACCD3B8E62C620175FCA0997B1BA23473
39AA0D79E754C308209EA36811DFA40C1C32F1A2B9004725D987D3635165D3C8
WHIRLPOOL T-("") =
470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F
EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A
WHIRLPOOL("") =
19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7
3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3

Exemple in programare

Limbaj Cod rezultat

echo b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f
PHP 5.0 hash('whirlpool' 8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6
,'test');

puts b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f
Ruby Whirlpool.calc_he 8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6
x('test')

S-ar putea să vă placă și