Windows でハードディスクの内容を完全に消去する

SOFTWARE REPORT


ハードディスクの完全消去

パソコンのデータが記録されているハードディスクは、通常、普通の方法でファイルの削除を行っても、それを復元できる可能性が残ってしまいます。

ハードディスクの廃棄などの際にはそこがよく気にされ、第三者に自分が保存したデータが渡ってしまわないように、復元されないように削除する専用ソフトや、物理的な破壊まで、さまざまなものが提供されているようです。

もっとも、パソコンのデータというものは、どの対策を採ったとしても 100% 復元されないという保証はどこにもないと思います。ただ、どこの誰が使っていたものとも分からないハードディスクからデータ取得を試みるコストを考えたとき、さまざまな方法でデータを完全削除しておくことは、データ流出に対して一定の成果は期待できると、個人的には思います。

さて、そんなデータの完全消去ですが、Windows の標準機能でもハードディスク内のデータを完全削除する方法が用意されているようでしたので、メモも兼ねてその方法について整理してみたいと思います。

 

データファイルを暗号化する

まず、個人的にやっておくと良いのではないかと思うのが、削除前にデータファイルを暗号化するという方法です。

Windows 2000 以上の NTFS で初期化されたハードディスクであれば、暗号化という仕組みが既に備わっています。この暗号化は、別のユーザーアカウントからはそのファイルを読むことができないようにするというもので、つまりこれを利用することで、誰かがハードディスクを入手したとしても、記録されているファイルの内容を見ることができなくなります。

"消す" とは違うアプローチになりますけど、暗号化した上でファイルを消せば、復元されたときにデータは暗号化されているので、データ流出防止の面ではそれなりの効果を期待できるのではないかと思います。

 

暗号化の仕方としては、例えば Windows 7 の場合は、目的のドライブを開いたら中のファイルやフォルダーを全て選択して、右クリックでそのプロパティを表示します。

そして 【全般】 の 【詳細設定】 から "内容を暗号化してデータをセキュリティで保護する" にチェックを入れて 【OK】 とすることで、それらのファイルの内容を暗号化することが出来ます。

 

 

diskpart でパーティション情報を消去する

Windows XP 以上の場合には "diskpart" というパーティションを構成するためのプログラムが用意されています。

この "diskpart" には、パーティション情報およびハードディスクの内容を消去する機能が備わっているので、これを用いて内容を初期化する方法を記してみたいと思います。

 

コマンドプロンプトから、次のようにして "diskpart" を起動します。Windows Vista の場合には、管理者モードで起動したコンソールから実行する必要があるかもしれません。

diskpart

"diskpart" が起動すると、"DISKPART>" というプロンプトが表示されます。

そこで次のコマンドを実行して、認識されているディスクを確認します。

list disk

表示された一覧の中から、容量をたよりに、削除対象となるハードディスクのディスク番号を確認します。

今回は例えば "ディスク 3" が削除対象だったとすると、次のようにして、作業対象のハードディスクを 3 に設定します。

select disk 3

ディスクが選択されたら、もう一度 "list disk" を実行して、目的のディスクの先頭に "*" マークがついていることを確認します。間違ったディスクが選択されていると、この後の操作で、別のハードディスクが消去されてしまうことになるので十分注意します。

念のため、"list partition" も実行して、選択されているディスクのパーティション構成が、消したいディスクの構成と一致しているかどうかも確認すると良いでしょう。

 

選択されているハードディスクが、消去したいディスクで間違いないことが確認できたら、次のようにしてパーティション情報を消去します。

clean all

特に何も確認もなく、消去処理が開始されます。

この "all" を引数につけた場合には、パーティション情報の消去と合わせて、ハードディスク内の全ての領域に 0 を書き込む処理も行われるため、終了するまでにかなり時間がかかります。今回は試しに 40GB の USB 2.0 ハードディスクの消去を試してみましたが、その場合でもおおよそ 30 分かかりました。

現在どれくらいまで処理が進んでいるかや、後どれくらいで終わるかといった情報はいっさい表示されないので、ただひたすら終わりを待つばかりです。

 

消去が終わると "DiskPart はディスクを正常にクリーンな状態にしました。" と表示されるので、正しく消去されているかどうか、もう一度ここで "list partition" を実行します。これで "このディスクには表示するパーティションがありません。" と表示されれば、問題なく消去されていることになります。

通常はこれでディスクの初期化は終わりですが、今回はさらに安全性が高まるように別の消去もしたいと思うので、その都合で、今回は "create partition primary" を実行して、パーティションの作成を行っておきました。

 

cipher でパーティションの内容を消去する

"diskpart" の "clean all" だけでもディスク内が 0 で全て埋められるため、それだけでもある程度の効果は期待できると思うのですが、Windows 2000 SP3 以上の環境では、より高度な消去を行う cipher というコマンドを利用することができるようになっているようなので、これを使ってさらにデータ消去を行ってみるのも良いかもしれません。

cipher コマンドは、パーティションの空き容量に対して 0, 1, ランダムなデータを記録することで消去率を高めるようになっているそうなので、利用にあたってはパーティションが必要となります。

cipher は、空き容量めいいっぱいの大きさのファイルを 1 つ作成して消去のためのデータ書き込みを行うらしく、FAT フォーマットのように 1 ファイル 4GB 以上の大きさを持てないファイルシステムでは、消去せずに残ってしまう領域が出てきてしまうそうです。また、空き領域にファイルを作成する都合、隠しファイルでも何らかのファイルが保存されていれば、その部分は消去されないところにも注意です。

そんな辺りに注意して、消去したいハードディスク全体を一度 "diskpart" で全て消去した上で、そこに 1 つのパーティションを作成し、それを NTFS でフォーマットしてから消去作業を行う形が良さそうです。

 

パーティションを用意して、例えばそれにドライブレターの "T" が割り当てられたとしたら、次のようにして空き領域の消去を行います。

cipher /w:T:

この作業も時間はけっこうかかりますが、現在書き込まれているデータが "0x00", "0xFF", ランダムのいずれかなのかや、どれくらいの進捗なのかが数値ではないにせよ "." で表現されるので、さきほどの "diskpart" よりは待ちやすいのではないかと思います。

ちなみに消去作業中は、指定されたドライブの中に "EFSTMPWP" というフォルダーが作成されて、その中に消去データを書き込むためのファイルが作成されている様子が伺えました。

 

そんなこんなで長らく待って、ようやくディスクの内容が消去されました。

ちなみにこの作業、今回は USB 2.0 の 40GB ハードディスクに対して実行して、おおよそ 1 時間 30 分くらいの時間がかかりました。

消去作業が終わると、ドライブ内には作業中に生成された "EFSTMPWP" フォルダーが空の状態で残るようでしたので、最後にそれを削除すれば、完全に空になるといった感じです。そういう面では、この "EFSTMPWP" というフォルダーだけは復元される可能性はありそうです。もっとも、このフォルダー自体は空なので、そこから何かが漏洩するということはないとは思いますが、とりあえず、cipher を利用してディスクを消去したことを知る手掛かりにはなるかもしれないですね。