Давайте разбивку слово по частям:
PBKDF2--WithHmac--SHA512
Давайте пройдемся по нему по частям
PBKDF2
Подставки для пароля на основе-Key-Производная -функция, преемник PBKDF1 и используется для реализации псевдослучайной функции, такой как криптографический хэш, шифр или HMAC для пароль ввода или кодовую фразу вместе с значением соли и многократно повторяет процесс для получения производного ключа, который затем может использоваться в качестве криптографического ключа в последующих операциях.
HMAC
Стенды для Keyed-Hash Message Authentication кодекса (HMAC) является конкретная конструкция для вычисления кода аутентификации сообщения (МАС), связанную с криптографической хэш-функции в сочетании с секретным криптографическим ключом. Любая криптографическая хеш-функция может использоваться при вычислении HMAC; результирующий алгоритм MAC называется HMAC-MD5 или HMAC-SHA1 соответственно.
SHA512
Ну, вы знаете об этом ..: P
Теперь, возвращаясь к вашему вопросу, строка кода:
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
указывает keyFactory использовать алгоритм PDBKDF2WithHmacSHA1
. Когда вы могли бы сделать что-то вроде:
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
вы говорите завод использовать алгоритм PBDKF2WithHmacSHA512
.
Essentialy основное различие между PBKDF2WithHmacSHA1
и PBKDF2WithHmacSHA512
является то, что:
PBKDF2WithHmacSHA1
будет производить длину хэш-160 битов.
PBKDF2WithHmacSHA512
будет произвести длину хэша 512 бит.
Следовательно, последний более безопасен. Но есть аргументы с обеих сторон, которых достаточно для шифрования. Нет дебатов. Просто говорю.
некоторая дополнительная информация о двух алгоритмов:
HMACSHA1
HMACSHA1 представляет собой тип шпоночным хэш-алгоритма, который строится из функции SHA1 хэш и использовать в качестве HMAC, или хэш-сообщение код аутентификации. Процесс HMAC смешивает секретный ключ с данными сообщения , хеширует результат с помощью хэш-функции, снова смешивает значение хеша с секретным ключом, а затем снова выполняет функцию хеша . Выходной хэш составляет 160 бит.
HMACSHA512
HMACSHA512 представляет собой тип шпоночного хэша-алгоритм, который строится из хэш-функция SHA-512 и используется в качестве хэша на основе Message кода аутентификации (HMAC). Процесс HMAC смешивает секретный ключ с данными сообщений и хеширует результат. Хэш-значение снова смешивается с секретным ключом, а затем снова хэшируется. Выходной хэш имеет длину 512 бит.
Основное преимущество заключается в том, что HmacWith512
является более безопасным, чем HmacWith256
. Напр.
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
Разница довольно большая (как видно). Надеюсь, поможет. :)
EDIT: Как OP упоминает
PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
Параметр keyLength
используется для указания предпочтения по длине ключа для шифров с переменным ключом размера. Фактический размер ключа зависит от реализации каждого провайдера. Поэтому скажите, что-то вроде
PBEKeySpec(password, salt, int 100, 512)
не означает, что вы будете использовать SHA1 для генерации keyLength 512. Это просто означает, что. SHA1 поддерживает до 160 бит. Вы не можете этого превышать.
Что касается вашего второго вопроса, посмотрите на HMAC-SHA1. Есть много утверждений, которые говорят, что алгоритмы, такие как SHA256
, довольно хороши, если у вас длинный хэш.
Кроме того, в соответствии с АНБ:
АНБ указывает, что «эллиптической кривой криптографии открытого ключа с помощью 256-битный по простому модулю эллиптическую кривую, как указано в FIPS-186-2 и SHA-256 являются подходящими для защиты секретной информации до к секретному уровню. Использование из 384-битного простого модуля эллиптических кривой и SHA-384 необходимы для защиты TOP SECRET информации.
Я думаю, что использование функции HMAC совместно SHA512 вполне безопасно.
Право, скорость (или отсутствие) имеет решающее значение. Но PBKDF2 включает настраиваемый коэффициент работы. Следовательно, относительная скорость SHA512 против SHA1 не имеет значения. –