Aby zobaczyć siłę samych metod haszowania, proszę spojrzeć na keylength.com website. Przekonasz się, że nawet SHA-256 ma dość duży margines bezpieczeństwa.
Co więcej, algorytm HMAC jest praktycznie nieświadomy ataków na bazowy algorytm mieszający. HMAC jest odporny na problem z urodzinami, który zmniejsza o połowę siłę do połowy wartości wynikowej skrótu. Nie ma to zastosowania tylko dlatego, że przeciwnik nie posiada tajnego klucza i dlatego nie może próbować tworzyć kolizji. Dlatego nawet HMAC-SHA1 jest dość bezpieczny.
Teraz prędkość skrótu zależy od środowiska wykonawczego. Ale generalnie możesz założyć następujące założenia:
- SHA-1 jest generalnie szybszy niż jakakolwiek implementacja SHA-2 na tej samej platformie;
- SHA-512 jest szybszy niż SHA-256 na maszynach 64-bitowych (ponieważ używa wewnętrznej arytmetyki 64-bitowej);
- SHA-256 jest szybszy niż SHA-512 na maszynach 8, 16 i 32-bitowych.
Skorzystaj z SHA-1, jeśli spodziewasz się problemów ze zgodnością. W przeciwnym razie możesz wybrać SHA-512 (i zmniejszyć wynik do rozsądnej liczby bitów). Stan wewnętrzny i wyższe bezpieczeństwo SHA-512 mogą być niewielką zaletą. Wystąpiły problemy z klientami, którzy nie akceptują żadnej formy SHA-1 z powodu ogólnych problemów z algorytmem; innymi słowy, fakt, że nie jest bezpieczny ogólnie może utrudniać akceptację.
Uwaga SHA-384 i mniej znane SHA-512/256 i SHA-512/224 sposoby mieszania są specjalną formą SHA-512, cięcia 384, 256 i 224 wyjścia bitów. Szybkość tych algorytmów jest identyczna. Jedyną różnicą, poza wielkością wyjściową, jest to, że te specjalne formularze używają wewnętrznie różnych wartości początkowych. W przeciwnym razie SHA-512 przycięty do 384 bitów jest równie bezpieczny i szybki jak SHA-512/384. Powinieneś jednak używać SHA-384, aby zachować kompatybilność.
Wielkość klucza wejściowego nie zależy od podstawowej funkcji skrótu. Klucz jest najpierw maskowany przez XOR, a następnie mieszany za pomocą funkcji skrótu; algorytmy mieszania mogą pobierać praktycznie nieograniczoną ilość danych jako dane wejściowe.
Zaleca się użycie klucza o rozmiarze co najmniej wielkości użytej metody hashowania, w przeciwnym razie można obniżyć margines bezpieczeństwa zapewniany przez metodę HMAC. Może występować niewielka kara za wydajność, jeśli wielkość klucza wymusza na algorytmie skrótu mieszanie wielu bloków.
Można również użyć (zbliżającego się) standardu SHA-3 w tym sensie, że byłby bezpieczny. HMAC-SHA-3 obecnie nie ma jednak zbyt dużego sensu. HMAC jest w rzeczywistości przesadą dla SHA-3 (Keccak); SHA-3 powinien być bezpieczny nawet bez konstrukcji HMAC. [Edytuj] Do tej pory KMAC został wystandaryzowany jako konstrukt MAC dla SHA-3.
Poza tym konstrukty SHA-2 mają - nieco zaskakująco - bardzo dobrą odporność na analizę kryptową podczas zawodów SHA-3. Tak więc nie ma pilnej potrzeby aktualizacji do SHA-3.
Strona [strona wikipedia] (http://en.wikipedia.org/wiki/SHA-2#Comparison_of_SHA_functions) ma dla nich pewne testy wydajności. – jbabey