wtorek, 9 października 2012

Jest już SHA-3

źródło
Przez prawie tydzień miałem ograniczony dostęp do internetu i wczoraj zacząłem nadrabiać straty w kanale RSS/Atom. Jedną z ciekawszych informacji jest zakończenie konkursu na SHA-3 prowadzonego przez NIST. Zwycięzcąm został algorytm Keccak, który dzięki architekturze gąbki", oraz innym innowacjom ma być niepodatny na ewentualne skuteczne wektory ataków na SHA-2. Przy tym jest wydajniejszy o 25 do nawet 80% co w testach wykazał Thomas Pornin.

Kiedy się o tym dowiedziałem postanowiłem poszukać implementacji.

Dla PHP znalazłem rozszerzenie ze stosowną instrukcją zainstalowania przez phpize. Samą funkcje używa się typowo
sha3( 'test', 512 );
Według specyfikacji pierwszy parametr powinien być typu string, ale podejrzewam że jak to zwykle jest w PHP może to być dowolny skalar. Drugim może być tylko: 224, 256, 384, 512. Jest ponad to trzeci - logiczny, domyślnie fałsz - czy ma być zwrócony zwykły łańczuch, czy w formie binarnej.
sponge function

Także na GitHub`ie znajdują się implementacje 14 algorytmów-kandydatów na SHA3-256 (niestety innych długości nie ma) w JavaScript, a wśród nich zwycięzca. Wywołuje się go w ten sposób:
keccak( 'test' );
W przestrzeni globalnej jest włączony strict mode, więc kto go regularnie jeszcze nie używa może się zaskoczyć.

Jeśli jednak wydajność nie jest tak istotna polecam Blowfish - równie bezpieczny, ale dzięki temu że jest wolniejszy trudniej go złamać metodą bruteforce.

Wracając do zestawu funkcji SHA-2, NIST zaznacza, że nadal jest bezpieczny.