キーファイルを使ったブロックデバイスの暗号化
概要
Linuxカーネルに含まれている機能を利用してUSBメモリやSDカードなどの携帯できるブロックデバイスを暗号化する手順を説明します。使用されるコマンドはcryptsetup
で、拡張機能としてLUKSを使います。この機能を利用することでブロックデバイスに記録された内容を第三者が論理的に閲覧することをほぼ不可能にします。また、キーファイルにバイナリ(画像や音声データ)を用いることで攻撃者にとってごく普通のファイルであると見せかけることができます。
説明
以下の説明ではブロックデバイスとして/dev/mmcblk0
(SDカード)を使用します。また、キーファイルは静的なバイナリファイルを使用します。ここでは/image.jpg
です。はじめにdf
コマンドで対象のブロックデバイスがマウントされていないことを確認してください。次に、ブロックデバイスへLUKSパーティションを作成していきます。このとき、デバイスに保存されているデータは削除されるため必要であれば適切なバックアップを行ってください。
cryptsetup luksFormat /dev/mmcblk0 /image.jpg
上記のコマンドでは次の内容を選択します。
- ブロックデバイス
- キーファイル
アクションの第一引数で選択されるブロックデバイスは既存のパーティション(/dev/mmcblk0p1
)ではないことに注意してください。第二引数はキーファイルのパスで、ファイルサイズは最大8192KBです。ファイルサイズを制限する場合は--keyfile-size
で指定することができます。
LUKSパーティションが作成されたブロックデバイスはopen
することで通常のブロックデバイスのように扱うことができます。その際にはパーティションの作成で利用したキーファイルと同様のファイルが必要です。
cryptsetup open --type luks --key-file=/image.jpg /dev/mmcblk0 sd-card
最後の引数sd-card
はマッピングの名前で後に使用します。どのデバイスかわかりやすいものが望まれます。lsblk
コマンドやls -l /dev/mapper
でsd-card
が表示されていれば正しくopen
されています。
パーティションの作成後はデバイスをフォーマットします。ext4やexfatなど特に指定はありません。通常のブロックデバイスと同様です。
mkfs.ext4 /dev/mapper/sd-card
ここまでで、暗号化されたブロックデバイスを利用することができます。マウントする場合は上記同様/dev/mapper/sd-card
を使用します。
デバイスを取り外す際はopen
操作とは逆にclose
の操作が必要です。
cryptsetup close sd-card
もし、どこかへマウントしている場合はアンマウントしてください。
参考
- Wikipedia. “LUKS”. https://ja.wikipedia.org/wiki/LUKS. 2023-01-16
- man7.org. “cryptsetup(8) — Linux manual page”. https://man7.org/linux/man-pages/man8/cryptsetup.8.html. 2023-01-16
- ArchWiki. “dm-crypt/デバイスの暗号化”. https://wiki.archlinux.jp/index.php/Dm-crypt/デバイスの暗号化. 2023-01-16
Discussion