HDDを楽に処分できるようにdm-cryptで暗号化した

昔はHDDを処分するときは何回も上書きで書き込みをしていたようですが大容量のディスクになればなるほど時間はかかるし、代替されたセクタにデータが残ってしまう可能性があったりするそうです。代替セクタの使用を前提としたSSDであればなおさら。

ということで最近はディスクは丸ごと暗号化しておいて処分するときはそのキーだけ破棄すればよいということになったそうです。なるほど理にかなってますね

ということでサーバー用に新しいHDDを買ったのでdm-cryptで暗号化して運用してみることにしました

要約

想像以上に面倒だった。ドリルで穴開けた方が早い

環境

  • Ubuntu 14.04 trusty (諸事情でバージョン上げられていない)

要件

  • 内臓のSATAでつないだデータ用HDDを暗号化する
  • 新規のHDDなのでデータのinplace置き換えはなし
  • 起動時に勝手にmountされるようにしたい
  • 鍵はシステム用HDDに平文で置いてしまってよい
  • 暗号化の目的は処分を楽にすることなので処分したHDDを拾った / 買い取った人に中身を見られなければよい

技術選定

Linuxでディスクを暗号化するにはdm-cryptというものを使うのが一般的だそうです

パーティションを丸ごと暗号化することができ、例えば/dev/sdX を暗号化して、/dev/mapper/cryptX のようにブロックデバイスインターフェイスを提供してくれます。この/dev/mapper/cryptX を普通にext4などでフォーマットして使うことができる

暗号化メタデータの扱い

主に2つ

LUKS

パーティションの先頭にソルトや暗号化方式などのメタデータを入れておく方法。 blkidコマンドなどパーティションを扱うツールでそのパーティションがLUKSで暗号化されているということがわかるため扱いを間違えづらいなどのメリットがある

メタデータの部分がぶっ壊れると復旧不可能になるというデメリットがあるが(メタデータのエクスポートも一応できる)ディスクが壊れたらバックアップから復旧するべきで、壊れたディスクからサルベージしようとしている時点で負けなのではないでしょうか

plain

ソルトを使用せずに直接暗号化鍵でencrypt / decryptする方法。メタデータが一切不要になるがパーティションみても何だったかよくわからない / 暗号化方式をデフォルトに頼る / 自分で指定する必要がある などデメリットもある。

基本的にはLUKSがおすすめらしいよ

作業

$ sudo apt-get install cryptsetup

# keyの作成
# パスワードマネージャーで生成したすごい長い文字列を使っています
# そのままパスワードマネージャーに登録しておくことでバックアップも兼ねる
$ sudo sh -c'echo "XXXXXXXXXXXXXXXXX" > /etc/hddXkeyfile
$ sudo chmod 400 /etc/hddXkeyfile

# ここでデバイスを間違えると即死なので注意
$ sudo cryptsetup -v luksFormat --key-file /etc/hddXkeyfile /dev/sdXN

# /dev/mapper/cryptX にマウントされる
$ sudo cryptsetup --key-file /etc/hddXkeyfile open /dev/sdXN cryptX

$ sudo mkfs.ext4 /dev/mapper/cryptX

# UUIDの確認
$ sudo blkid
...
/dev/sdXN: UUID="XXXXX-XXXXX-XXXXX-XXXXX" TYPE="crypto_LUKS"
...

# 起動時用設定
$ sudo vi /etc/crypttab
# 例
# cryptX UUID=04d26127-cb73-49fe-b5a5-3ad2ede5ba8b /etc/hddXkeyfile luks,timeout=60

$ sudo vi /etc/fstab
# 例
# /dev/mapper/cryptX /storageX       ext4    errors=remount-ro 0       2

$ sudo mkdir /storageX
$ sudo mount -a
$ touch /storageX/testfile

# crypttabの確認
# openコマンドで手動でmappingしたときと同一の結果になるかチェックしておく
$ sudo umount /storageX
$ sudo cryptdisks_stop s2
$ sudo cryptdisks_start s2
$ sudo mount -a
$ ls /storage2
lost+found  testfile

参考にしたページ

https://wiki.archlinuxjp.org/index.php/Dm-crypt

感想

ネット上のいい感じの資料がArchWikiくらいしかなく世の中の人はあんまり暗号化してないのではないでしょうか。 またWindowsMacと比べると自由度が高い代わりにだいぶ手順が煩雑めで自分で考える必要があることも多い

今回はやらなかったのですが鍵自体を暗号化したり、起動ディスクを暗号化したり、鍵をネット経由で取得したりといったこともがんばればできるそうです。できるそうですがやりたいかと言われると…