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). Не рекомендуется.