Могу ли я расшифровать зашифрованный файл, даже если кто-то изменил его?
-
27-09-2019 - |
Вопрос
Предупреждение: этот вопрос был сильно отредактирован. Я старался изо всех сил, чтобы угадать оригинальные намерения автора. Пожалуйста, просмотрите оригинальная версия.
Я не уверен, как использовать инструмент командной строки GPG, который мы используем для шифрования файлов.
File.txt - это простой текстовый файл:
Тестирование привет мира моих безопасности.
Вот как я шифрую файл:
gpg --symmetric File.txt
Это дает мне новый зашифрованный файл: file.txt.gpg
Если кто-то теперь модифицирует зашифрованный файл, я больше не смогу расшифровать его.
$ gpg --decrypt File.txt.gpg
gpg: no valid OpenPGP data found.
gpg: decrypt_message failed: eof
Как я могу получить содержание моего файла, хотя кто-то его изменил?
Решение
Типичная симметричная модальность шифрования работает на блоках данных, и результаты каждого блока используются для шифрования следующего блока.
Блок обычно составляет от 128 до 256 битов. Если какой-либо бит в блоке поврежден, то весь блок не может быть расшифрован. Если это не так, то можно было бы получить некоторую информацию о содержимом блока даже без ключа. Важной частью любого хорошего алгоритма шифрования является то, что изменение одного бита в открытом тексте, либо CypherText может привести к изменению любого количества битов в соответствующем цифертексте или открытом тексте.
Еще одной важной особенностью механизма шифрования является то, что одинаковые блоки в открытом тексте не зашифрованы для одинаковых блоков в CypherText. Если бы они были, то можно было бы получить информацию о содержании открытого текста. Например, файл растрового изображения может быть разборчивым при зашифрованном виде, если каждый блок был зашифрован точно так же, из-за появления шаблонов. По этой причине результаты шифрования одного блока иногда используются для шифрования следующего блока. Существуют также общие условия, в которых только ключ влияет на шифрование последующих блоков, а не открытым текстом.
Если результаты зашифрования одного блока влияют на то, как следующие блоки зашифрованы, то повреждение к одному биту в одном блоке приведет к тому, что остальная часть CypherText следует за этим блоком для неисправности.
Другие советы
Отвечая на оригинальный вопрос в Условиях Лэймана;
Если вы точно не знаете, какие изменения кого-то внесены в ваш зашифрованный файл, ваш контент ушел, и вы, вероятно, не можете вернуть его.
Вот почему зашифрованные файлы используются для защиты ваших данных; Они действительно, очень трудно работать назад.
Вы должны производить и распространять дайджест зашифрованного файла вместе с самим зашифрованным файлом.
Перед расшифровкой файла вычислите дайджест и проверьте, равен ли предоставленному. Если дайджесты не совпадают, то зашифрованный файл был поврежден и недействителен.
Вы не можете зашифровать файл, затем изменить его и притворяться, что все еще действителен зашифрован.
Вы не сможете сделать это только с зашифрованным файлом.
Я верю, что вы ищете, это избыточность данных. Отказ CDS, например, у него есть. Вы можете сделать царапину на одну, и все данные все еще будут читабельными, несмотря на то, что большие данные терялись с нуля.
Самый простой способ сделать это - просто хранить файл дважды, используя контрольную сумму, которую вы можете определить, был ли один из них изменен. Более современные методы используют чередующиеся контрольные суммы и биты четности / байты. Обзор окончен Обнаружение ошибок и методики коррекции можно найти на Википедии.
Я не рекомендую вам реализовать это самостоятельно. Это намного проще и безопасно, чтобы просто использовать уже существующую реализацию. (Я уверен, что там есть некоторые, но я их не знаю.)