PBEKeySpec, на что влияют параметры iterationCount и keyLength?

Углубившись в мир шифрования и хеширования Java, я вижу примеры конструктора для PBEKeySpec класс с различными значениями для iterationCount и keyLength параметры. Ничто не может объяснить, что эти параметры влияют или значат.

Я предполагаю что keyLength Сколько времени занимает ключ, так что 32-битное шифрование будет принимать значение 32 для длины ключа, но это предположение кажется неверным. Мое предположение для iterationCount это число раз, когда каждый символ шифруется, опять же не чувствуя любви в этом предположении.

Ссылки на информацию или объяснения приветствуются.

1 ответ

Решение

Количество итераций - это количество раз, которое пароль хэшируется во время получения симметричного ключа. Чем выше число, тем сложнее получить грубую силу ключа. Он используется вместе с солью, которая используется для предотвращения атак с использованием радужных столов. Количество итераций должно быть как можно выше, не слишком сильно замедляя работу вашей системы.

Длина ключа - это длина в битах производного симметричного ключа. Ключ DESede может иметь длину 128 или 192 бита, включая биты четности. Ключ AES может иметь длину 128, 192 или 256 бит. Проблема заключается в том, что API не указывает, какая длина ключа (биты / байты, с четностью или без нее) имеется в виду; за PBEKeySpec размер ключа - биты, включая биты четности, как показано в этом разделе.

Функция вывода ключа обычно просто выводит "достаточно" случайных битов, поэтому вы все равно можете указать необходимый размер ключа.


Заметки:

  • Для получения дополнительной информации, пожалуйста, посмотрите на стандарт, стандарты PKCS, как правило, относительно легко читаются.
  • Указание любого значения, превышающего размер вывода хэша (по умолчанию это SHA-1, размер вывода 160 бит) для размера ключа, может дать сбой (для PBKDF1) или привести к дополнительному замедлению (для PBKDF2). Не рекомендуется.
Другие вопросы по тегам