はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、データの暗号化を行うためのコマンド「cryptosetup」についてまとめていきたいと思います。
ディスクの暗号化とは?
ディスクの暗号化とは、ハードディスク等に保管するデータを暗号化し、セキュリティ品質を高めることができます。
私の場合は、バックアップデータ等のハードディスクを暗号化することでセキュリティを高めています。
暗号化には「dm-crypt」と呼ばれるブロックデバイスを暗号化する方法がよく利用されます。
これは、カーネル動作となる「device-mapper」を利用することになります。

暗号化後のファイルは「/dev/mapper」経由でのアクセスとなる
この「dm-crypt」を使ってディスクの暗号化を行うのが、今回学ぶ「cryptsetup」になります。


cryptsetupコマンドの使い方
この章では、cryptsetupコマンドの使い方をまとめていきたいと思います。
書式
#cryptsetup (オプション) (アクション) (引数)
オプションはあまり利用しないため、ここではアクションを紹介していきます。
アクション | 詳細 |
create (名前)(デバイス名) | (デバイス名)の暗号化マッピングを(名前)で作成 |
remove(名前) | (名前)の暗号化マッピングを削除 |
status(名前) | (名前)の暗号化マッピング状態を表示 |
ディスク暗号化方法
cryptsetupを使った暗号化手法は以下のフローで実施することになりそうです。
まず、以下のコマンドで暗号化マッピングの作成を行います。
#cryptsetup create (名前)(デバイス)
暗号化マッピングの作成後は、(名前)で作成したマッピングのファイルシステムを作成します。
#mkfs -t ext3 /dev/mapper/(名前)
最後に作成したファイルシステムのマウントを行います。
#mount -t ext3 /dev/mapper/(名前) /mnt/XXX
Linuxのファイルシステム暗号化手法
「dm-crypt」はブロックデバイスを暗号化するカーネル機能でしたが、暗号化手法はこれだけではありません。
Linuxのファイルシステムを暗号化する「LUKS」と呼ばれる手法があります。
この「LUKS」は異なるシステムやファイルシステムで利用できる特徴を持っています。
基本的に「cryptsetup」コマンドの「アクション」で指定するため、書式等に大きな違いはありません。
#cryptsetup (オプション) (アクション) (引数)
アクション | 詳細 |
luksFormat(デバイス名) | 指定したデバイスのLUKS化、パーティションの初期化 |
luksOpen(デバイス名)(名前) | LUKSパーティションを開く |
luksClose(名前) | LUKSパーティションを閉じる |
luksDump(デバイス名) | 指定デバイスの状態表示 |
LUKSによる暗号化方法の説明は、以下の記事にまとめているので、ご参照頂ければと思います。

実際に暗号化してみよう
ここまで暗号化の概要を理解したところでLinuxサーバ上で実際に試してみましょう。
今回は「daimaru_test」という名前を使って暗号化したいと思います。
Step1:暗号化状態の確認
各種コマンドを利用し暗号化前の状態を見ていきましょう。
daimaru@raspi:~ $ sudo ls /dev/mapper
control
上記より、「/dev/mapper」に「daimaru_test」がないため、暗号化されていないことがわかります。
daimaru@raspi:~ $ sudo fdisk -l
<snip>
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HD-PNFU3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: XXXXXXXX
Device Start End Sectors Size Type
/dev/sda1 2048 1953523711 1953521664 931.5G Linux filesystem
今回暗号化するデバイスは「/dev/sda」として認識されている1TBの外付けHDDを利用します。

Step2:暗号化マッピングの作成
暗号化前の状態を確認した後は、実際に暗号化を行っていきましょう。
daimaru@raspi:~ $ sudo cryptsetup create daimaru_test /dev/sda
WARNING: Device /dev/sda already contains a 'dos' partition signature.
WARNING!
========
Detected device signature(s) on /dev/sda. Proceeding further may damage existing data.
Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /dev/sda:<パスワード>
上記で「YES」を入力する場合、capital lettersと書いてある通り大文字で入力しましょう。
その後、パスワードを入力したら完了です。
マッピング後の状態を確認してみましょう。
daimaru@raspi:~ $ sudo cryptsetup status daimaru_test
/dev/mapper/daimaru_test is active.
type: PLAIN
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
key location: dm-crypt
device: /dev/sda
sector size: 512
offset: 0 sectors
size: 1953525168 sectors
mode: read/write
daimaru@raspi:~ $ sudo ls /dev/mapper
control daimaru_test
上記の通り、PLAINによる暗号化が行われており、「/dev/mapper」配下にも「daimaru_tesh」が作成されていることがわかります。
Step3:ファイルシステムの作成
暗号化マッピング後は、ファイルシステムを作成していきます。
daimaru@raspi:~ $ sudo mkfs -t ext4 /dev/mapper/daimaru_test
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 244190646 4k blocks and 61054976 inodes
Filesystem UUID: XXXXXX
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information: done
Step4:ファイルシステムのマウント
暗号化とファイルシステムの作成を行った後は、ハードディスクにアクセスするためにマウントします。
今回は、「/mnt/hdd1」にマウントしようと思います。
daimaru@raspi:~ $ mount | grep daimaru_test
daimaru@raspi:~ $ sudo mount -t ext4 /dev/mapper/daimaru_test /mnt/hdd1
daimaru@raspi:~ $ mount | grep daimaru_test
/dev/mapper/daimaru_test on /mnt/hdd1 type ext4 (rw,relatime)
これで暗号化の完了となります。

+αで覚えよう!cryptsetupの暗号化削除
「cryptsetup」で作成した暗号化の削除は簡単です。
まず、対象のディスク状況を確認します。
daimaru@raspi:~ $ sudo fdisk -l /dev/sda
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HD-PNFU3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2a516171
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 1953525167 1953523120 931.5G 83 Linux
daimaru@raspi:~ $ sudo fdisk -l /dev/mapper/daimaru_test
Disk /dev/mapper/daimaru_test: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
daimaru@raspi:~ $ sudo cryptsetup status daimaru_test
/dev/mapper/daimaru_test is active.
type: PLAIN
cipher: aes-cbc-essiv:sha256
keysize: 256 bits
key location: dm-crypt
device: /dev/sda
sector size: 512
offset: 0 sectors
size: 1953525168 sectors
mode: read/write
今回の対象は、暗号化名「daimaru_test」です。
これは「/dev/sda1」と「/dev/mapper/daimaru_test」が紐づけられています。
削除前の状態だと「daimaru_test」が「active」になっていることがわかります。
では、「cryptsetup remove」コマンドで削除してみましょう。
daimaru@raspi:~ $ sudo cryptsetup remove daimaru_test
daimaru@raspi:~ $ sudo cryptsetup status daimaru_test
/dev/mapper/daimaru_test is inactive.
daimaru@raspi:~ $ sudo fdisk -l /dev/mapper/daimaru_test
fdisk: cannot open /dev/mapper/daimaru_test: No such file or directory
daimaru@raspi:~ $ sudo fdisk -l /dev/sda
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: HD-PNFU3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x2a516171
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 1953525167 1953523120 931.5G 83 Linux
削除前と変わり、「active」から「inactive」に変更になりました。
最後に
今回は、セキュリティ品質向上のための「cryptsetup」、「dm-crypt」についてまとめてみました。