Funcția hash BMW

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 2 august 2013; verificările necesită 12 modificări .

BMW ( Eng.  BMW  - Blue Midnight Wish ) este o funcție hash criptografică (xf) cu o ieșire de n biți , unde n = 224,256, 384 sau 512. Funcțiile hash sunt concepute pentru a crea „amprente” sau „rezumate” de mesaje ale lungime de biți arbitrară. Sunt utilizate în diverse aplicații sau componente legate de securitatea informațiilor .

BLUE MIDNIGHT WISH a fost conceput pentru a fi o funcție hash criptografică mult mai eficientă decât SHA-2 , oferind totuși aceeași securitate sau mai bună.

Istorie

Pe 7 noiembrie 2008, Institutul Național de Standarde și Tehnologie din SUA ( NIST  - Institutul Național de Standarde și Tehnologie ) a deschis un concurs pentru o nouă funcție hash SHA-3 .  SHA-3 trebuie să accepte dimensiuni de bloc de ieșire de 224, 256, 384 și 512 biți. Blocurile de 160 de biți nu au fost furnizate din cauza posibilității de a găsi coliziuni prin atacuri de forță brută (enumerarea opțiunilor). Au fost păstrate aceleași cerințe ca și pentru funcțiile hash anterioare:

  1. dimensiunea maximă a valorii de intrare,
  2. rezistenta la coliziune ,
  3. rezistență la găsirea unei preimagine și a unei a doua preimagine
  4. modul streaming de calcul „într-o singură trecere”.

Următorii parametri standard de durabilitate au fost avansați la funcții:

Au fost 51 de candidați SHA-3 în primul tur. 14 dintre ei (inclusiv BMW) au avansat în turul doi.

Algoritm

Proprietăți generale

Algoritmul BMW funcționează cu mesajele împărțindu-le în blocuri. Blocul, la rândul său, este împărțit în cuvinte. Dimensiunile blocurilor și cuvintelor depind de implementarea specifică a algoritmului. Tabelul de mai jos enumeră principalele proprietăți ale tuturor celor 4 variante ale algoritmului BMW.

Algoritm Dimensiunea mesajului Dimensiunea blocului Dimensiunea cuvântului Semnatura digitala
BMW224 <2 64 512 32 224
bmw384 <2 64 512 32 384
BMW224 <2 64 1024 64 224
BMW512 <2 64 1024 64 512

Parametri, variabile și constante

Variabil Descriere
H Conductă dublă (țeavă engleză )  . O valoare variabilă care este de cel puțin două ori mai largă decât semnătura digitală finală de n biți.
Q Conductă cvadruplă.
Bună) i-a valoare a lui H. H(0) este valoarea inițială.
H(N) Valoarea finală H. Este folosită pentru a determina semnătura digitală de n biți .
Q(i) i-a valoare a conductei cvadruple.
H(i, j) je este un cuvânt din H(i). Unde H(i) este împărțit într-un număr predeterminat de blocuri numite cuvinte
H(i,0) Primul cuvânt (stânga) din H(i)
Q(i, j) j-al-lea cuvânt al i-a conductă cvadruplă Q(i)
Q(i, a) Primele 16 cuvinte din Q(i), acestea sunt Q(i, j) unde j=0..15
Q(i, b) Ultimele 16 cuvinte din Q(i), acestea sunt Q(i, j) unde j=16..31
l Lungimea mesajului M în biți
m Numărul de biți din blocul de mesaje M(i)
M Mesaj de intrare cu lungimea de biți l
M(i) al-lea bloc al mesajului de intrare. Lungimea biților m
M(i, j) cuvantul M(i). M(i)=[M(i,0),M(i,1),...,M(i,15)]
XL,XH Două cuvinte temporare (lungime 32 sau 64 de biți, în funcție de modificarea algoritmului) utilizate în calcularea H(i)

Operații utilizate în algoritm

  1. Operare XOR pe biți
  2. Operații de adunare + sau scădere pe biți - modulo 32 sau 64 , în funcție de modificarea algoritmului
  3. Operație de deplasare la stânga (dreapta) cu r biți SHL r (respectiv SHR r )
  4. Rotire (rotire la stânga) ROTL r

