Удаление файла (включая очистку содержимого) - PullRequest
2 голосов
/ 06 декабря 2010

В моем приложении мне нужно удалить файл с конфиденциальной информацией.Для этого я пишу в файл какой-то мусор, сгенерированный случайными байтами, а затем удаляю с помощью метода File.delete (), например, здесь:

long size=file.length();
Random r=new SecureRandom();
OutputStream os=new BufferedOutputStream(new FileOutputStream(file));
while(size > 0)
{
    os.write(r.nextInt());
    size--;
}
os.close();
file.delete();

Итак, вопрос: гарантирует ли этот метод, что еслиВосстановить файл один найдет только мусор вместо реального контента?Я не совсем уверен, что запись в файл будет гарантировать, что те же самые сектора в подчеркнутой файловой системе Linux будут перезаписаны ... Пожалуйста, дайте подсказку - что делать - чтобы быть уверенным, что содержимое файла уничтожено.

Ответы [ 2 ]

4 голосов
/ 06 декабря 2010

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

Многие реализации функциональности файловой системы, такие какмоментальные снимки или репликация основаны на этом механизме (копирование при записи).Linux Btrfs или Solaris ZFS широко его используют.Я думаю, что Android YAFFS тоже.Как упоминал Крис, выравнивание износа FTL в любой флэш-памяти будет вести себя так же.

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

4 голосов
/ 06 декабря 2010

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

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

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

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

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