HOME


Linux(UNIX)標準コマンドによるデータ抹消

2004/4/10
Linuxを含むUNIX系OSにはddというコマンドがあり、ファイルシステムの種類に関係なく、ディスクに直接データを書き込むことができる。ddコマンドでゼロや乱数をディスク全体に書き込むことで、データ抹消ツールとして利用できる。本稿ではLinuxのddコマンドについてのみ説明する。

ddコマンドを使った以下の方法で抹消できるのは、ディスク全体かパーティション全体だ。ディスクの空き領域(削除済みファイル)のみ、または特定のファイルを抹消する目的には使えない。

ddコマンドは、多くのLinuxディストリビューションで、ブートフロッピーに含まれている。PCを廃棄したり売ったりするとき、適当な抹消ツールがなければ、LinuxのブートフロッピーでPCを起動し、ddコマンドを抹消ツールの代りに使うことができる。


ディストリビューションにより、ブートフロッピーは「ブートディスク」と「ルートディスク」の組になっていることもある。


使い方

本稿の操作はrootで行う必要がある。

例1
PCの内蔵ハードディスクが1台の場合、そのハードディスク全体にゼロを書き込む

# dd if=/dev/zero of=/dev/hda

"/dev/hda"は、IDEプライマリハードディスクを示す。内蔵ハードディスクが1台の場合は、「内蔵ハードディスク全体=IDEプライマリハードディスク=/dev/hda」になる。

2台めの内蔵IDEハードディスク全体へのゼロ書き込みなら、

# dd if=/dev/zero of=/dev/hdb

になる。

IDEではなくSCSIであれば、上の例はそれぞれ

# dd if=/dev/zero of=/dev/sda

# dd if=/dev/zero of=/dev/sdb

になる。

例2
Windowsの起動パーティション(Cドライブとして表示されるパーティション)全体にゼロを書き込む

# dd if=/dev/zero of=/dev/hda1

WindowsからCドライブとして表示される領域は、プライマリハードディスクの第1パーティション=/dev/hda1だ。

SCSIハードディスクの第1パーティションなら、

# dd if=/dev/zero of=/dev/sda1

になる。

例3
抹消の対象は例1、2と同じで、ゼロではなく乱数を書き込む

乱数の書き込みには、/dev/zeroに替えて/dev/uramdomを使う。

# dd if=/dev/urandom of=/dev/hda (プライマリハードディスク全体)

# dd if=/dev/urandom of=/dev/hdb (セカンダリハードディスク全体)

# dd if=/dev/urandom of=/dev/sda (1番目のSCSIハードディスク全体)

# dd if=/dev/urandom of=/dev/sdb (2番目のSCSIハードディスク全体)

# dd if=/dev/urandom of=/dev/hda1 (プライマリハードディスクの第1パーティション)

# dd if=/dev/urandom of=/dev/sda1 (1番目のSCSIハードディスクの第1パーティション)


/dev/uramdomが、どのLinuxディストリビューションのブートフロッピーにもあるとは限らない。

/deb/urandomを使う場合は、ハードディスクを上書きの対象にすると、処理が完了するまで「数時間」の単位の時間がかかると考えた方がよい。



抹消結果の検証

ddコマンドで抹消したフロッピーを、データ復元ツールで解析してみる。
「フリーのデータ抹消ツール vs. 商用のデータ復元ツール」のテストと同様に、未使用かつFATフォーマットのフロッピーに、本サイトのファイルを書き込んだものを抹消し、ファイナルデータDX 試供版で解析してみることにした。

しかし、ddで先頭セクタから上書きされたディスクは、Windowsから未フォーマットと認識され、そのままではファイナルデータで処理できない。そのため、一度FAT形式でクイックフォーマットしてからファイナルデータで解析することになった。通常のフォーマットでは、フロッピーは物理フォーマットされてしまうため、ファイナルデータで解析できなくなる。

それぞれの所要時間は、CPU:Pentium III(550MHz), RAM:128MBのPCで実行した結果である。

実験1

# dd if=/dev/zero of=/dev/fd0

所要時間:48秒

ファイナルデータによる解析結果

何も表示されない。

ディスクのダンプツール(ファイナルデータとは別)を使って見てみると、全域にゼロが書き込まれていることがわかる。

実験2

# dd if=/dev/urandom of=/dev/fd0

所要時間:49秒

ファイナルデータによる解析結果
実験1と同じで、何も表示されない。

ディスクのダンプツールを使って見てみると、全域に乱数が書き込まれていることがわかる。

実験3

# dd if=/dev/urandom of=/dev/fd0 ; dd if=/dev/urandom of=/dev/fd0 ; dd if=/dev/zero of=/dev/fd0

乱数→乱数→ゼロの書き込みであり、「NSA方式」の抹消と一応同じになる。

所要時間:計146秒

ファイナルデータによる解析結果
実験1と同じで、何も表示されない。

ディスクのダンプツールを使って見てみると、全域にゼロが書き込まれていることがわかる。

まとめ

ddコマンドでゼロや乱数を上書きしたフロッピーは、ファイナルデータで復元できない。上書きにかかる時間は、「フリーのデータ抹消ツール vs. 商用のデータ復元ツール」で実験したどのツールよりも短い。


"/dev/random"と"/dev/urandom"について

Linuxには、乱数を生成する仮想デバイスとして"/dev/random"と"/dev/urandom"がある。両者の違いは以下のとおり。

/dev/random
十分なビット数のランダムデータがない場合、デバイスドライバやその他の源からの環境ノイズが蓄積されるまで、乱数の生成を行わない。

/dev/urandom
十分なビット数のランダムデータがない場合、現在保持している値の、暗号学的に強いハッシュ値を返す。つまりいつでも乱数を読み込める。

# dd if=/dev/urandom of=/dev/fd0

の代わりに

# dd if=/dev/random of=/dev/fd0

とした場合、後者ではランダムデータが不十分であれば乱数の生成が停止するため、一定の速度で上書きができない可能性がある。


HOME

Copyright (C) Cybernetic Survival Network. All Rights Reserved.