ベクターにあるディスクの未使用領域消去を目的とするフリーソフト(DOS,Windows)

リンク
Windows で Cipher.exe を使用して削除済みのデータを上書きする方法 Microsoftサポート技術情報 Windows 2000 Security Rollup Package 1 (SRP1)以降、NTFS限定、Windows XP Home Editionは不可
フリーのデータ抹消ツール 各ツールの実際の動作を確認している
ハードディスクの内容を完全削除 大量のリンクあり

NTFSのファイルを復元できないように削除するソフトウェアの注意すべき点

ファイルを復元できないように削除するソフトウェアが、NTFSのファイルを対象とする場合は、NTFSにおいて700バイト程度までの小さいファイルはMFT内に保存され、そのファイルのサイズがMFT内に収まる大きさよりも大きくなるとファイルはMFT外に保存されMFT内にデータが残っていることがあるという点に注意すべきです。
元ファイル
00000000  3C 68 74 6D 6C 3E 0D 0A 6D 69 6E 69 66 69 6C 65 ; <html>..minifile
00000010  0D 0A 3C 2F 68 74 6D 6C 3E 0D 0A                ; ..</html>..
上記内容を持つファイルを0で1024バイト上書きするとファイルは0に書き換えられます。
上書き後ファイル
00000000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
.....
000003F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; ................
しかしデータはディスクに残っています。一方がMFT内のデータで、もう一方がトランザクションログと思われます。
ディスクのダンプ
003F49A0  57 00 00 00 00 00 00 00 3C 68 74 6D 6C 3E 0D 0A ; W.......<html>..
003F49B0  6D 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C ; minifile..</html
003F49C0  3E 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 ; >...............

003F7DA0  1B 00 00 00 18 00 00 00 3C 68 74 6D 6C 3E 0D 0A ; ........<html>..
003F7DB0  6D 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C ; minifile..</html
003F7DC0  3E 0D 0A 00 00 00 00 00 B9 15 88 00 00 00 00 00 ; >.......ケ......
検証用コード
#include <stdio.h>

char buf[1024];