Caracteristici generale ale structurii BMW

BLUE MIDNIGHT WISH urmează principiile generale de construire a funcțiilor hash care sunt adesea folosite astăzi. Și anume, asta înseamnă că algoritmul este împărțit în două părți:

preprocesare
  1. Introducerea unui mesaj
  2. Analizarea mesajului introdus în blocuri de m biți
  3. Inițializarea valorilor inițiale care vor fi utilizate la calcularea xf
Calcularea hash
  1. Calcularea cazului unui mesaj dintr-un mesaj primit
  2. Folosind acest registru pentru a calcula o secvență de valori H(i)
  3. n biți cei mai puțin semnificativi ( de exemplu LSB -   Least Significant Bits ) sunt selectați ca semnătură digitală

Etapa de precalculare

În funcție de modificarea algoritmului, procesarea mesajului introdus se realizează astfel:

BMW224 sau BMW256

Fie ca lungimea mesajului să fie l. A 1 este atribuit mesajului, urmat de o succesiune de k zerouri, unde k este cea mai mică soluție nenegativă a ecuației l+1+k=448 mod512 . În continuare, este atribuit un bloc de 64 de biți al reprezentării binare a numărului l

BMW384 sau BMW512

Fie ca lungimea mesajului să fie l. A 1 este atribuit mesajului, urmat de o secvență de k zerouri, unde k este cea mai mică valoare nenegativă. rezolvarea ecuației l+1+k=960 mod1024 . În continuare, este atribuit un bloc de 64 de biți al reprezentării binare a numărului l. Un exemplu este reprezentarea post-ty a lui „abc” (conform ASCII )

Inițializarea valorilor inițiale

Valoarea inițială a lui H(0) în depinde de modificarea algoritmului

Algoritm Valoarea inițială H(0)
BMW224 0x000120308090A0B1011121318191A1B2021222328292A2B3031323338393A3B040506070C0D0E0F141516171C1D1

E1F242526272C2D2E2F243536373C3D3E3F

BMW256 0x4041424348494A4B5051525358595A5B6061626368696A6B7071727378797A7B444546474C4D4E4F545556575C5D

5E5F646566676C6D6E6F747576777C7D7E7F

bmw384 0x00010203040506071011121314151617202122232425262730313233243536374041424344454647505152535455

56576061626364656667707172737475767708090A0B0C0D0E0F18191A1B1C1D1E1F28292A2B2C2D2E2F38393A3B3C3D3E3F484 94A4B4C4D4E4F58595A5B5C5D5E5F68696A6B6C6D6E6F78797A7B7C7D7E7F

BMW512 0x80818283848586879091929394959697A0A1A2A3A4A5A6A7B0B1B2B3B4B5B6B7C0C1C2C3C4C5C6C7D0D1D2D3

D4D5D6D7E0E1E2E3E4E5E6E7F0F1F2F3F4F5F6F788898A8B8C8D8E8F98999A9B9C9D9E9FA8A9AAABACADAEAFB8B9BABBBCBD BEBFC8C8C8D8E8F98999A9B9C9D9E9FA8A9AAABACADAEAFB8B9BABBBCBD BEBFC8CDFDCDFEDFED98CDFEDFED98CDFEDFED9

Pasul de calcul hash

În procesul de calcul sunt utilizate trei funcții

  • Prima funcție F 0  : {0,1} 2m →{0,1} m . Este nevoie de două argumente M(i) și H(i−1) și produce o mapare bijectivă M(i) XOR H(i−1). Aici M(i) este al i-lea bloc de mesaje, H(i−1) este valoarea curentă a conductei binare. Rezultatul este scris în prima parte a conductei cvadruple: Q(i, a)=F 0 (M(i), H(i−1))= A2 ( A1 (M(i) XOR H(i−1) ))).
  • A doua funcție F 1  : {0,1} 2m →{0,1} m . Ia ca argumente un bloc de mesaje M(i) (de lungime m biți) și prima parte a unei conducte cvadruple Q(i, a). Rezultatul este scris în a doua parte a conductei cvadruple Q(i, b)=F 1 (M(i),Q(i, a)).
  • A treia funcție F 3  : {0,1} 3m →{0,1} m . Termenul de pliere este folosit pentru el (în engleză  {{{1}}}  - pliere ) pentru a sublinia proprietățile convoluției sale a unui spațiu de 3m dimensiuni într-unul de m-dimensional. Ia ca argumente două valori: blocul de mesaje M(i) și valoarea curentă a conductei cvadruple Q(i)=Q(i, a)||Q(i, b). Rezultatul este scris ca o nouă valoare a lui H(i): H(i) = F 2 (M(i),Q(i))
