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

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Программы стирания, такие как Eraser, рекомендуют перезаписывать данные примерно 36 раз.

Насколько я понимаю, все данные хранятся на жестком диске в виде 1 или 0 секунд.

Если перезапись случайных чисел 1 и 0 выполняется один раз по всему файлу, то почему этого недостаточно для удаления всех следов исходного файла?

Это было полезно?

Решение

Бит жесткого диска, который раньше был равен 0, а затем изменен на "1", имеет немного более слабое магнитное поле, чем тот, который раньше был равен 1, а затем снова был записан в 1.С помощью чувствительного оборудования предыдущее содержимое каждого бита может быть определено с разумной степенью точности путем измерения незначительных отклонений в силе.Результат будет не совсем корректным, и в нем будут ошибки, но значительную часть предыдущего содержимого можно восстановить.

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

Редактировать: Современный анализ показывает, что один перезаписанный бит может быть восстановлен только с точностью 56%.Попытка восстановить целый байт выполняется с точностью всего в 0,97% случаев.Так что я просто повторил городскую легенду.При работе с гибкими дисками или каким-либо другим носителем информации могла потребоваться многократная перезапись, но жесткие диски в этом не нуждаются.

Другие советы

Дэниел Финберг (экономист частного Национального бюро экономических исследований) утверждает, что вероятность восстановления перезаписанных данных с современного жесткого диска равна "городской легенде".:

Могут ли спецслужбы Считывать Перезаписанные данные?

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

В обычных терминах, когда единица записывается на диск, носитель записывает единицу, а когда записывается ноль, носитель записывает ноль.Однако фактический эффект ближе к получению 0,95, когда ноль заменяется единицей, и 1,05, когда единица заменяется единицей.Обычная схема диска настроена так, что оба эти значения считываются как единицы, но с помощью специализированной схемы можно определить, что содержали предыдущие "слои".Восстановление по меньшей мере одного или двух слоев перезаписанных данных не так уж сложно выполнить, если считывать сигнал с электроники аналоговой головки с помощью высококачественного цифрового дискретизирующего осциллографа, загружать дискретизированный сигнал на ПК и анализировать его с помощью программного обеспечения для восстановления ранее записанного сигнала.Что делает программное обеспечение, так это генерирует "идеальный" сигнал считывания и вычитает его из того, что было фактически прочитано, оставляя в качестве разницы остаток предыдущего сигнала.Поскольку аналоговая схема в коммерческом жестком диске и близко не соответствует качеству схемы в осциллографе, используемом для выборки сигнала, существует возможность восстановления большого количества дополнительной информации, которая не используется электроникой жесткого диска (хотя с более новыми методами канального кодирования, такими как PRML (объясняется далее), которые требуют значительных объемов обработки сигнала, использование простых инструментов, таких как осциллограф, для непосредственного восстановления данных больше невозможно)

http://www.cs.auckland.ac.nz /~pgut001/pubs/secure_del.html

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

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

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

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

"Сохранение данных" Существует довольно хороший набор ссылок относительно возможных атак и их реальной осуществимости на Википедия. Там также приведены стандарты и рекомендации Министерства обороны и NIST.Суть в том, что восстановить перезаписанные данные с магнитных носителей возможно, но становится все труднее.Тем не менее, некоторые стандарты (правительства США) по-прежнему требуют, по крайней мере, многократной перезаписи.Между тем внутренние компоненты устройства продолжают усложняться, и даже после перезаписи на диске или твердотельном устройстве могут неожиданно появиться копии (подумайте о плохой обработке блоков или выравнивании износа флэш-памяти (увидеть Питера Гутмана).Так что по-настоящему обеспокоенные все еще разрушают накопители.

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

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

Наконец, 36 (фактически 35) перезаписей, на которые вы ссылаетесь, признаны устаревшими и ненужными сегодня, поскольку метод (известный как метод Гутмана) был разработан для размещения различных - и обычно неизвестных пользователю - методов кодирования, используемых в таких технологиях, как RLL и MFM, с которыми вы вряд ли столкнетесь в любом случае.Даже в руководящих принципах правительства США указано, что для удаления данных достаточно одной перезаписи, хотя в административных целях они не считают это приемлемым для "очистки".Предполагаемая причина такого несоответствия заключается в том, что аппаратное обеспечение диска может пометить "поврежденные" сектора как неисправные и не перезаписать их должным образом, когда придет время для перезаписи, что оставляет открытой возможность того, что визуальный осмотр диска сможет восстановить эти области.

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

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

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

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

public static void DeleteGutmann(string fileName)
{
    var fi = new FileInfo(fileName);

    if (!fi.Exists)
    {
        return;
    }

    const int GutmannPasses = 35;
    var gutmanns = new byte[GutmannPasses][];

    for (var i = 0; i < gutmanns.Length; i++)
    {
        if ((i == 14) || (i == 19) || (i == 25) || (i == 26) || (i == 27))
        {
            continue;
        }

        gutmanns[i] = new byte[fi.Length];
    }

    using (var rnd = new RNGCryptoServiceProvider())
    {
        for (var i = 0L; i < 4; i++)
        {
            rnd.GetBytes(gutmanns[i]);
            rnd.GetBytes(gutmanns[31 + i]);
        }
    }

    for (var i = 0L; i < fi.Length;)
    {
        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x92;
        gutmanns[7][i] = 0x49;
        gutmanns[8][i] = 0x24;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0x6D;
        gutmanns[29][i] = 0xB6;
        gutmanns[30][i++] = 0xDB;
        if (i >= fi.Length)
        {
            continue;
        }

        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x49;
        gutmanns[7][i] = 0x24;
        gutmanns[8][i] = 0x92;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0xB6;
        gutmanns[29][i] = 0xDB;
        gutmanns[30][i++] = 0x6D;
        if (i >= fi.Length)
        {
            continue;
        }

        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x24;
        gutmanns[7][i] = 0x92;
        gutmanns[8][i] = 0x49;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0xDB;
        gutmanns[29][i] = 0x6D;
        gutmanns[30][i++] = 0xB6;
    }

    gutmanns[14] = gutmanns[4];
    gutmanns[19] = gutmanns[5];
    gutmanns[25] = gutmanns[6];
    gutmanns[26] = gutmanns[7];
    gutmanns[27] = gutmanns[8];

    Stream s;

    try
    {
        s = new FileStream(
            fi.FullName,
            FileMode.Open,
            FileAccess.Write,
            FileShare.None,
            (int)fi.Length,
            FileOptions.DeleteOnClose | FileOptions.RandomAccess | FileOptions.WriteThrough);
    }
    catch (UnauthorizedAccessException)
    {
        return;
    }
    catch (IOException)
    {
        return;
    }

    using (s)
    {
        if (!s.CanSeek || !s.CanWrite)
        {
            return;
        }

        for (var i = 0L; i < gutmanns.Length; i++)
        {
            s.Seek(0, SeekOrigin.Begin);
            s.Write(gutmanns[i], 0, gutmanns[i].Length);
            s.Flush();
        }
    }
}

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

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

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

Видишь это: Статья Гуттмана

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

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