Как видно из других ответов, наличие уникального IV для каждого зашифрованного файла имеет решающее значение, но почему это так?
Сначала - давайте рассмотрим, почему важен уникальный IV для каждого зашифрованного файла.( Википедия по IV ).IV добавляет случайность вашему началу процесса шифрования.При использовании режима шифрования в виде цепочки блоков (где один блок зашифрованных данных включает в себя предыдущий блок зашифрованных данных) у нас остается проблема, связанная с первым блоком, в который входит IV.
Если выЕсли у вас не было IV, и использовалось цепное шифрование только вашим ключом, два файла, начинающиеся с идентичного текста, будут производить идентичные первые блоки.Если входные файлы изменились на полпути, то два зашифрованных файла начнут выглядеть по-разному, начиная с этой точки и до конца зашифрованного файла.Если кто-то заметил сходство в начале и знал, с чего начинался один из файлов, он мог бы определить, с чего начинался другой файл.Знание того, с чего начался открытый текстовый файл и каков его соответствующий зашифрованный текст, может позволить этому человеку определить ключ и затем расшифровать весь файл.
Теперь добавьте IV - если каждый файл использовал случайный IV, их первый блокбыло бы по-другому.Вышеописанный сценарий был сорван.
А что, если IV были одинаковыми для каждого файла?Что ж, у нас снова есть проблемный сценарий.Первый блок каждого файла будет зашифрован с тем же результатом.Практически это ничем не отличается от того, чтобы вообще не использовать IV.
Итак, теперь давайте вернемся к предложенным вами вариантам:
Вариант 1. Вставьте жестко закодированный IV в приложение исохранить ключ в файле ключа.
Вариант 2. Вставить жестко закодированный ключ в приложение и сохранить IV в файле ключа.
Эти параметры практически идентичны.Если два файла, которые начинаются с одного и того же текста, создают зашифрованные файлы, которые начинаются с идентичного зашифрованного текста, вы попали в ловушку.Это произошло бы в обоих из этих вариантов.(Предполагается, что для шифрования всех файлов используется один главный ключ).
Вариант 3. Сохраните ключ и IV в файле ключа.
Если вы используете random IV для каждого ключевого файла, все хорошо.Два файла ключей не будут идентичны, и каждый зашифрованный файл должен иметь свой файл ключей.Другой ключевой файл не будет работать.
PS: Как только вы выберете вариант 3 и случайные IV - начните изучать, как вы определите, была ли расшифровка успешной.Возьмите файл ключа из одного файла и попробуйте использовать его для расшифровки другого файла шифрования.Вы можете обнаружить, что расшифровка продолжается и приводит к мусору.Если это произойдет, начните исследование аутентифицированного шифрования .