Funcția Hash Pseudocod pentru (i=1;i<N;i++) { Q(i,a)=F0 ( M(i),H(i-1)); Q(i,b)=F1 ( M (i),Q(i,a)); Q(i)=Q(i,a)||Q(i,b); H(i)=F2 ( M(i),Q(i)); } Hash=N_LeastSignificantBits(H(i)); Descrierea funcțiilor f 0 , f 1 și f 2

Calcule auxiliare:

Pentru a determina funcțiile f 0 , f 1 și f 2 , sunt introduse mai întâi funcții suplimentare

BMW224/BMW256 BMW384/BMW512


Aici constanta K j =j × (0x05555555) (pentru versiunile pe 32 de biți) și K j =j × (0x0555555555555555) (pentru versiunile pe 64 de biți). j=16,17,…,31

Funcțiile expand 1 și expand 2 sunt utilizate în etapa de calcul a funcției F1 , adică în etapa de expansiune a conductei cvadruple . Prima funcție, expand 1 , este mult mai complexă din punct de vedere computațional decât a doua, dar dă rezultate semnificativ mai bune.

Funcția f 0 :

Funcția f 1 :

Parametrii ExpandRound1 și ExpandRound2 determină câte iterații vor fi efectuate de fiecare dintre algoritmii expand 1 și expand 2 descriși mai sus.

Pentru (j=0;j<ExpandRound1;j++) Q(i,j)=expand 1 (j+16); Pentru (j=ExpandRound1;j<ExpandRound2+ExpandRound1;j++) Q(i,j)=expand 2 (j+16);

Funcția f 2 :

1. Calculul variabilelor suplimentare XL și XH


2. Calculul unei noi valori a lui H(i)

Valoarea hash finală

După ce valoarea finală H(N) a fost calculată, este necesar să se selecteze n biți corespunzători valorii funcției hash Hash=Hash(H(N))

  • Hash=H(N,8)||H(N,9)||…||H(n,15) — pentru versiunile BMW256 și BMW512
  • Hash=H(N,10)||H(N,11)||…||H(n,15) — pentru versiunea BMW384
  • Hash=H(N,9)||H(N,10)||…||H(n,15) — pentru versiunea BMW224


Criptanaliză a dorinței de la miezul nopții albastre

Conform cercetării efectuate de BMW Algorithm Development Group , este posibil să se formuleze principalele prevederi despre puterea criptografică, rezistența la coliziune, găsirea preimagine, re-preimagini, rezistența la extinderea lungimii și atacurile multi-coliziune:

  1. Rezistență la coliziune aproximativ n/2 biți
  2. Rezistența preimagine n biți
  3. Re-imaging nk biți pentru toate mesajele mai scurte de 2 nk biți
  4. Rezistenta la alungire
  5. Rezistent la atacuri multi-coliziune

Decizia comisiei de concurs NIST

„BMW are performanțe foarte bune și pare a fi potrivit pentru majoritatea platformelor. Are cerințe moderne de memorie. Cele mai grave rezultate criptoanalitice împotriva BMW sunt, în practică, atacuri de pseudo-coliziune neimportante. Aceste atacuri pun sub semnul întrebării securitatea funcției.”

„BMW se dovedește a fi instabil la pseudo-atacuri - coliziuni și a doua preimagini. Nivelul de securitate este mai scăzut decât se aștepta: BMW-256 este retrogradat la 65 de biți, BMW-512 la 128 de biți. Amprenta de memorie necesară pentru a efectua aceste atacuri este neglijabilă.”

Literatură