Зачем перезаписывать файл более одного раза, чтобы надежно удалить все следы файла? - PullRequest
14 голосов
/ 12 сентября 2008

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

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

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

Ответы [ 13 ]

27 голосов
/ 12 сентября 2008

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

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

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

4 голосов
/ 16 сентября 2008

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

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

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

3 голосов
/ 12 сентября 2008

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

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

2 голосов
/ 11 марта 2009

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

2 голосов
/ 13 сентября 2008

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

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

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

1 голос
/ 13 сентября 2008

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

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 голос
/ 13 сентября 2008

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

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

1 голос
/ 12 сентября 2008

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

1 голос
/ 12 сентября 2008

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

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

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

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

0 голосов
/ 04 октября 2014

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

...