Могу ли я расшифровать зашифрованный файл, даже если кто-то изменил его?

StackOverflow https://stackoverflow.com/questions/2643813

  •  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, например, у него есть. Вы можете сделать царапину на одну, и все данные все еще будут читабельными, несмотря на то, что большие данные терялись с нуля.

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

Я не рекомендую вам реализовать это самостоятельно. Это намного проще и безопасно, чтобы просто использовать уже существующую реализацию. (Я уверен, что там есть некоторые, но я их не знаю.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top