RijndaelManaged: поколение IV?

Я хочу реализовать самую безопасную, и самую надежную форму криптографии симметричного ключа в моем приложении. Пользователь должен ввести пароль для шифрования/дешифрования, и это - все. Для RijndaelManaged нужно ввести ключ и IV. Я не уверен, как обратиться к ситуации. Прямо сейчас у меня есть введенный пароль, хешируемый SHA256 и затем используемый в качестве ключа для Rijndael. Что я использую для IV? Другой пароль?

5
задан cam 27 March 2010 в 19:26
поделиться

3 ответа

Вы можете использовать GenerateIV (переопределено в RijndaelManaged ) для генерации IV. Затем вы можете передать IV вместе с шифротекстом. Вы можете думать о IV как о чем-то вроде соли - по сути, он предотвращает каждый раз шифрование одного и того же открытого текста в один и тот же зашифрованный текст. Не используйте IV повторно - это делает его бессмысленным. Создавайте новый для каждого сообщения.

11
ответ дан 18 December 2019 в 10:43
поделиться
  1. Есть специальная функция для получения ключа из пароля, я считаю, что это безопаснее, чем хэш. Вы можете поискать класс Rfc2898DeriveBytes. Для него нужны соль и пароль.

  2. Принятой практикой является добавление IV (и соли) в незашифрованном виде в сообщение.

  3. Если вы создадите экземпляр класса Rijndaal, он автоматически сгенерирует IV, отправитель может просто использовать его.

3
ответ дан 18 December 2019 в 10:43
поделиться

Jon Skeet прав насчет IV, но у вас также есть проблема с тем, как вы выводите ключ.

Просто использование одного раунда SHA256 для пароля с открытым текстом небезопасно. Это оставляет систему открытой для простой атаки по словарю.

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

Для KDF потребуется соль, которая генерируется каждый раз случайным образом и включается вместе с текстом шифра (как и IV).

2
ответ дан 18 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: