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