[Linux]dm-crypt
はじめに
システム上のデータを暗号化して保護する場合、その対象が少なければ、ファイル単位で1つずつ暗号化することは可能です。しかし、コンピュータ上に存在する全てのデータを保護したい場合や、あるパーティションのファイルをすべて保護したい場合、1ファイルずつ暗号化するのは現実的ではありません。
Linuxカーネルには、ファイルシステム全体を暗号化するdm-cryptという機能がサポートされています。
dm-cryptとは
dm-cryptは、LinuxカーネルのDevice Mapperを利用したブロックデバイス暗号化機能で、任意のファイルをファイルシステムの用にマウントする機能です。
暗号化の際の鍵管理には、LUKSを使った運用が推奨とされています。
LUKSとは
LUKS(Linux Unified Key Setup)は、「鍵をどう管理するか」を決めた規格です。つまりdm-cryptだけでは、「鍵をどこへ保存する?複数人で使う?パスワード変更する?」などが決まっていません。
そこでLUKSが「鍵スロット、メタデータ、暗号方式、UUID」などを管理します。
cryptsetupコマンド
dm-cryptの暗号化ボリュームをセットアップするコマンドは、cryptsetupコマンドを使用します。
書式
cryptsetup [オプション] [サブコマンド] [サブコマンド引数]
cryptsetupの主なサブコマンド
| サブコマンド | 説明 |
|---|---|
| open (旧 luksOpen) |
LUKSデバイスを復号して利用可能にする |
| close (旧 luksClose) |
LUKSデバイスを復号して利用可能にする |
| status | 開いている暗号デバイスの状態を表示する |
| luksFormat | デバイスをLUKS形式で初期化する |
| luksDump | LUKSヘッダー情報を表示する |
| luksUUID | LUKSデバイスのUUIDを表示する |
| luksAddKey | 新しいパスフレーズを追加する |
| luksRemoveKey | 新しいパスフレーズを追加する |
| luksChangeKey | 既存のパスフレーズを変更する |
open / luksOpen
LUKSデバイスを復号して利用可能にします。
cryptsetup open /dev/sdb1 secure
成功すると、 /dev/mapper/secure が作成されます。
close / luksClose
暗号化デバイスを切断します。
cryptsetup close secure
成功すると、 /dev/mapper/secure が消えます。
status
開いている暗号デバイスの状態を表示します。
cryptsetup status secure
例:
/dev/mapper/secure is active. type: LUKS2 cipher: aes-xts-plain64 device: /dev/sdb1
luksFormat
デバイスをLUKS形式で初期化します。
cryptsetup luksFormat /dev/sdb1
例:
/dev/mapper/secure is active. type: LUKS2 cipher: aes-xts-plain64 device: /dev/sdb1
実行すると以下の処理が行われます。
- LUKSヘッダー作成
- 暗号方式設定
- 初期パスフレーズ登録
イメージ:
実行前 /dev/sdb1 +----------------+ | データ領域 | +----------------+ 実行後 /dev/sdb1 +----------------+ | LUKS Header | +----------------+ | 暗号化領域 | +----------------+
luksDump
LUKSヘッダー情報を表示します。
cryptsetup luksDump /dev/sdb1
例:
/dev/mapper/secure is active. type: LUKS2 cipher: aes-xts-plain64 device: /dev/sdb1
例:
LUKS header information
Version: 2
Cipher: aes-xts-plain64
Keyslots:
0:
Type: luks2
以下の情報が確認できます。
- LUKSバージョン
- 暗号方式
- UUID
- キースロット
luksUUID
LUKSデバイスのUUIDを表示します。
cryptsetup luksUUID /dev/sdb1
例:
8f2a3b4c-xxxx-xxxx
このUUIDは、 /etc/crypttab で利用します。
luksAddKey
新しいパスフレーズを追加します。
cryptsetup luksAddKey /dev/sdb1
例:
LUKS Header Key Slot 0 → 管理者 Key Slot 1 → バックアップ担当者 Key Slot 2 → 予備
luksRemoveKey
登録済みの鍵を削除します。
cryptsetup luksRemoveKey /dev/sdb1
例:
Key Slot 1 削除
注意:最後の有効な鍵を削除すると復号できなくなるため注意。
luksChangeKey
既存のパスフレーズを変更します。
cryptsetup luksChangeKey /dev/sdb1
古いパスフレーズ確認後、新しいものを設定します。
cryptmountコマンド
cryptmountコマンドは、暗号化されたファイルシステムのマウント・アンマウントを簡単に行うためのツールです。
例えば、通常の cryptsetup では、
- cryptsetup open
- mount
- 利用
- umount
- cryptsetup close
と複数のコマンドが必要です。一方 cryptmount では、「cryptmount データ名」だけで、デバイスを開いてマウントまでを自動で行ってくれます。
特徴
- ファイルシステムとスワップ空間の両方を暗号化できる。
- 暗号化されたファイルシステムは、通常のファイルシステムと同様にブロックデバイスに格納できる。
- 暗号化領域の作成時には管理者権限が必要だが、一度作成するとその後の運用は一般ユーザーでも利用できる。
dm-cryptで使われる代表的なモード
| モード | 説明 |
|---|---|
| CBC |
|
| ESSIV |
|
| LRW |
|
| XTS |
|
コメント
コメントを投稿