おまけ:SSDのデータ消去についてのメモ

HDDで「セキュアなファイル削除」とか「空き領域のデータ消去」という話が出てくるのは、従来のHDDでは「ファイル削除 == ファイルの管理情報の変更のみ」だったからだ。倉庫管理に例えると「棚管理の台帳だけ変更した」という具合で、棚管理の台帳上は在庫が無いけど実際には倉庫に現物が残っている、という感じだ。

なぜこうなっているのか不明だけど、多分「原理的にデータそのものを削除する必要はないし、削除するようにするとパフォーマンスがガタ落ちだから、削除しなくてもよいか」という感じのところだろ思う。確証はないのだけど、同じ磁気ディスク仲間であるフロッピーディスクでのクイックフォーマットと通常のフォーマット(フロッピーでは物理フォーマットされる)の速さの違いから類推するに、パフォーマンスへの影響は結構大きいのではないかと思う。

これがSSDとなると事情が異なる。SSDは、その性質と内部アルゴリズム上、高速に書き換えを行うには書き込みたいデータサイズ分の空きブロックが必要となる。もし空きブロックが無かったら、まず未消去状態のブロックを消去するなどして空きブロックを確保してから書き込むことになる――つまりブロック消去の分だけ時間がかかるので、書き込み速度が低下してしまう。

このような性質をもつSSDでは、こまめに不要なデータを消去して空きブロックを用意するようにするのが望ましいのだけど、今までHDDではファイル管理情報の変更しか行っていなかった(不要なデータの削除は行っていなかった)。なのでOSやファイルシステムはそのままにデバイスをHDDからSSDに差し替えるだけでは、SSDには不向きな従来のアルゴリズムが使用されてしまう。不要なデータが削除されずに残ってしまい、新たな書き込み時にブロック消去が必要となり、書き込み速度の低下が発生してしまう。

そこで登場したのがSSDのTrim命令だ。この命令はSSDにデータを消去してもよいセクターを通知するものだ。OSはファイルを削除する際に削除対象データのセクターをTrim命令でSSDに通知する。SSDはTrim命令を受けて該当するブロックを消去して空きブロックを作る。結果として、次の書き込み時にブロック消去が発生する可能性が低くなる。

Trim命令を使用するには、SSDファームウェアが対応していることももちろんだが、OS側の対応も必要となる(Trim命令はHDDにはないので、当然ながらHDDの使用を前提とした従来のOSはTrim命令なんて発行しないのだ)。Windows 7以降、Mac OS 10.7 Lion以降で対応しているようだ。

ということで本題。Trim命令対応のOSでTrim命令対応のSSDを使用していて、かつTrim命令を有効にしていると、ファイルを削除したときにOSがTrim命令を発行する可能性が高い。結果として、SSDが該当するブロックを消去する可能性も高くなる。その意味では、普通に「ファイルを削除する」という動作においてはHDDよりもSSDの方がセキュアといえるかもしれない。

そもそも最近のSSDはウェアレベリングを行っているはずなので、OS(ファイルシステム)からみた論理ブロックアドレスとデバイス側の物理ブロックアドレスは一致しない。SSDではウェアレベリング以外にも色々とデバイス内部で処理を行っている。このあたりのアルゴリズムはデバイスのコントローラ・チップに依存する上に、基本的に非公開だ。しかもコントローラは複数種類存在する。このことが「SSDを含むフラッシュメモリでは故障時のデータ救出が難しい」という話につながってくる。そしてデータ救出が難しいということは、悪意のある第三者が削除済みデータを吸い出して復元する際のハードルも高い、ともいえる。

だからだろうか、Mac OS 10.7 Lion以降でSSDを積んでいるモデルでは、ディスクユーティリティの「空き領域の消去」は使用できない。

注意:OS X Lion および SSD ドライブ搭載の Mac のディスクユーティリティでは、「確実な消去オプション」および「空き領域を消去」を利用できません。これらのオプションは SSD ドライブには必要ありません。標準的な消去を行えば、SSD からデータを復元することは困難になるためです。安全性をより高めるには、SSD の使用を開始するときに FileVault 2 暗号化を有効にすることをお勧めします。

http://support.apple.com/kb/HT3680?viewlocale=ja_JP&locale=ja_JP

もっともこれは、SSDがコントローラ・チップに大きく依存しているために、汎用的なデータ完全消去機能をOSとして提供できない、という面もあるのではないかと私は妄想している。

というのも、物理ブロックにデータ消去命令を発行すればブロック消去が実行されるはずだからだ。実際、SSDによってはメーカーが提供しているユーティリティの類でデータを消去できるのだ。しかしその方法がSSDのコントローラによって異なる(そもそも提供されていない可能性もある)と仮定すれば、使えるか否かデバイスに大きく左右される機能をOSで提供するのはリスクが高い、と判断される可能性は否めないだろう。

少なくとも、ウェアレベリングを筆頭とするSSD内部の挙動は、デバイス内部の残存データから正しいデータを復元する作業を難しくする。Trim命令の存在により残存データ自体が虫食い状態となっている可能性がある。この点では、データ消去も暗号化も行っていないHDDよりはセキュアなのかもしれない。

ただし、デバイス内部にはデータが残っている。あくまでも「復元が難しい」だけだ。もし残存データを消去したいのならば、メーカー提供のユーティリティを使用するべきだろう。

あと、仮に物理ブロックのデータを消去したとして、消去済みブロックに物理的な残存データが本当に残っていないのかについては、まだ信頼性が高い研究結果は出ていないようだ。心配なら、敷居は高くなるけどPC盗難のことも考えてSSDを暗号化して使用するのもよいかもしれない。

――USBメモリやSDカードの類はどうすればよいのだろう? 最初から暗号化するか、ごついハンマーで基盤を物理的破壊かなあ?