Bcrypt

bcrypt to funkcja skrótu stworzona przez Nielsa Provosa i Davida Mazièresa . Oparty jest na algorytmie szyfrowania Blowfish i został zaprezentowany na USENIX w 1999 roku . Oprócz użycia soli do ochrony przed atakami rainbow sky table ( rainbow table ), bcrypt jest funkcją adaptacyjną, to znaczy, że możemy zwiększyć liczbę iteracji, aby była wolniejsza. Dzięki temu nadal jest odporny na ataki brutalnej siły pomimo wzrostu mocy obliczeniowej.

Blowfish to algorytm szyfru blokowego wyróżniający się stosunkowo kosztowną fazą kluczowania. bcrypt wykorzystuje tę właściwość i idzie o krok dalej. Provos i Mazières zaprojektowali nowy algorytm ustanawiania kluczy o nazwie Eksblowfish (dla drogiego harmonogramu klucza Blowfish ). W tym algorytmie pierwsza faza polega na utworzeniu podkluczy za pomocą klucza i soli. Następnie wykonuje się kilka zwojów standardowego algorytmu rozdymki z naprzemiennie solą i kluczem. Każda runda zaczyna się od stanu podkluczy z poprzedniej rundy. Nie sprawia to, że algorytm jest potężniejszy niż standardowa wersja Blowfish, ale możesz wybrać liczbę iteracji, które spowalniają go i pomagają odstraszać tęczową tablicę i ataki siłowe.

Liczba iteracji musi być potęgą dwóch , jest to parametr algorytmu i ta liczba jest zakodowana w wyniku końcowym.

Po pierwszej implementacji w OpenBSD algorytm ten został uogólniony i jest teraz dostępny w wielu językach ( C , C ++ , C # , Elixir , Go , JavaScript , Java , Python , Ruby , Perl , PHP 5.3+ ,  itd. ).

Algorytm

Algorytm w dużym stopniu zależy od ustalenia kluczy metody „Eksblowfish”:

EksBlowfishSetup(cost, salt, key) state InitState() state ExpandKey(state, salt, key) repeat (2cost) state ExpandKey(state, 0, key) state ExpandKey(state, 0, salt) return state

Ta metoda przyjmuje trzy parametry:

InitStatedziała tak samo, jak w oryginalnym algorytmie Blowfish, tablica P i łuk S są inicjowane z dziesiętną częścią szesnastkową.

Funkcję ExpandKeymożna opisać w następujący sposób:

ExpandKey(state, salt, key) for(n = 1..18) Pn key[32(n-1)..32n-1] Pn //treat the key as cyclic ctext Encrypt(salt[0..63]) P1 ctext[0..31] P2 ctext[32..63] for(n = 2..9) ctext Encrypt(ctext salt[64(n-1)..64n-1]) // Encrypt utilise la clef actuelle et le sel sous forme cyclique P2n-1) ctext[0..31] P2n ctext[32..63] for(i = 1..4) for(n = 0..127) ctext Encrypt(ctext salt[64(n-1)..64n-1]) // comme au-dessus Si[2n] ctext[0..31] Si[2n+1] ctext[32..63] return state

Uwagi i odniesienia

  1. Niels Provos et Mazières, David, „  A Future-Adaptable Password Scheme  ”, Proceedings of 1999 USENIX Annual Technical Conference ,1999, s.  81–92 ( czytaj online )

Załączniki

Linki zewnętrzne

<img src="https://fr.wikipedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" title="" width="1" height="1" style="border: none; position: absolute;">