🔐

キーファイルを使ったブロックデバイスの暗号化

2023/01/16に公開

概要

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/mappersd-cardが表示されていれば正しくopenされています。
パーティションの作成後はデバイスをフォーマットします。ext4やexfatなど特に指定はありません。通常のブロックデバイスと同様です。

mkfs.ext4 /dev/mapper/sd-card

ここまでで、暗号化されたブロックデバイスを利用することができます。マウントする場合は上記同様/dev/mapper/sd-cardを使用します。
デバイスを取り外す際はopen操作とは逆にcloseの操作が必要です。

cryptsetup close sd-card

もし、どこかへマウントしている場合はアンマウントしてください。

参考

Discussion