消しゴムなどの消しゴムプログラムでは、データを36回上書きすることをお勧めします。
私が理解しているように、すべてのデータは1または0としてハードドライブに保存されます。
ランダムな1と0の上書きがファイル全体で一度実行された場合、元のファイルのすべてのトレースを削除するのに十分ではないのはなぜですか?
以前は 0 であったハード ドライブ ビットは、その後「1」に変更され、以前は 1 であり、その後再び 1 に書き込まれたものよりもわずかに弱い磁場を持っています。高感度の機器を使用すると、強度のわずかな変化を測定することで、各ビットの以前の内容を妥当な精度で識別することができます。結果は正確ではなく、エラーが発生しますが、以前のコンテンツのかなりの部分を取得できます。
ビットを 35 回走り書きすると、そこにあったものを識別することは事実上不可能になります。
編集: 最新の分析によると、上書きされた単一のビットはわずか 56% の精度で復元できることが示されています。バイト全体を復元しようとしても、0.97% の確率でしか正確ではありません。というわけで、都市伝説を繰り返していました。フロッピーディスクなどのメディアでは何度も上書きする必要がありましたが、ハードディスクでは必要ありません。
Daniel Feenberg (私立国立経済研究局のエコノミスト) は、上書きされたデータが最新のハード ドライブから復元される可能性は「都市伝説」に等しいと主張しています。
したがって、理論的には、ファイルを一度ゼロで上書きするだけで十分です。
従来の用語では、ディスクに 1 が書き込まれるとメディアは 1 を記録し、0 が書き込まれるとメディアは 0 を記録します。ただし、実際の効果は、0 を 1 で上書きすると 0.95 に近くなり、1 を 1 で上書きすると 1.05 に近くなります。通常のディスク回路は、これらの値が両方とも 1 として読み取られるように設定されていますが、特殊な回路を使用すると、以前の「層」に含まれていたものを調べることができます。上書きされたデータの少なくとも 1 つまたは 2 つの層の回復は、高品質のデジタル サンプリング オシロスコープを使用してアナログ ヘッドの電子回路から信号を読み取り、サンプリングされた波形を PC にダウンロードし、ソフトウェアで解析することによって実行するのはそれほど難しくありません。以前に記録された信号を回復します。ソフトウェアが行うことは「理想」を生成することです 信号を読み取り、実際に読み取られたものからそれを差し引き、差として前の信号の残りを残します。市販のハードドライブのアナログ回路は、信号をサンプリングするために使用されるオシロスコープの回路の品質にはほど遠いため、ハードドライブの電子機器によって利用されない多くの余分な情報を回復する機能が存在します (ただし、より新しい大量の信号処理を必要とする PRML (後述) などのチャネル符号化技術では、オシロスコープなどの単純なツールを使用してデータを直接復元することはもはや不可能です)。
これが必要な理由は、ハードディスクではなくSSDです。OS やファイルシステムのドライバーに通知せずにクラスターを再マップします。これは、ウェアレベリングの目的で行われます。そのため、書き込まれた 0 ビットが以前の 1 とは異なる場所に移動する可能性が非常に高くなります。SSD コントローラーを取り外して生のフラッシュ チップを読み取ることは、企業のスパイ活動の範囲内です。しかし、36 回のフル ディスク上書きでは、ウェア レベリングがすべてのスペア ブロックを数回繰り返した可能性があります。
物理ディスク上のデータのセクターを想像してください。このセクタ内には、セクタに格納されたデータのビットをエンコードする磁気パターン (ストリップ) があります。このパターンは、ディスクがその下で回転している間、多かれ少なかれ静止している書き込みヘッドによって書き込まれます。ここで、新しい磁気パターン ストリップがセクタに書き込まれるたびに、ハード ドライブがデータ ストレージ デバイスとして適切に機能するためには、後で読み取れるように、そのセクタの磁気パターンを十分にリセットする必要があります。ただし、以前の磁気パターンのすべての証拠を完全に消去する必要はありません。十分に優れている必要があります (そして、現在使用されているエラー訂正の量では、十分に優れている必要はありません)。
得られるのは、最後のデータ書き込みに対応する最強のパターンを持つ一連の磁気パターン層です。適切な計測器を使用すると、このパターンのレイヤーを十分に詳細に読み取って、古いレイヤーのデータの一部を特定できる場合があります。
データがデジタルであると役立ちます。特定のレイヤーのデータを抽出すると、ディスクに書き込むために使用されたであろう磁気パターンを正確に特定し、それを読み取り値から差し引くことができるからです (そして、次のレイヤーでそれを行います)。層、および次)。
これが私がまとめた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();
}
}
}
ここで注目しているのは、「データの残存」と呼ばれるものです。実際、繰り返し上書きするテクノロジのほとんどは、(無害に) 実際に必要な以上のことを行っています。データが上書きされたディスクからデータを回復しようとする試みがありましたが、いくつかのラボ ケースを除いて、そのような手法が成功した例は実際にはありません。
回復方法について話すとき、主に磁気力顕微鏡が偶発的な上書きを回避するための特効薬として表示されますが、これでさえ記録された成功はなく、いずれにせよリージョン全体にバイナリ データの適切なパターンを書き込むことによって無効にすることができます。磁気メディア (単純な 0000000000 ではなく)。
最後に、あなたが参照している 36 (実際には 35) の上書きは、技術で使用されるさまざまな (通常はユーザーには知られていない) エンコード方法に対応するように設計された技術 (Gutmann 方式として知られている) として、時代遅れで不要であると認識されています。とにかく遭遇する可能性が低いRLLやMFMのように。米国政府のガイドラインでさえ、1回の上書きでデータを削除するのに十分であると述べていますが、管理上の目的では、これを「サニタイズ」として許容できるとは考えていません. この不一致の推奨される理由は、「不良」セクターがディスク ハードウェアによって不良としてマークされ、上書きを行うときに適切に上書きされない可能性があるためです。したがって、ディスクの目視検査でこれらを回復できる可能性が残されています。地域。
最終的には、1010101010101010 またはかなりランダムなパターンで書き込むだけで、既知の手法では復元できないほどデータを消去できます。
"Data Remanence"ウィキペディアには、攻撃の可能性とその実際の実現可能性に関する参考文献が多数あります。 そこには、DoD および NIST の標準と推奨事項も引用されています。要するに、磁気メディアから上書きされたデータを回復することは可能ですが、ますます難しくなっています。それにもかかわらず、一部の (米国政府の) 標準では、少なくとも複数回の上書きが必要です。一方、デバイスの内部構造はますます複雑になり続けており、上書きした後でも、ドライブやソリッドステート デバイスに予期せぬコピーが存在する可能性があります (不良ブロックの処理やフラッシュ ウェア レベリングについて考えてみてください ( Peter Gutmann を参照))。ドライブします。
ファイルが以前にディスク上の別の物理的な場所に保存されていた可能性が考慮されていないのはなぜなのか、私はいつも疑問に思っていました。
たとえば、デフラグが発生したばかりの場合、ディスク上の別の場所に簡単に復元できるファイルのコピーが簡単に存在する可能性があります。
これを参照してください: Guttmanの論文
フォーマット後もハードドライブからデータを読み取ることができる「ディスク修復」タイプのアプリケーションやサービスがあるため、何かを安全に消去する必要がある場合、ランダムな 1 と 0 で 1 回上書きするだけでは十分ではありません。
平均的なユーザーにとっては、これで十分だと思いますが、高度なセキュリティ環境 (政府、軍など) にいる場合は、かなり効果的に保証できる、より高いレベルの「削除」が必要です。ドライブから回復可能なデータはありません。
1 がすべての 0 に書き込まれ、0 がすべての 1 に書き込まれるようにビットを反転するだけで、磁場内の変数を取り除く必要があり、2 パスしかかからないはずです。
米国では、機密情報 (つまり、極秘情報) の消去はドライブを破壊することに関する要件が提示されています。基本的に、ドライブは巨大な磁石を備えた機械に入れられ、廃棄のためにドライブを物理的に破壊することもありました. これは、何度も上書きされても、ドライブ上の情報を読み取る可能性があるためです。