Niech nam załamanie kawałek słowo po kawałku:
PBKDF2--WithHmac--SHA512
Chodźmy nad nim część po części
PBKDF2
podpórek Hasło oparte-Key-pochodna -Funkcja, następca PBKDF1 i służy do implementacji funkcji pseudolosowej, takiej jak kryptograficzny hasz, szyfr lub HMAC do hasło wejściowe lub hasło wraz z wartością soli i wielokrotnie powtarza proces, aby wygenerować klucz pochodny, który może następnie zostać użyty jako klucz kryptograficzny w kolejnych operacjach.
HMAC
Stojaki na Keyed-Hash Message Authentication Code (HMAC) to specyficzna konstrukcja obliczania kodu uwierzytelniania wiadomości (MAC) obejmującej kryptograficznej funkcji skrótu w połączeniu z tajnego klucza kryptograficznego. Każda funkcja kryptograficznego skrótu może być używana do obliczania HMAC; uzyskany algorytm MAC jest odpowiednio nazywany HMAC-MD5 lub HMAC-SHA1.
SHA512
Wiesz o tym ..: P
Teraz, wracając do twojego pytania, linia kodu:
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
określa keyFactory do korzystania z algorytmu PDBKDF2WithHmacSHA1
. Kiedy zrobiłbyś coś takiego:
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
mówisz fabryce, aby użyła algorytmu PBDKF2WithHmacSHA512
.
essentialy Główną różnicą pomiędzy PBKDF2WithHmacSHA1
i PBKDF2WithHmacSHA512
jest następująca:
PBKDF2WithHmacSHA1
będzie wytworzenia długości mieszania 160 bitów.
PBKDF2WithHmacSHA512
będzie wyprodukować długość mieszania 512 bitów.
Dlatego te ostatnie są bezpieczniejsze. Ale są obie strony, które są wystarczające do szyfrowania. Bez debaty. Tylko mówię.
dodatkowych informacji o dwóch algorytmów:
HMACSHA1
HMACSHA1 jest typem algorytmu mieszania wpust, który jest zbudowany z funkcji SHA1 i wykorzystywane jako HMAC, lub kod uwierzytelniający oparty na haszyszu . Proces HMAC łączy tajny klucz z danymi wiadomości , porównuje wynik z funkcją skrótu, miesza ponownie wartość klucza tajnego z kluczem tajnym, a następnie ponownie stosuje funkcję mieszania . Wyjściowa wartość mieszania ma długość 160 bitów.
HMACSHA512
HMACSHA512 jest typem algorytmu mieszania wpust, który jest zbudowany z funkcję skrótu SHA-512 i wykorzystywane jako wiadomość Hash oparte kod uwierzytelniający (HMAC). Proces HMAC łączy tajny klucz z danymi wiadomości i powoduje skasowanie wyniku. Wartość skrótu jest mieszana ponownie z kluczem tajnym , a następnie mieszana po raz drugi. Wyjście hash ma długość 512 bitów.
Główną zaletą jest to, że HmacWith512
jest bardziej bezpieczny niż HmacWith256
. Dla np.
HMAC_SHA1("key","The quick brown fox jumps over the lazy dog") = 0xde7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9
HMAC_SHA512("key","The quick brown fox jumps over the lazy dog") = 0xb42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3a
Różnica jest dość duża (jak widać). Mam nadzieję, że to pomoże. :)
EDIT: W PO wymienia
PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
Parametr keyLength
służy do wskazania preferencji na długości klucza dla szyfrów zmiennej key-size. Rzeczywisty rozmiar klucza zależy od implementacji każdego dostawcy. Dlatego należy powiedzieć, że robienie czegoś takiego, jak np. nie oznacza, że będziesz używać SHA1 do generowania klucza długości 512. To po prostu oznacza to. SHA1 obsługuje maksymalnie 160 bitów. Nie możesz tego przekroczyć.
Jeśli chodzi o drugie pytanie, spójrz na numer HMAC-SHA1. Istnieje wiele stwierdzeń, które mówią, że algorytmy takie jak SHA256
są całkiem dobre, jeśli masz długi skrót.
Ponadto, zgodnie z NSA:
NSA wskazuje, że „Krzywa eliptyczna Public Key Cryptography użyciu z 256-bitową prime modulo krzywej eliptycznej, jak określono w FIPS 186-2 i SHA-256 nadają się do ochrony informacji niejawnych do poziomu tajny. Korzystanie z 384-bitowym głównego modułu eliptyczna krzywa Sha-384 są konieczne dla ochrony ściśle tajne informacji.
Myślę, że używanie funkcji HMAC w połączeniu z SHA512 jest dość bezpieczne.
Prawo, szybkość (lub brak) jest krytyczna. Ale PBKDF2 zawiera przestrajalny czynnik pracy. W związku z tym względna prędkość SHA512 względem SHA1 jest nieistotna. –