4

物理領域にゼロを書き込んで、ファイルを完全に削除するファイルシェダーを作成したいと思います。

ファイルは、必ずしもブロック全体ではなく、ハードドライブに分割して保存される場合があります。

私が物理的な領域と言うとき。ファイルが保存されている物理セクション、または「ゼロの書き込み」を実行できるセクションへの参照を意味します。

C#の方が優れています。

4

3 に答える 3

6

残念ながら、それはC#で完全に可能というわけではなく、カーネルモードドライバーを作成している場合でも、C /C++でも不可能です。

Bleachbitドキュメントからの引用 :

個々のファイルを適切にシュレッダーにかけると、その場所を完全に知ることができると想定されますが、基本的には1つの理想的なケースでしか知ることができません。理想的なケースには次の3つの特徴があります。

  1. 編集のためにファイルサイズが縮小したことはありません。3MBのスプレッドシートから始めて、(スプレッドシートアプリケーションを使用して)1MBに編集し、クリーナーアプリケーションに1MBバージョンを削除するように依頼することを想像してください。クリーナーは、不足している2MBが物理ハードドライブのどこに割り当てられているかを知る方法がありません。(ファイルシステムはファイルを継続的に保存しないことが多いため、欠落している部分が既知の部分の直後にあると想定することはできません。)
  2. ファイルは移動しませんでした。スプレッドシートソフトウェアが、新しいコピーを一時ファイルに書き込み、古いコピーを削除し、一時ファイルの名前を元の名前に変更して、ドキュメントを保存するとします。この場合、クリーナーアプリケーションには、古いスプレッドシートがどこにあるかを知る方法がありません。
  3. ファイルシステムは、ファイルを同じ場所に上書きします。これは良い仮定です。Windows NTFSおよびLinuxでは、最も一般的なext3構成(Ubuntu 9.10およびその他のLinuxディストリビューションのデフォルト)は同じ場所でファイルを上書きしますが、透過的なディスク圧縮、暗号化、およびスパースファイルはその場でファイルを上書きしない場合があります。

さらに:最新のハードドライブの領域が損傷すると、不良セクタをスペアに自動的に再マップします。これらの操作はドライブのファームウェアの裁量であり、オペレーティングシステムもアプリケーションも移動を認識しないため、ドライブをワイプすると損傷した領域は無視されます。

そうは言っても、ファイルが現在ドライブのどのセクターを占めているかを把握することは(簡単ではありませんが)可能です。ただし、これには、アプリケーションが(少なくとも部分的に)使用されるファイルシステムと、そのファイルシステムが基になるメディアにファイルを格納する方法を理解している必要があります。

最後に、ファイルが占めるすべてのセクターを識別し、それらを0で埋めることで、単に実行するのではなく、どのような追加のセキュリティが得られるのかという疑問が残ります。

using(var fs = new System.IO.FileStream(@"m:\delme.zip", 
                                        FileMode.Open,
                                        FileAccess.Write,
                                        FileShare.None))
{
    var zeros = new byte[fs.Length];

    fs.Write(zeros, 0, zeros.Length);       
}
于 2012-01-10T08:24:31.877 に答える
1

通常、このための.NETAPIはありません。ほとんどの場合、ディスクからFS構造を手動で読み取り、ファイル割り当て構造を解析し、相互運用機能を使用して低レベルのブロックIOに移動することを検討しています。

ファイルの長さを変更したり、何が起こるかを観察したりせずに、ファイルにゼロを書き込もうとすることもできます。ファイルが再割り当てされない可能性があります。それが事実かどうかは本当にわかりません。OS、OSのバージョン、FSに依存し、SSDとHDDでさえ異なるのではないかと思います。

また、シュレッドしようとしているファイルが最近OSによって再割り当てされた場合を考えてみてください。ファイルによって使用されていた領域の一部は「空」としてマークされていますが、データはまだそこにあります。実際にディスク全体を「シュレッダー」することなしに、これらの領域が何であるか/何であったかを理解する方法は(ほとんど)ありません。

また、私たちの間のパラノイドの場合:ファイル領域にゼロ(または1、またはガベージ)を書き込むことは、古いデータが回復不能になることを保証するものではありません。ドライブを物理的に破壊することでうまくいくかもしれませんが、そのためのAPIはありません;)

于 2012-01-10T08:27:46.537 に答える
0

あなたがこれを行うことができるかどうかはわかりません。Thisによると、これを行うにはアンマネージコードのみを使用できます。

于 2012-01-10T08:20:25.803 に答える