Tiny Core LinuxでHDDの完全消去（Secure Erase編）

「[Tiny Core Linux 7をUSBメモリにインストール](42bc90c13e35d0f81467)」で作ったTiny Core LinuxでSecure Eraseを使ったHDDのデータ消去です。

いつ頃から分からないですがATA規格のHDDにはSecure Eraseという削除機能がHDD自体に搭載されていて、それを使えばデータ消去ができるようです。というわけで今回はSecure Erase機能を使ってデータ消去を行なってみようと思います。

## hdparmのインストール
LinuxでSecure Eraseを行うにはhdparmコマンドを使います。しかしTiny Core Linux標準のhdparmは機能が限定されていてSecure Eraseを行うことができないためパッケージ版のhdparmをインストールします。

```console
$ tce-load -wi hdparm
```

## Secure Eraseが使えるのかの確認
よほど古くなければ対応していると思うのですが、念のため対象のディスクがSecure Eraseに対応しているかを確認します。

```console
$ sudo hdparm -I /dev/sda
（省略）
Security: 
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
		frozen
	not	expired: security count
		supported: enhanced erase
	84min for SECURITY ERASE UNIT. 84min for ENHANCED SECURITY ERASE UNIT. 
Logical Unit WWN Device Identifier: 50014ee2586557ed
	NAA		: 5
	IEEE OUI	: 0014ee
	Unique ID	: 2586557ed
```

「xxx for SECURITY ERASE UNIT」あたりのメッセージからSecure Eraseが使えるであろう事が予想できます。また「xxx for ENHANCED SECURITY ERASE UNIT」や「supported: enhanced erase」と表示されているのでEnhanced Eraseにも対応していると思われます。

## not frozenへの移行
Secure Eraseを実行するにはSecurity:のところが「not frozen」である必要があります。サスペンドすれば「not frozen」になるという情報を得たので以下のコマンドでサスペンドします。

```console
$ sudo sh -c "echo mem > /sys/power/state"
```

サスペンド後、電源ボタンを押したり何かのキーを押すなりしてサスペンドから復帰すると「not frozen」になる予定だったのですが、画面は真っ暗なままで確認することができません。
色々と試してみるとキーボードは使えますしコマンドも受け付けることがわかったので、以下のようなスクリプトを作成し実行してみました。

```bash:erase.sh
#!/bin/sh
sudo sh -c "echo mem > /sys/power/state"
sudo hdparm -I /dev/sda > erase.log 2>&1
filetool.sh -b
sudo reboot
```

スクリプトを実行するとサスペンドされますので、電源ボタンを押したり何かのキーを押すなりしてサスペンドから復帰後、erase.logの中身を見てみると以下のような感じで「not frozen」になっていました。これならSecure Eraseが実行できそうです。

```text:log.txt
（省略）
Security: 
	Master password revision code = 65534
		supported
	not	enabled
	not	locked
	not	frozen
	not	expired: security count
		supported: enhanced erase
	84min for SECURITY ERASE UNIT. 84min for ENHANCED SECURITY ERASE UNIT. 
```

## Secure Eraseの実行
画面が使えないので以下のようなスクリプトを作って実行してみることとしました。`--security-set-pass`でHDDをロックして`--security-erase`で消去実行という感じです。

```bash:erase.sh
#!/bin/sh
sudo sh -c "echo mem > /sys/power/state"
sudo hdparm -I /dev/sda >> erase.log 2>&1
sudo hdparm --security-set-pass pass /dev/sda >> erase.log 2>&1
time sudo hdparm --security-erase pass /dev/sda >> erase.log 2>&1
sudo hdparm --security-unlock pass /dev/sda >> erase.log 2>&1
filetool.sh -b
sudo reboot
```

Enhanced Eraseが使える場合は使うようにするなら以下のような感じかなと思います。

```bash:erase.sh
#!/bin/sh
sudo sh -c "echo mem > /sys/power/state"
sudo hdparm -I /dev/sda > erase.log 2>&1
if [ "$(sudo hdparm -I /dev/sda | grep 'for ENHANCED')" ]; then
    echo "Enhanced Erase" >> erase.log
    sudo hdparm --security-set-pass pass /dev/sda >> erase.log 2>&1
    time sudo hdparm --security-erase-enhanced pass /dev/sda >> erase.log 2>&1
    sudo hdparm --security-unlock pass /dev/sda >> erase.log 2>&1
elif [ "$(sudo hdparm -I /dev/sda | grep 'for SECURITY')" ]; then
    echo "Secure Erase" >> erase.log
    sudo hdparm --security-set-pass pass /dev/sda >> erase.log 2>&1
    time sudo hdparm --security-erase pass /dev/sda >> erase.log 2>&1
    sudo hdparm --security-unlock pass /dev/sda >> erase.log 2>&1
else
    echo "not supported Secure Erase" >> erase.log
fi
filetool.sh -b
sudo reboot
```

実行途中で電源が落ちたりするとHDDがロック状態のままとなってしまう事があります。その場合は`sudo hdparm --security-unlock pass /dev/sda`でロックを解除することができます。

## どんな値が書き込まれているの？
Secure Eraseを実行するとどんな値が書き込まれているのか見てみると…

```bash
$ dd if=/dev/sda bs=256 count=1 | hexdump -C
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
00000100
```

どうやらゼロのようです（Enhanced Eraseなら一定のパターンを書き込むものもあるようです 2/8追記）また、所要時間がshredで1回書き込んだ場合とほぼ同じなので、恐らく1回のみの書き込みだと思います。

それで本当に大丈夫なのかなーなんて思っているとIPAが公開している「[セキュリティ関連NIST文書](https://www.ipa.go.jp/security/publications/nist/)」の「SP800-88媒体のサニタイズに関するガイドライン」」の中に以下のような記述があるのを見つけました。
> 技術の高度化により、磁気ディスクタイプの記憶媒体に関する従来のベストプラクティスが様変わりする状況が生まれた。基本的には、記憶媒体のトラック密度の変化やそれに伴う変化によって、媒体の消去と除去が同一になる状況が生まれた。つまり、2001 年以降に製造された ATA ディスクドライブ（15 GB 超）では、キーボード攻撃と実験環境室のどちらから媒体を保護するにも、媒体を一回上書きすることによる消去で十分である。
（「SP800-88媒体のサニタイズに関するガイドライン」より引用）

らしいです…。何回か上書きしないと行けないとずっと思っていたので今さら1回で良いと言われても…という気もしますが…。

## 関連リンク

- [UbuntuからTiny Core Linux 7をUSBメモリにインストール](42bc90c13e35d0f81467)
- [Tiny Core LinuxでHDDの完全消去（shred編）](d1c7ad58009f41e2d252)
- [Tiny Core LinuxでHDDの完全消去（dd編）](28e15e54700dc9aadb44)
- [Tiny Core LinuxでHDDにエラーがないかを調べる](bdeb60a8b671113e54d7)