
SSDについて知る
SSDを構成するNAND型フラッシュメモリのセルは、制御ゲート、酸化膜、フローティングゲートからなるトランジスタです。制御ゲートに電圧がかけられると、酸化膜を通してフローティングゲートに電子が蓄えられ、その電荷の有無がビットのオン/オフを表します。酸化膜は電子が通過するたびに徐々に劣化し、数千回~数十万回繰り返すと、フローティングゲート上の電子を保持できなくなってしまいます。SSDの書き換え回数の限界はこの構造に由来します。
富士通のサイトより
SSDは完全消去が困難

SSDでデータ消去
SSDの場合、ブロック単位でしかデータ消去ができないという特性があります。
左図は、4マスを1ブロックと想定したイメージ図です。(色がついているマスがデータの存在する場所)
例えば「赤色」の箇所を消去する場合、ブロック単位でしかデータ消去ができません。同一ブロック内にある「水色」「青色」のデータはブロックコピーと呼ばれる処理が行われ、自動的に他のブロックへデータがコピーされます。
これで「赤色」マスのブロックを消去できる状態になります。
しかし 消去対象のブロックに存在したデータは、既に他ブロックへコピーされている為、データは残存します。
ウェアレベリング
SSD等の半導体ストレージには一定ブロックに集中して書き込まれる特性がある。ウェアレベリングは特定のブロックへの書き換えが集中することを分散する書き込み回数を平準化する技術であり寿命の長期化に役立っている
単純にブロック単位で消去すれば良いのでは?と思われるでしょう。SSDでは「ウェアレベリング」という自動制御技術が導入されており、ブロックコピーを抑止できません。
ウェアレベリングを回避すればデータ消去可能
ウェアレベリングはSSDの耐用年数 / 寿命を向上させる重要な技術です。一方 SSDのデータを消去する場合、通常の方法では完全にデータが消去できない要因となりました。では、どのようにしてウェアレベリングを回避(無効化)し、SSDのデータを消去できるのでしょうか?
SSDのデータ消去を行う方法
HDDの場合、データが保存されている領域に対して「0」や「乱数」を上書きすることでデータ消去します。一方 SSDの場合、保存されているデータ領域へ上書き「できない」という特徴があります。
1.SSDの初期化:
コントローラーが記録している「マッピングテーブル」や「メモリセル」を消去し、フラッシュメモリに保存されたデータを読み出せない状態にする
→ SSDの初期化を行った場合、フラッシュメモリ上にデータは残存しているが、マッピングテーブルが消失している為、フラッシュメモリ内の情報だけではデータ復元は不可能になる
2.ウェアレベリングを無効化し、全ブロック消去:
フラッシュメモリ上に残存しているデータを全ブロック消去
上記1.と2.は、Secure Erase / 拡張Secure Erase と呼ばれています。この機能はSSD内部に格納されています。
しかし、SSD内部に格納されているSecure Erase / 拡張Secure Eraseを容易に実行できません。容易に実行できた場合「悪意を持つ他者がデータを消去できる」「知識が無いユーザが誤ってデータを消去する」など不都合が生じる可能性があります。
Secure Erase の実施方法
Arch Wiki ソリッドステートドライブ/メモリセルの消去 の手順に沿って SSDを完全削除(Secure Erase)してみました。
hdparmコマンド
hdparmコマンド は SATAインターフェース接続 のみ有効です。
hdparmコマンドの実行
次のコマンドで SSDが Frozen(ロック)されていることを確認し、これを解除します。デバイス名は 各自ご確認ください。
Terminalを開き
コマンドライン
# hdparm -I /dev/sda
Security:
Master password revision code = 65534
supported
not enabled ・・・Secure Erase無効
not locked
frozen ・・・ロックされています
not expired:security count
supported:enhanced erase
4min for SECURITY ERASE UNIT.2min forENHANCED SECURITY ERASE UNIT.
︙
ロックされているので PCの電源は入れたまま、SSDに接続している電源コネクタを引き抜き、再び挿します。
その後もう一度コマンドを実行します。
コマンドライン
# hdparm -I /dev/sda
Security:
Master password revision code = 65534
supported
not enabled ・・・Secure Erase無効
not locked
not frozen ・・・ロックされていません
not expired:security count
supported:enhanced erase
4min for SECURITY ERASE UNIT.2min forENHANCED SECURITY ERASE UNIT.
︙
ロックは解除されました。
次のコマンドで SSDにパスワードを設定します。これにより Secure Eraseコマンドが有効になります。
コマンドライン
# hdparm –user-master u –security-set-pass pass /dev/sda
security_password:"pass" ・・・パスワード pass が設定されました
/dev/sdd:
Issuing SECURITY_SET_PASS command, password="pass", user=user, mode=high
実際には
hdparm –user-master m –security-set-pass pass /dev/sda
が有効でした
パスワードが設定されました。このパスワードは Secure Eraseの実行後、自動的に無効化されます。
Secure Eraseコマンドが有効になっていることを確認します。
コマンドライン
# hdparm -I /dev/sda
Security:
Master password revision code = 65534
supported
enabled ・・・Secure Erase有効
not locked
not frozen ・・・ロックされていません
not expired:security count
supported:enhanced erase
4min for SECURITY ERASE UNIT.2min forENHANCED SECURITY ERASE UNIT.
︙
Secure Erase が有効になりました。
次のコマンドで Secure Erase を実行します。
コマンドライン
# hdparm –user-master u –security-erase pass /dev/sda
security_password:"pass"
/dev/sda:
Issuing SECURITY_ERASE command, password="pass", user=user
Secure Erase 実行がされ、30秒ほどで完了しましたがこの間なにも表示されません。最後に次のコマンドで SSDの先頭から 512バイトまでを HEXダンプして 0埋めされていることを確認します。
コマンドライン
# hexdump -C -n 512 -v /dev/sda
以上で SSDの完全削除の完了です。(Ubuntu で HDD と SSD を完全削除し廃棄する)より
trimコマンドを代用
ファイルレベルの完全消去
trimコマンドはファイルレベルの完全消去コマンドのため「 Secure Erase 」とは一線をかくします。
ただし高レベルの完全消去が出来ます。
hdparmコマンドの場合、SSDによってはコマンド未対応の可能性がありロック解除が行えず、 Secure Erase を実施できないことがあります。
その場合、Trimコマンドを代用することをお勧めします。
コメント