【Linux】Cryptsetupを用いたディスク(デバイス)の暗号化

ディスク(デバイス)の暗号化は,紛失や盗難時にデータを流出防止のために重要な技術です.

本記事では,“Cryptsetup”を使用して,デバイスの暗号化を行う方法を示します

目次

Cryptsetupの導入

・Ubuntu/Debian系


apt install cryptsetup

デバイスの暗号化方法

暗号化を行うデバイスは/dev/md0です./dev/md0は以前の記事で設定したRAID1のディスクです.

↓↓↓以前の記事はこちら↓↓↓

RAID済みのディスクを使用していますが,
通常のデバイスでも全く同様の手順で,暗号化可能です.

デバイスの暗号化方法として,「パスフレーズで暗号化する方法」「鍵ファイルを用いて暗号化する方法」の2種類が代表的です.

本記事では,パスフレーズを用いる場合と鍵ファイルを用いる場合の2種類の方法を示します.

パスフレーズで暗号化

暗号化

パスフレーズで暗号化するために,下記コマンドを入力します.

大文字”YES”を入力した後,パスフレーズが要求されるため,任意の文字列を入力します.


cryptsetup luksFormat /dev/md0

WARNING!
========
This will overwrite data on /dev/md0 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/md0:
Verify passphrase:

上記コマンドでデバイスの暗号化が完了しました.

暗号化したデバイスにアクセス

次に,暗号化されたデバイスにアクセスする必要があります.

暗号化されたデバイスにアクセスするために下記コマンドで暗号化を解除してアクセス可能な状態にします.


cryptsetup open /dev/md0 cryptdata
Enter passphrase for /dev/md0:

ここで,cryptdataは暗号化されたデバイス名(ラベル)です.任意の名前を与えることができます.

暗号化が解錠されたことを確認するために,lsblkコマンドでデバイスの状態を確認します.


lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                         8:0    0  14.6T  0 disk
└─sda1                      8:1    0  14.6T  0 part
  └─md0                     9:0    0  14.6T  0 raid1
    └─cryptdata           253:3    0  14.6T  0 crypt
sdb                         8:16   0  14.6T  0 disk
└─sdb1                      8:17   0  14.6T  0 part
  └─md0                     9:0    0  14.6T  0 raid1
    └─cryptdata           253:3    0  14.6T  0 crypt

cryptsetup status <label>コマンドでも暗号化デバイスを確認できます.


cryptsetup status cryptdata
/dev/mapper/cryptdata is active.
  type:    LUKS2
  cipher:  aes-xts-plain64
  keysize: 512 bits
  key location: keyring
  device:  /dev/md0
  sector size:  512
  offset:  32768 sectors
  size:    31251458048 sectors
  mode:    read/write

暗号化されたデバイス名は,/dev/mapper/<label>となります.

デバイスをフォーマット(デバイスを作成時のみ)

デバイスを使用可能な状態にするためにフォーマットします.


mkfs -t ext4 /dev/mapper/cryptdata
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 3906432256 4k blocks and 488304640 inodes
Filesystem UUID: *******-****-****-****-************
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
        2560000000, 3855122432

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information:
done

デバイスのフォーマットは,
暗号化デバイス作成時のみ行うことを注意してください

マウント

フォーマット済みのデバイスをマウントします.


mount /dev/mapper/cryptroot /mnt/raid1

df
Filesystem                      1K-blocks    Used   Available Use% Mounted on
...
/dev/mapper/cryptroot         15501445668      28 14720142808   1% /mnt/raid1

再起動時に自動マウント

再起動を行うと,デバイスにアクセスするために再度パスフレーズを入力する必要があり不便です.再起動時も自動で解錠し,マウントすると便利になります.自動解錠にはパスフレーズではなく,鍵ファイルを使用します.

鍵ファイルを作成し,キーの追加

まず,ランダムな文字列から鍵ファイルを生成します.


dd bs=512 count=4 if=/dev/urandom of=/root/crypt.key
4+0 records in
4+0 records out
2048 bytes (2.0 kB, 2.0 KiB) copied, 0.000221897 s, 9.2 MB/s

暗号化デバイスのキーとして,鍵ファイルを追加します.


cryptsetup luksAddKey /dev/md0 /root/crypt.key

自動アンロック設定

まず,暗号化されたデバイスのUUIDを調べます.


blkid
...
/dev/md0: UUID="********-****-****-****-************" TYPE="crypto_LUKS"
...

/etc/crypttabに暗号化解錠の設定を記述します.

/etc/crypttab


cryptdata UUID=********-****-****-****-************ /root/crypt.key

自動マウント

自動マウント設定を/etc/fstabに記述します.

/etc/fstab


/dev/mapper/cryptdata /mnt/raid1   ext4    defaults            0   2  

鍵ファイルを用いて暗号化

ここでは,パスフレーズの代わりに鍵ファイルを利用して暗号化する方法を示します.

鍵ファイルを使用した場合,/etc/crypttabの設定ファイルを利用するとシステム起動時に自動的に暗号化を解錠できるため便利です.

パスフレーズよりも鍵ファイルの方がおすすめです

鍵ファイルの作成

下記コマンドで鍵ファイルを作成します.


dd bs=512 count=4 if=/dev/urandom of=/root/crypt.key
4+0 records in
4+0 records out
2048 bytes (2.0 kB, 2.0 KiB) copied, 0.000221897 s, 9.2 MB/s

鍵ファイルで暗号化

作成した鍵ファイルを用いてデバイスの暗号化を行います.


cryptsetup luksFormat /dev/md0 /root/crypt.key
WARNING: Device /dev/md0 already contains a 'ext4' superblock signature.

WARNING!
========
This will overwrite data on /dev/md0 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES

暗号化したデバイスにアクセス

下記コマンドのように,鍵ファイルを指定してデバイスを解錠します.


cryptsetup open /dev/md0 cryptdata  --key-file /root/crypt.key

lsblk
NAME                      MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                         8:0    0  14.6T  0 disk
└─sda1                      8:1    0  14.6T  0 part
  └─md0                     9:0    0  14.6T  0 raid1
    └─cryptdata           253:3    0  14.6T  0 crypt
sdb                         8:16   0  14.6T  0 disk
└─sdb1                      8:17   0  14.6T  0 part
  └─md0                     9:0    0  14.6T  0 raid1
    └─cryptdata           253:3    0  14.6T  0 crypt

デバイスをフォーマット(デバイスを作成時のみ)


mkfs -t ext4 /dev/mapper/cryptdata
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 3906432256 4k blocks and 488304640 inodes
Filesystem UUID: ********-****-****-****-************
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
        102400000, 214990848, 512000000, 550731776, 644972544, 1934917632,
        2560000000, 3855122432

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information:
done

デバイスのフォーマットは,
暗号化デバイス作成時のみ行うことを注意してください

マウント


mount -t ext4 /dev/mapper/cryptdata /mnt/raid1/

起動時に自動でマウント

再起動時にデバイスに再度ロックがかかるため,解錠およびマウントを起動時に自動で実施する設定を行います.

自動アンロック

/etc/crypttabに暗号化解錠の設定を記述します.

/etc/crypttab


cryptdata UUID=********-****-****-****-************ /root/crypt.key

自動マウント

自動マウント設定を/etc/fstabに記述します.

/etc/fstab


/dev/mapper/cryptdata /mnt/raid1   ext4    defaults            0   2  
よかったらシェアしてね!
目次