This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
dm-crypt
"dm-crypt"はLinuxカーネルのcrypto APIフレームワーク及びデバイスマッパーサブシステムを利用したディスク暗号化システムです。dm-cryptを利用するとシステム管理者はディスク全体または論理ボリューム単位またはパーティション単位、あるいは一ファイル単位で暗号化をする事ができます。
dm-cryptサブシステムは"Linux Unified Key Setup (LUKS)"仕様に準じています。つまり、複数の鍵でデータの復号化ができたり、鍵の変更やパスフレーズの追加といった鍵の操作をする事ができます。dm-cryptを用いてLUKSに準じない暗号化も可能ですが、LUKSがフレキシブルで管理がしやすく広くコミュニティでサポートされている事からこの記事では主にLUKS準拠の機能について記述します。
設定
dm-cryptを使用するためには、2つの条件があります。
- Linuxカーネル設定
- sys-fs/cryptsetupのインストール
Linux カーネル コンフィグレーション
dm-cryptを使用するにはいくつかの項目の設定が必要です。
まず、"device mapper"と"crypt target"を有効にしなければなりません。
[*] Enable loadable module support Device Drivers ---> [*] Multiple devices driver support (RAID and LVM) ---> <*> Device mapper support <*> Crypt target support
次に、データの暗号化に使用したい暗号化APIを有効にしなければなりません。暗号化APIの一覧は"Cryptographic API"セクション以下にあります。
[*] Cryptographic API ---> <*> XTS support <*> SHA224 and SHA256 digest algorithm <*> AES cipher algorithms <*> AES cipher algorithms (x86_64) <*> User-space interface for symmetric key cipher algorithms
rootファイルシステムも暗号化したい場合、rootファイルシステムを復号化するためのinitramfsも必要です。そのため、"initramfs support"も有効化する必要があります。
General setup ---> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Cryptsetupのインストール
sys-fs/cryptsetupパッケージはcryptsetupコマンドを提供します。このコマンドはデータを暗号化や復号化したり、パスフレーズや鍵の管理をするためのコマンドです。
root #
emerge --ask sys-fs/cryptsetup
暗号化ストレージ
鍵ファイルまたはパスフレーズ
ストレージの暗号化を始めるには、管理者は暗号化鍵に何を使うかを決める必要があります。cryptsetupではパスフレーズか鍵ファイルを選ぶ事ができます。鍵ファイルはどのようなファイルでも構いませんが、適切に保護されたランダムなデータのファイルを使う事を推奨します。誰かが鍵ファイルを読めるならばその人は暗号化されたデータもまた読めるという事になります。
ddコマンドを使って鍵ファイルを生成する事ができます:
root #
dd if=/dev/urandom of=/etc/keys/enc.key bs=1 count=4096
次の項目では、パスフレーズの場合と鍵ファイルの場合どちらの場合のコマンドも例示します。どちらか一方のみを実行する必要があります。
暗号化ストレージの作成
暗号化ストレージ(ディスク、パーティション、ファイル等)の作成には cryptsetup コマンドで luksFormat
を指定します。
例えば、パスフレーズを鍵として/dev/vdb2を暗号化ストレージに指定する場合:
root #
cryptsetup -s 512 luksFormat /dev/vdb2
This will overwrite data on /dev/vdb2 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: ... Verify passphrase: ...
パスフレーズの代わりに鍵ファイルを使う場合:
root #
cryptsetup -s 512 luksFormat /dev/vdb2 /etc/keys/enc.key
This will overwrite data on /dev/vdb2 irrevocably. Are you sure? (Type uppercase yes): YES
cryptsetupの-s 512
オプションは実際の暗号化鍵の鍵長を指定します。(パスフレーズや鍵ファイルはこの暗号化鍵を利用するための鍵です。)
暗号化ストレージを開く
暗号化ストレージを開くには(つまり、データを復号化して読み取れるようにするには)luksOpen
オプションを指定します。
root #
cryptsetup luksOpen /dev/vdb2 myname
Enter passphrase for /dev/vdb2: ...
鍵ファイルを利用した場合、コマンドはこのようになります:
root #
cryptsetup luksOpen -d /etc/keys/enc.key /dev/vdb2 myname
コマンドの実行に成功すると、/dev/mapper/mynameという名前のデバイスが作成され、読み取る事ができるようになります。
初めて暗号化デバイスを使用する場合、これをフォーマットしなければなりません。次の例ではBtrfsファイルシステムを使用していますが、他のファイルシステムも使用できます。
root #
mkfs.btrfs /dev/mapper/myname
ファイルスステムのフォーマットが完了したら、あるいは以前にフォーマットを済ませた事のあるデバイスであれば、次のようにしてマウントできます:
root #
mount /dev/mapper/myname /home
暗号化ストレージを閉じる
暗号化ストレージを閉じるには(つまり、復号化した状態のデータを扱えなくするには)luksClose
オプションを使用します:
root #
cryptsetup luksClose myname
もちろん、デバイスがまだ使用されていない事を確認してください。
LUKS用の鍵の操作
LUKSの鍵(先の例で指定したパスフレーズや鍵ファイル)は実際のデータ暗号化に用いられる暗号鍵を利用するための鍵です。これは暗号化されたパーティションやディスクあるいはファイルの先頭のスロットに保管されています。
スロットの一覧表示
luksDump
オプションで暗号化ストレージの情報を表示する事ができます。これにはスロットも含まれます:
root #
cryptsetup luksDump /dev/vdb2
LUKS header information for /dev/vdb2 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha1 Payload offset: 4096 MK bits: 512 MK digest: 34 3b ec ac 10 af 19 e7 e2 d4 c8 90 eb a8 da 3c e4 4f 2e ce MK salt: ff 7c 7f 53 db 53 48 02 a4 32 dc e0 22 fc a3 51 06 ba b3 48 b3 28 13 a8 7a 68 43 d6 46 79 14 fe MK iterations: 59375 UUID: 2921a7c9-7ccb-4300-92f4-38160804e08c Key Slot 0: ENABLED Iterations: 241053 Salt: 90 0f 0f db cf 66 ea a9 6c 7c 0c 0d b0 28 05 2f 8a 5c 14 54 98 62 1a 29 f3 08 25 0c ec c2 b1 68 Key material offset: 8 AF stripes: 4000 Key Slot 1: ENABLED Iterations: 273211 Salt: 01 4c 26 ed ff 18 75 31 b9 89 5d a6 e0 b5 f4 14 48 d0 23 47 a9 85 78 fb 76 c4 a9 d0 cd 63 fb d7 Key material offset: 512 AF stripes: 4000 Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
上の例では2つのスロットが使用されています。luksDump
は機微情報を表示はしません。単にLUKSヘッダの内容を表示しているだけです。そのため、luksDump
では復号のための鍵は必要ありません。
鍵ファイルやパスフレーズの追加
暗号化ストレージを利用するための鍵ファイルやパスフレーズを追加するためには、 luksAddKey
オプションを使用します:
root #
cryptsetup luksAddKey /dev/vdb2
Enter any passphrase: (Enter a valid, previously used passphrase to unlock the key) Enter new passphrase for key slot: ... Verify passphrase: ...
鍵ファイルを使用してパスフレーズを追加する場合:
root #
cryptsetup luksAddKey -d /etc/keys/enc.key /dev/vdb2
Enter new passphrase for key slot: ... Verify passphrase: '''
パスフレーズを使用して新たな鍵ファイル(/etc/keys/backup.key)を追加する場合:
root #
cryptsetup luksAddKey /dev/vdb2 /etc/keys/backup.key
鍵ファイルを使用して新たな鍵ファイルを追加する場合:
root #
cryptsetup luksAddKey -d /etc/keys/enc.key /dev/vdb2 /etc/keys/backup.key
鍵ファイルやパスフレーズの削除
luksRemoveKey
オプションを利用して鍵ファイルやパスフレーズを削除する事ができます。削除した鍵ではストレージの利用ができなくなります。
root #
cryptsetup luksRemoveKey /dev/vdb2
Enter LUKS passphrase to be deleted: ...
鍵ファイルを削除する場合:
root #
cryptsetup luksRemoveKey -d /etc/keys/backup.key /dev/vdb2
最低でも一つの鍵ファイルやパスフレーズが使えるようにしてください。一度削除されたパスフレーズや鍵ファイルは(別の鍵を利用して同じものを再度追加しない限り)二度と復旧する事ができません。
スロットを指定して削除
パスフレーズや鍵ファイルがわからない場合、スロットを空ける事ができます。もちろん、どのスロットにどの鍵ファイルやパスフレーズが入っているかを知っていなければいけません。
例えば、スロット2(3番目のスロット)を空ける場合:
root #
cryptsetup luksKillSlot /dev/vdb2 2
このコマンドはパスフレーズを要求します。鍵ファイルを使用する場合:
root #
cryptsetup luksKillSlot -d /etc/keys/enc.key /dev/vdb2 2
暗号化されたファイルシステムの自動マウント
この記事のこれまでの項目は手動で暗号化ファイルシステムを扱うための説明でした。dmcryptを用いると復号化とファイルシステムのマウントを自動化できます。
dm-cryptの設定
/etc/conf.d/dmcryptを編集してストレージ毎に項目を追加します。各内容はファイル内に解説されています。以下は一例であり、どのシステムでも動く内容ではありません。
/etc/conf.d/dmcrypt
2つのストレージを自動で利用する設定例# Definition for /dev/mapper/home (for /home) target=home source=UUID="abcdef12-321a-a324-a88c-cac412befd98" key=/etc/keys/home.key # Definition for /dev/mapper/local (for /usr/local) target=local source=UUID="fedcba34-4823-b423-a94c-cadbefda2943" key=/etc/keys/local.key
fstabの設定
次に、/etc/fstabを編集して(復号化された)ファイルシステムを自動的にマウントさせます。まずは復号化されマウントされたファイルシステムのUUIDを確認します:
root #
blkid /dev/mapper/home
/dev/mapper/home: UUID="4321421a-4321-a6c9-de52-ba6421efab76" TYPE="ext4"
次に、/etc/fstabをこのように編集します:
/etc/fstab
復号化されたファイルシステムの自動マウントUUID="4321421a-4321-a6c9-de52-ba6421efab76" /home ext4 defaults 0 0 UUID="bdef2432-3bd1-4ab4-523d-badcf234a342" /usr/local ext4 defaults 0 0
ブート時の起動スクリプトの追加
dmcryptをブート時の起動サービスに追加する事を忘れないようにしましょう:
root #
rc-update add dmcrypt boot
さらなる情報
- Dm-crypt full disk encryption を読むとGentoo Linuxのインストール時に暗号化されたファイルシステムを使用する方法についての情報が補完できます。
- GitLab上の cryptsetup FAQ は広範囲にわたるよくある質問を網羅しています。