Как гарантировать, что файлы, которые расшифровываются во время выполнения, очищаются? - PullRequest
3 голосов
/ 10 ноября 2008

Используя C или C ++, после того, как я расшифровал файл на диск - как я могу гарантировать, что он будет удален в случае сбоя приложения или выключения системы и невозможности его очистки? Использование C или C ++, в Windows и Linux?

Ответы [ 13 ]

0 голосов
/ 12 ноября 2008

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

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

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

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

Мораль истории: реальная безопасность - это сложно.

0 голосов
/ 12 ноября 2008

в Linux / Unix, используйте unlink, как только вы создали файл. Файл будет удален, как только ваша программа закроет дескриптор файла или завершит работу.

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

Конечно, данные не будут физически удалены с диска, поэтому они все еще могут быть доступны для взлома.

0 голосов
/ 10 ноября 2008

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

Я читал статьи об этом давным-давно, и я помню, что между Windows и Linux есть некоторая разница в том, что можно гарантировать, что страница памяти не будет записана на диск, а кто-то не мог; но я не помню четко

Если вы хотите проявить должную осмотрительность, вы можете посмотреть эту тему и прочитать о ней. Все зависит от вашей модели угроз и от того, от чего вы готовы защищаться. В конце концов, вы можете использовать сжатый воздух для охлаждения оперативной памяти и извлечь ключ шифрования из этого (который был на самом деле на новом шпионском шоу Кристиана Слейтера, «Мой собственный худший враг»), который я считал лучшим использованием передового, точного компьютера Техники безопасности в СМИ пока нет)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...