さよならSDelete

新しいPCに環境を移行してから、SDeleteを使う機会が激減した。ここ1~2ヶ月は1度も使用していない。

何のことはない、ようやくSSDモデルのPCに買い替えたのだ。

以前のPCは2013年に購入したノートPCだ。当時は「クラウド・サービスのストレージにデータを置く」という行為が今ほど一般的ではなく、PC本体にデータを丸抱えしがちだった。実用レベルのストレージ・サイズをSSDで賄うには少々高額で、まだまだHDDモデルが圧倒的に多かった時期だったと記憶している*1

SDeleteを多用していた理由は、ストレージがHDDだったからだ。センシティブな情報を含むファイルはSDeleteで削除していたし、ディスク交換などのタイミングではストレージ全体にSDeleteをかけることもあった。

便利に使っていたSDeleteは、しかし、HDDに特化したツールだった。

SDeleteや、OS X Yosemite 10.10まで存在したsrm(3)、そしてGNU Coreutils付属のshred(1)などによる「指定したファイルの削除」では、ストレージ上の「指定したファイルのデータが存在するディスクセクタ」に、特殊なデータ・パターンを複数回上書きする。これにより、後でディスクセクタから「元のデータとは全くかけ離れたデータ」しか読み取れなくする――という仕組みで、データの復元が困難になるようにしている。

残念ながら今日のSSDはウェアレベリングが行われているため、SDeleteによる「特殊なデータ・パターンによる上書き」のデータは、おそらく「指定したファイルのデータが存在するブロック」ではなく「別のブロック(消去済みブロック)」に書き込まれてしまうだろう。SDeleteはユーザランドのツールであり、OS・デバイスドライバSSDファームウェアからは「通常のデータ書き込み」と「SDeleteによる『特殊なデータ・パターン』の書き込み」を区別できないのだ。

SSDではSDeleteの効果が期待できないのならば、どうすればよいのだろうか?

実のところ、SSDの場合は何もしなくても「HDDより安全」ではないかと思う。なぜなら今ではSSDもOSもTrim命令に対応しているからだ。Trim命令による「空いたブロックのデータ消去」は、データ復旧業者が「SSDのデータ復旧が難しい理由」の1つに挙げている項目だ。普段から長時間PCを使用しているならば、バックグラウンドでそこそこの頻度でTrim命令に基づくデータ削除が行われているだろう。

普段は「Trim命令によるデータ削除」に期待しつつ、ディスク交換の時にSSDメーカのメンテナンス・ツールでSSD全体を完全削除する――という運用でも、HDDよりも遥かに「削除したファイルの復元」が難しくなるように思う。

……とはいえ、Trim命令に応じて実際にブロックのデータを削除するのはSSDファームウェアな訳で、実際にどの程度の頻度でブロックが消去されるのか不透明だ。

それに、SSDについて素人な私は「メンテナンス・ツールで完全削除したはずのブロックからデータを復元できてしまう可能性は?」とか「そもそも完全削除する前にディスクがお亡くなりになった場合に、NANDチップからデータを吸い出して復元することは可能なのだろうか?」とか、色々と余計なことを考えてしまうのである。

そこでディスク全体を暗号化した。WindowsならBitLocker、macOSならFileVaultだ*2。暗号化しておけば、仮に「完全削除したブロックからデータを復元できる」としても、復元したデータは暗号化されている。また完全削除する前にディスクが死亡した場合も、仮にNANDチップからデータを吸い出して復元することが可能だとしても、そのデータは暗号化されている。どちらも、「実は簡単に復号できちゃう」みたいな欠点がない限り、データの復元は困難なはずだ。

ディスク暗号化は、PC故障時に生き残ったディスクからデータを吸い出すのが困難になるという欠点を伴うのだが、そもそもディスク故障まで考慮してデータ・バックアップ体制を構築しておく方が健全だろう。

PCのライフサイクルとしては、最初に環境構築を行う前にディスク全体を暗号化しておき、普段はOS標準の機能でファイルを削除しつつTrim命令に期待して、ディスク交換の際には「暗号化したままの状態で、メンテナンス・ツールでSSD全体を完全削除する」、という流れとなる。

そんな訳で、今では暗号化されたSSDの上で、センシティブな情報を含むファイルもOS標準の機能で削除している。

SDeleteそのものは、USB-HDDとUSBメモリ*3を物理破壊する前に念のため完全削除する作業や、仮想ディスクのダイエットのために空き領域をゼロクリアするために、ディスクの片隅に眠らせている。でも普段使いしなくなったので、もうヘルプメッセージを見ないと使い方が分からなくなってしまった。

*1:この後、2014~2015年ごろからミドルレンジのノートPCでもSSDモデルが見られるようになったと思う。

*2:Linuxは、ディストリビューションによってはインストール時に暗号化LVMを選択できるので、それを選択するのが手っ取り早い気がする。

*3:SSDUSBメモリも記憶素子としてNANDフラッシュを用いているが、大半のUSBメモリにはウェアレベリング機能がない。