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

Внимание! Этот вопрос был сильно отредактирован. Я изо всех сил старался угадать первоначальные авторские намерения. Пожалуйста, просмотрите оригинальную версию .


Я не уверен, как использовать инструмент командной строки GPG, который мы используем для шифрования файлов.

File.txt - это простой текстовый файл:

Testing
hello world  
My security things.

Вот как я шифрую файл:

gpg --symmetric File.txt 

Это дает мне новый зашифрованный файл: File.txt.gpg

Если кто-то сейчас модифицирует зашифрованный файл, я больше не смогу его расшифровать.

$ gpg --decrypt File.txt.gpg 
gpg: no valid OpenPGP data found.
gpg: decrypt_message failed: eof

Как я могу получить содержимое моего файла, даже если кто-то изменил его?

Ответы [ 4 ]

4 голосов
/ 15 апреля 2010

Типичный способ симметричного шифрования работает с блоками данных, а результаты каждого блока используются для шифрования следующего блока.

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

Другая важная особенность механизма шифрования состоит в том, что идентичные блоки в открытом тексте не шифруются в идентичные блоки в шифрованном тексте. Если бы они были, то можно было бы получить информацию о содержимом открытого текста. Например, файл растрового изображения может быть разборчивым при шифровании, если каждый блок был зашифрован одинаково из-за возникающих шаблонов. По этой причине результаты шифрования одного блока иногда используются для шифрования следующего блока. Существуют также общие методы, при которых только ключ влияет на шифрование последующих блоков, а не на открытый текст.

Если результаты шифрования одного блока влияют на то, как зашифрованы следующие блоки, то повреждение одного бита в одном блоке приведет к тому, что остальная часть зашифрованного текста, следующего за этим блоком, будет невосстановимой.

1 голос
/ 15 апреля 2010

Отвечая на оригинальный вопрос в терминах непрофессионала;

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

Вот почему зашифрованные файлы используются для защиты ваших данных; они действительно, очень трудно работать задом наперед.

0 голосов
/ 15 апреля 2010

Невозможно сделать это, используя только зашифрованный файл.

Я считаю, что вы ищете избыточность данных . Например, компакт-диски есть. Вы можете сделать царапину на одном, и все данные по-прежнему будут читаемыми, несмотря на то, что большая часть данных была потеряна с нуля.

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

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

0 голосов
/ 15 апреля 2010

Вы должны подготовить и распространить дайджест зашифрованного файла вместе с самим зашифрованным файлом.

Перед расшифровкой файла вычислите дайджест и проверьте, равен ли он указанному. Если дайджесты не совпадают, зашифрованный файл поврежден и является недействительным.

Вы не можете зашифровать файл, а затем изменить его и сделать вид, что он все еще действителен.

...