int main(int argc,char **argv)
{
    FILE *fp;

    fp = fopen(argv[1],"r+b");
    fwrite(buf, 1, 1024, fp);
    fclose(fp);
    return 0;
}
その他、NTFSでは代替データストリーム、リパースポイント(によるマウントボリュームなど)、スパースファイル、暗号化、圧縮にも注意が必要です。それ以外にファイル名そのもの、ファイルのタイムスタンプ、アトリビュート、ACLも削除すべきかもしれません。ファイルの削除は未使用領域のクリアよりも考慮すべき点は多いのです。ディスクの未使用領域を消去する場合にもいえますが、データサイズがクラスタサイズの倍数ではない場合、ファイルの最終クラスタの未使用部分は以前のファイルの残骸の可能性があります。また、ディレクトリの未使用エントリに削除したファイル名が残っている可能性があります。
http://www.cybernetic-survival.net/salv.htm (2005/2/26)には
引用開始
正しい抹消ツールというものは、
(1)ファイルのサイズ情報をゼロにする
(2)ファイル名の領域(ディレクトリエントリ)から、データが存在する先頭クラスタ番号を削除する。ファイルのデータが格納されていたクラスタに対応するエントリを、ファイルアロケーションテーブルからも削除する。クラスタとは、OSがディスクを管理するための最小単位で、1つ以上のセクタをまとめたもの。
(3)ファイルのデータ領域をゼロや乱数などで上書きする
の3つの処理すべてを行うのだが、まれに(3)の処理を行わないものがある。そのような不完全な抹消ツールで処理したディスクは、「復元」でスキャンしても何も見つからないかもしれないが、ファイナルデータのような商用の復元ツールを使うと、削除済みデータが見つかる可能性がある(当然だが「復元」を商用パッケージにしたものでは無理だ)。さらにStep2以降の、ディスクを直接ダンプするような方法をとれば、データ領域が上書きされていないわけだから、削除済みデータは確実に見つかる。
引用終わり
とありますが、代替データストリーム、リパースポイント、スパースファイル等を考慮しない単純な場合に限定したとしても下記のようにすべきかと思います。
(1)アトリビュートを変更する。
(2)(a)もしNTFSかつファイルサイズがMFT内に収まる大きさ(0バイトの場合も含む)の場合は、MFT内に収まる最大サイズでゼロや乱数などで上書きする。(b)そうでないならファイルサイズをクラスタサイズの倍数に切り上げてゼロや乱数などで上書きする(ただしファイルサイズが0の場合はこの処理をスキップする)。NTFSの場合はその後ファイルサイズを0にしてから、MFT内に収まる最大サイズでゼロや乱数などで上書きする。
(3)ファイルサイズを0にする。
(4)タイムスタンプを変更する。
(5)ファイル名を変更する。
(6)ファイルを削除する。
ただしMFT内に収まる最大サイズをどう求めるかは(ソフトウェア作者にとって)問題です。代替データストリーム等についても考慮すべきなのでこの方法では不十分です。
MFT内に収まる大きさのファイルに対して上書きすることは可能です。下記の検証例では1バイトのデータを上書きしファイルサイズを1バイトに変更しています。そのため2バイト目からは以前のデータが残っています。NTFSのファイルを復元できないように削除するソフトウェアはMFT内に収まる最大サイズでゼロや乱数などで上書きする必要があります。
(2)の代案として
(2')ファイルサイズでゼロや乱数などで上書きする(ただしファイルサイズが0の場合はこの処理をスキップする)。NTFSの場合はその後ファイルサイズを0にしてから、MFT内に収まる最大サイズでゼロや乱数などで上書きする。
とすることも考えられます。しかしファイルの最終クラスタの未使用部分には以前のファイルの残骸が残ります。
ディスクのダンプ
0000AD00  00 00 18 00 00 00 01 00 1B 00 00 00 18 00 00 00 ; ................
0000AD10  3C 68 74 6D 6C 3E 0D 0A 6D 69 6E 69 66 69 6C 65 ; <html>..minifile
0000AD20  0D 0A 3C 2F 68 74 6D 6C 3E 0D 0A 00 00 00 00 00 ; ..</html>.......

00530320  57 00 00 00 00 00 00 00 3C 68 74 6D 6C 3E 0D 0A ; W.......<html>..
00530330  6D 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C ; minifile..</html
00530340  3E 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 ; >...............
上書き後ディスクのダンプ
0000AD00  00 00 18 00 00 00 01 00 01 00 00 00 18 00 00 00 ; ................
0000AD10  2A 68 74 6D 6C 3E 0D 0A FF FF FF FF 82 79 47 11 ; *html>......ZG.
0000AD20  0D 0A 3C 2F 68 74 6D 6C 3E 0D 0A 00 00 00 00 00 ; ..</html>.......

00530320  57 00 00 00 00 00 00 00 3C 68 74 6D 6C 3E 0D 0A ; W.......<html>..
00530330  6D 69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C ; minifile..</html
00530340  3E 0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 ; >...............

00534710  57 00 00 00 00 00 00 00 68 74 6D 6C 3E 0D 0A 6D ; W.......html>..m
00534720  69 6E 69 66 69 6C 65 0D 0A 3C 2F 68 74 6D 6C 3E ; inifile..</html>
00534730  0D 0A 00 00 00 00 00 00 E7 8E B2 00 00 00 00 00 ; ........邇イ.....
検証用コード
#include <stdio.h>

int main(int argc,char **argv)
{
    FILE *fp;

    fp = fopen(argv[1],"r+b");
    fwrite("*", 1, 1, fp);
    chsize(fileno(fp),1);
    fclose(fp);
    return 0;
}
ファイルを復元できなくする目的で、ファイルを削除したりディスクの未使用領域を消去するソフトウェアを利用する場合、利用者はそのソフトウェアがNTFSのMFT内に収まるサイズのファイルへの対応を行っているかを確認しておくべきです。代替データストリーム、リパースポイント、スパースファイルへの対応も確認しておくべきです。必要ならファイルの最終クラスタの未使用部分、ディレクトリの未使用エントリへの対応も確認しておくべきです。ファイル名、ファイルサイズ、タイムスタンプ、ACLについても必要なら対応を確認すべきです。ベクターでのダウンロードの人気と削除処理の確実性とは無関係です。NTFS固有の機能について言及していないフリーソフトはほとんどの場合未対応です。英語でよければEraserがお勧めのようです。日本語の完全削除version 1.36cはMFT内に収まるファイルには対応するものの代替データストリーム等には未対応とのことで次点となります。

リンク
NTFS 2000 に対するプログラマの見方:暗号化、スパース、リパース ポイント
NTFS Documentation 英語
タイムストンプと$FILE_NAME属性

dkclear ディスクの未使用領域をクリアするソフトウェア

dkclearはディスクの未使用領域を消去するソフトウェアです。ファイルを復元できないように削除するソフトウェアではありません。したがってdkclearはファイルについての注意点である代替データストリーム、スパースファイル、暗号化、圧縮については考慮する必要はありません。dkclearはディスクの未使用領域を消去するソフトウェアであることからMFT内に収まる最大サイズを求めるのが容易であり、MFTの未使用エントリのMFT内に収まるサイズのファイルの残骸のクリアを行っています(ただしクリアされることを保証するものではありません)。リパースポイントを使った「マウントされたボリューム」のクリアはそのボリュームの下のディレクトリに対してdkclearを実行してください。ファイルの最終クラスタの未使用部分は以前のファイルの残骸の可能性があります。ディレクトリの未使用エントリに削除したファイル名が残っている可能性があります。トランザクションログに削除したファイルのデータが残っている可能性があります。ACLについては特に処理していません。MFTの未使用エントリに以前のACLの残骸が残っている可能性があります。ファイルサイズ、タイムスタンプはdkclearが作成する一時ファイルのもので上書きされます。ディスククォータによってディスクの使用可能サイズが制限されている場合は未使用領域を消去できないことがあります。ディレクトリエントリサイズの制限等により未使用領域を消去できないことがあります。FATファイルシステムに対し、ルートディレクトリのエントリに空きが無い(ルートディレクトリにファイルを追加できない)状態でルートディレクトリを指定した場合などです。
http://www.cybernetic-survival.net/w_s.htm
引用開始
NTFSフォーマットの場合
NTFSフォーマットの未使用領域を確実に抹消するフリーソフトは、Eraserとcipher.exe以外、今のところない。
引用終わり
NTFSに対応するディスクの未使用領域を消去するフリーソフトに立候補してみましたがどうでしょうか?日本産としては最初?

リンク
フリーソフトによるデータ抹消・復元大全 ディスクの削除済みデータ(未使用領域)の抹消
ページング ファイルを消去する方法 Windows XP , Windows 2000

up