Количество итераций - это количество раз, которое пароль хэшируется во время получения симметричного ключа. Чем больше число, тем сложнее проверить правильность пароля и затем получить правильный ключ. Он используется вместе с солью, которая используется для предотвращения атак с использованием радужных столов. Количество итераций должно быть как можно выше, не слишком сильно замедляя работу вашей системы. Более общий термин для подсчета итераций: коэффициент работы .
Длина ключа - это длина в битах производного симметричного ключа. Ключ DESede может иметь длину 128 или 192 бита, включая биты четности. Ключ AES может иметь длину 128, 192 или 256 бит. Проблема заключается в том, что API не указывает, какая длина ключа (биты / байты, с четностью или без нее) имеется в виду; для PBEKeySpec
размер ключа - биты, включая биты четности, как показано в этом разделе.
Функция вывода ключа обычно просто выводит «достаточно» случайных битов, поэтому вы все равно можете указать требуемый размер ключа.
Примечания:
- Для получения дополнительной информации, пожалуйста, посмотрите стандарт , стандарты PKCS, как правило, относительно легко читаются.
- Соль просто должна быть уникальной; обычно это достигается путем создания 64–255-битной полностью случайной соли с использованием безопасного генератора случайных чисел (что для Java означает использование
new SecureRandom()
, а затем nextBytes(int amount)
). Соль может быть общедоступной и храниться с зашифрованным текстом или паролем.
- Указание любого значения, превышающего размер вывода хэша (по умолчанию это SHA-1, размер вывода 160 бит) для размера ключа, может дать сбой (для PBKDF1) или привести к дополнительному замедлению (для PBKDF2). Не рекомендуется; просто используйте хеш-функцию, такую как SHA-256, SHA-512 в спецификации алгоритма.
- SHA-1 (иногда просто называемый SHA, поскольку SHA-0 никогда не использовался) и даже MD5 по-прежнему полностью безопасны для такого рода функций (поскольку они не зависят от сопротивления столкновению), но вы следует по-прежнему выбирать более безопасный вариант, например SHA-256 или SHA-512 для новых протоколов.