今回はHDDなどの物理媒体を暗号化するのではなく、ファイルを暗号化します。
ddコマンドでテスト用ファイルluks.img(1GB)を作成。
# dd if=/dev/zero of=luks.img bs=1M count=1024
1.LUKSとしてフォーマット
「cryptsetup luksFormat イメージファイルorデバイスファイル」でLUKSとしてフォーマットします。A you sure?には大文字でYESと入力。次にパスフレーズを2度聞かれるので入力します。
# cryptsetup luksFormat luks.img
WARNING!
========
This will overwrite data on luks.img irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase for luks.img:
パスフレーズを確認:
fileコマンドで確認してみます。
# file luks.img
luks.img: LUKS encrypted file, ver 1 [aes, xts-plain64, sha256] UUID: 94fd36b1-f397-4f14-8ee6-a39c6c88809b
cryptsetup luksDumpで詳細な情報が得られます。
# cryptsetup luksDump luks.img
LUKS header information for luks.img
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha256
Payload offset: 4096
MK bits: 256
MK digest: f6 53 e6 6a 29 a1 28 9d 42 45 4e 75 63 89 c6 29 fc 96 59 01
MK salt: 9b 37 90 94 1c 97 e9 b6 4e 6b b6 b1 3e 6e 01 ee
ef 3b a9 70 9c e4 b8 03 4e 52 15 ae e0 d1 3c 83
MK iterations: 213472
UUID: 94fd36b1-f397-4f14-8ee6-a39c6c88809b
Key Slot 0: ENABLED
Iterations: 3415556
Salt: a6 aa 14 a3 0a c7 f9 e3 c9 72 9b ab 75 92 de 60
70 44 cc 6e 1f b6 c0 0e 16 76 45 b9 07 f9 76 b7
Key material offset: 8
AF stripes: 4000
Key Slot 1: DISABLED
:
2.LUKSを開く
「cryptsetup luksOpen イメージファイルorデバイスファイル 任意の名前」でLUKSを開きます。
# cryptsetup luksOpen luks.img luksfilesystem
Enter passphrase for luks.img:
パスワードが正しい場合「/dev/mapper/任意の名前」にデバイスファイルが出現します。「luksfilesystem」という名前で開いたので「/dev/mapper/luksfilesystem」が対象のファイルです。
# ls /dev/mapper/
control luksfilesystem←これ
3.ファイルシステムを作成
通常のデバイスと同じ要領でmkfsなどでファイルシステムを作成します。
# mkfs -t ext4 /dev/mapper/luksfilesystem
4.マウントする
通常のデバイスと同じ要領でマウントします。
# mount /dev/mapper/luksfilesystem /mnt
通常のディレクトリと同じようにアクセスできます。
# df -h /mnt
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/luksfilesystem 990M 2.6M 921M 1% /mnt
# ls /mnt
lost+found
5.アンマウントしてLUKSファイルシステムを閉じる
デバイスの取り外しの際にはアンマウントした後にcryptsetup luksCloseを実行してLUKSを閉じます。
# unmount /mnt
# cryptsetup luksClose luksfilesystem
おまけ bruteforce-luks
キーフレーズが設定されたLUKSはbruteforce-luksでブルートフォースや辞書アタックが可能です。ちなみにLUKSファイルの頭10MBあれば攻撃可能です。
# dd if=luks.img of=lukstest.img bs=1M count=10
# bruteforce-luks -f /usr/share/john/password.lst lukstest.img