dm-crypt

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Dm-crypt and the translation is 97% complete.

Other languages:
Deutsch • ‎English • ‎español • ‎日本語 • ‎한국어 • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎


Resources

"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. sys-fs/cryptsetupのインストール

Linux カーネル コンフィグレーション

dm-cryptを使用するにはいくつかの項目の設定が必要です。

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

KERNEL 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"セクション以下にあります。

KERNEL 暗号化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"も有効化する必要があります。

KERNEL 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を編集してストレージ毎に項目を追加します。各内容はファイル内に解説されています。以下は一例であり、どのシステムでも動く内容ではありません。

FILE /etc/conf.d/dmcrypt2つのストレージを自動で利用する設定例
# 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をこのように編集します:

FILE /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 は広範囲にわたるよくある質問を網羅しています。