Как удалить файл, чтобы удаление необратимо? - PullRequest
9 голосов
/ 08 сентября 2011

Я хочу удалить конфиденциальный файл (используя C ++) таким образом, что файл не будет восстановлен.

Я думал просто переписать файл и затем удалить его, достаточно ли этого илия должен выполнить больше действий?

Ответы [ 6 ]

4 голосов
/ 08 сентября 2011

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

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

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

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

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

shred и подобные инструменты просто не работают в этих довольно распространенных условиях.

Растягивая точку, вы можете представить себе пользовательскую файловую систему, в которой все изменения регистрируются в журнале, создаются резервные копии для последующего восстановления с откатом, и копируются в резервное копирование вне сайта как можно скорее. Я не знаю ни о какой такой системе (хотя, конечно, есть программы автоматического резервного копирования, которые запускаются выше уровня файловой системы с тем же базовым эффектом), но Windows, безусловно, не имеет API, чтобы сказать: «Хорошо, вы можете удалить резервное копирование вне сайта », потому что Windows не подозревает, что это происходит.

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

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

4 голосов
/ 08 сентября 2011

Вот интересная статья:

http://www.filesystems.org/docs/secdel/secdel.html

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

1 голос
/ 08 сентября 2011

0 и 1 на самом деле не 0 и 1.Остаточный магнетизм и другие методы (которые, я сомневаюсь, используются пользователями, от которых вы пытаетесь скрыть содержимое), могут использоваться для восстановления данных после их перезаписи.

Взгляните на это запись , может быть то, что вы ищете.

РЕДАКТИРОВАТЬ:

Для поддержки моего заявления:

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

0 голосов
/ 23 марта 2019

Я думаю, это наверняка сработает.

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

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

0 голосов
/ 08 сентября 2011

Лучше сначала уничтожить данные перед перезаписью.Так что получите адрес памяти и поменяйте местами.После этого закончите записывать данные.

0 голосов
/ 08 сентября 2011

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

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

...