Dm-crypt/ja

dm-cryptはLinuxカーネルのcrypto APIフレームワーク及びデバイスマッパーサブシステムを利用したディスク暗号化システムです. dm-cryptを利用するとシステム管理者はディスク全体または論理ボリューム単位またはパーティション単位、あるいは一ファイル単位で暗号化をする事ができます.

dm-cryptサブシステムはLinux Unified Key Setup (LUKS)仕様に準じています. つまり、複数の鍵でデータの復号化ができたり、鍵の変更やパスフレーズの追加といった鍵の操作をする事ができます. dm-cryptを用いてLUKSに準じない暗号化も可能ですが、LUKSがフレキシブルで管理がしやすく広くコミュニティでサポートされている事からこの記事では主にLUKS準拠の機能について記述します.

設定
dm-cryptを使用するためには、2つの条件があります.


 * 1) Linuxカーネル設定
 * 2) のインストール

Linux カーネル コンフィグレーション
dm-cryptを使用するにはいくつかの項目の設定が必要です.

まず、device mapperとcrypt targetを有効にしなければなりません.

次に、データの暗号化に使用したい暗号化APIを有効にしなければなりません. 暗号化APIの一覧はCryptographic APIセクション以下にあります.

rootファイルシステムも暗号化したい場合、rootファイルシステムを復号化するためのinitramfsも必要です. そのため、initramfs supportも有効化する必要があります.

tcrypt 暗号化オプション (TrueCrypt/tcplay/VeraCrypt 互換モード) を使用する場合、次のアイテムもカーネルに追加する必要があります. そうしないと、 cryptsetup は "device-mapper: reload ioctl failed: Invalid argument" および "Kernel doesn't support TCRYPT compatible mapping" のエラーを返すでしょう.

Cryptsetupのインストール
パッケージはコマンドを提供します. このコマンドはデータを暗号化や復号化したり、パスフレーズや鍵の管理をするためのコマンドです.

Benchmark
provides a benchmarking tool which will help to decide which setup to choose. The output depends on kernel settings as well as USE flags and destination (HDD, SSD etc.).

鍵ファイルまたはパスフレーズ
ストレージの暗号化を始めるには、管理者は暗号化鍵に何を使うかを決める必要があります. ではパスフレーズか鍵ファイルを選ぶ事ができます. 鍵ファイルはどのようなファイルでも構いませんが、適切に保護されたランダムなデータのファイルを使う事を推奨します. 誰かが鍵ファイルを読めるならばその人は暗号化されたデータもまた読めるという事になります.

コマンドを使って鍵ファイルを生成する事ができます:

次の項目では、パスフレーズの場合と鍵ファイルの場合どちらの場合のコマンドも例示します. どちらか一方のみを実行する必要があります.

暗号化ストレージの作成
暗号化ストレージ(ディスク、パーティション、ファイル等)の作成には コマンドで   を指定します.

例えば、パスフレーズを鍵としてを暗号化ストレージに指定する場合:

パスフレーズの代わりに鍵ファイルを使う場合:

の オプションは実際の暗号化鍵の鍵長を指定します. (パスフレーズや鍵ファイルはこの暗号化鍵を利用するための鍵です. )

暗号化ストレージを開く
暗号化ストレージを開くには(つまり、データを復号化して読み取れるようにするには) オプションを指定します.

鍵ファイルを利用した場合、コマンドはこのようになります:

コマンドの実行に成功すると、という名前のデバイスが作成され、読み取る事ができるようになります.

初めて暗号化デバイスを使用する場合、これをフォーマットしなければなりません. 次の例ではBtrfsファイルシステムを使用していますが、他のファイルシステムも使用できます.

ファイルスステムのフォーマットが完了したら、あるいは以前にフォーマットを済ませた事のあるデバイスであれば、次のようにしてマウントできます:

暗号化ストレージを閉じる
暗号化ストレージを閉じるには(つまり、復号化した状態のデータを扱えなくするには) オプションを使用します:

もちろん、デバイスがまだ使用されていない事を確認してください.

LUKS用の鍵の操作
LUKSの鍵(先の例で指定したパスフレーズや鍵ファイル)は実際のデータ暗号化に用いられる暗号鍵を利用するための鍵です. これは暗号化されたパーティションやディスクあるいはファイルの先頭のスロットに保管されています.

スロットの一覧表示
オプションで暗号化ストレージの情報を表示する事ができます. これにはスロットも含まれます:

上の例では2つのスロットが使用されています. は機微情報を表示はしません. 単にLUKSヘッダの内容を表示しているだけです. そのため、 では復号のための鍵は必要ありません.

鍵ファイルやパスフレーズの追加
暗号化ストレージを利用するための鍵ファイルやパスフレーズを追加するためには、  オプションを使用します:

鍵ファイルを使用してパスフレーズを追加する場合:

パスフレーズを使用して新たな鍵ファイルを追加する場合:

鍵ファイルを使用して新たな鍵ファイルを追加する場合:

鍵ファイルやパスフレーズの削除
オプションを利用して鍵ファイルやパスフレーズを削除する事ができます. 削除した鍵ではストレージの利用ができなくなります.

鍵ファイルを削除する場合:

最低でも一つの鍵ファイルやパスフレーズが使えるようにしてください. 一度削除されたパスフレーズや鍵ファイルは(別の鍵を利用して同じものを再度追加しない限り)二度と復旧する事ができません.

スロットを指定して削除
パスフレーズや鍵ファイルがわからない場合、スロットを空ける事ができます. もちろん、どのスロットにどの鍵ファイルやパスフレーズが入っているかを知っていなければいけません.

例えば、スロット2(3番目のスロット)を空ける場合:

このコマンドはパスフレーズを要求します. 鍵ファイルを使用する場合:

暗号化されたファイルシステムの自動マウント
この記事のこれまでの項目は手動で暗号化ファイルシステムを扱うための説明でした. を用いると復号化とファイルシステムのマウントを自動化できます.

dm-cryptの設定
を編集してストレージ毎に項目を追加します. 各内容はファイル内に解説されています. 以下は一例であり、どのシステムでも動く内容ではありません.

fstabの設定
次に、を編集して(復号化された)ファイルシステムを自動的にマウントさせます. まずは復号化されマウントされたファイルシステムのUUIDを確認します:

次に、をこのように編集します:

ブート時の起動スクリプトの追加
をブート時の起動サービスに追加する事を忘れないようにしましょう:

Make decrypted device nodes visible
If you have decrypted/unlocked a device before the services were started for example your root disk in an with an initramfs then it's possible that the mapped device is not visible. In this case you can run the following to recreate it.

TrueCrypt/tcplay/VeraCrypt ボリュームをマウントする
container-to-mount を、 下のデバイスファイルまたは開きたいファイルへのパスで置き換えてください. 開くのに成功した場合、平文デバイスが として現れ、これは通常のデバイスと同様に   することができます.

鍵ファイルを使用している場合は、 オプションを使用して提供してください. 隠しボリュームを開くには、 オプションを提供してください. パーティションまたはドライブ全体がシステムモードで暗号化されている場合は、 オプションを使用してください.

使い終わったら、ボリュームを  して、次のコマンドを使用してコンテナを閉じてください:

External resources

 * The cryptsetup FAQ hosted on GitLab covers a wide range of frequently asked questions.