1. 概要

この記事では、Linuxでドライブまたはパーティションを暗号化する方法を学習します。 CryptsetupとVeraCryptを使用して、ドライブの暗号化と復号化のメカニズムについて説明します。

最後に、Linuxのインストールプロセス中にドライブを暗号化する方法を説明します。

2. Cryptsetup

Cryptsetup は、ディスク暗号化に使用できるツールです。 これは、Linuxカーネルの暗号化サブシステムであるDM-Cryptに基づいています。 ハードドライブを暗号化できるだけでなく、リムーバブルメディアやファイルも暗号化できます。

Cryptsetupは、LUKS(Linux Unified Key Setup)標準を使用します。 LUKSは、ディスク暗号化仕様を提供するように設計されており、幅広いディストリビューション間の互換性を促進します。したがって、パーティション暗号化にはLUKSを使用することをお勧めします。

2.1. インストール

cryptsetup パッケージは、ほとんどのLinuxディストリビューションの公式リポジトリにあり、yumまたはaptとともにインストールできます。

cryptsetup をインストールしたら、次のことを確認します。

$ cryptsetup --version
cryptsetup 2.3.6

2.2. 暗号化用のパーティションの作成

それでは、lsblkを使用して現在接続されているドライブを一覧表示することから始めましょう。

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 119.2G  0 disk 
├─sda1   8:1    0   256M  0 part /boot
├─sda2   8:2    0     4G  0 part [SWAP]
└─sda3   8:3    0   115G  0 part /
sdb      8:16   1  29.3G  0 disk 
└─sdb1   8:17   1  29.3G  0 part 

ご覧のとおり、 sda はプライマリハードドライブであり、sdbは外付けリムーバブルハードドライブです。 チュートリアルの残りの部分では、sdb1パーティションを使用します。 暗号化するパーティションからデータをバックアップしてください。そのパーティションをフォーマットするからです。

次に、ドライブを次のようにフォーマットします cryptsetup。 これにより、LUKS暗号化用のコンテナーが作成されます。

$ cryptsetup luksFormat --type luks1 /dev/sdb1
WARNING: Device /dev/sdb1 already contains a 'ntfs' superblock signature.

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

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

コマンドを分解してみましょう:

  • cryptsetupコマンドで暗号化プロセスを初期化しました
  • luksFormat フラグは、cryptsetupにLUKSのパーティションをフォーマットするように指示します
  • –type オプションは、LUKSの最初のバージョンを使用することを指定します
  • 最後に、LUKSコンテナになるパーティションを指定しました

コマンドはrootアクセスで実行する必要があることに注意してください。 最初は、操作後、データを回復できないという警告が表示されます。 プロンプトでYESを入力し、パスワードを設定して確認しました。 その後、暗号化用のパスワードを提供しました。 パスワードが強いほど、暗号化が向上します。さらに、 -y フラグを指定することで、警告を抑制することができます。

2.3. 暗号化されたボリュームのロック解除とマウント

ドライブはLUKSとしてフォーマットされているため、直接アクセスすることはできません。 そのため、 cryptsetup を使用して、実際のドライブのマッパーを作成する必要があります。 暗号化されたドライブを開きましょう:

$ cryptsetup -v luksOpen /dev/sdb1 my_drive
Enter passphrase for /dev/sdb1:
Key slot 0 unlocked.
Command successful.

コマンドオプションとパラメータを分類してみましょう。

  • -v オプションは、詳細な実行を有効にすることです
  • luksOpen オプションは、パーティションへのアクセスに使用できるデバイスマッパーを作成します
  • / dev / sdb1 はソース(LUKSボリューム)です
  • my_drive引数がターゲット名です

コマンドを実行すると、暗号化用に設定したパスワードの入力を求められます。 その後、 cryptsetup は、 / dev /mapperディレクトリにあるmy_driveという名前のマッパーデバイスを作成します。 ターゲット名には任意の名前を選択できます。

/ dev /mapperディレクトリの内容を見てみましょう。

$ ls -l /dev/mapper
lrwxrwxrwx root 7B Sat Sep  4 21:36:42 2021 <em>my_drive</em> ⇒ ../dm-1
crw------- root 0B Sat Sep  4 20:55:01 2021 control

ご覧のとおり、my_driveはデバイスマッパーへのシンボリックリンクです。 dm-1ファイルは、システムに接続されている実際のブロックデバイスにマップする仮想ファイルです。 my_driveを暗号化されたパーティションとして扱うことができます。 したがって、どこにでもマウントできます。

今のところ、ドライブにはファイルシステムがありません。 それでは、先に進んでファイルシステムを作成しましょう。

$ mkfs.vfat -F32 /dev/mapper/my_drive

これで、マウントしてデータをコピーできます。

$ mkdir -p /mnt/encrypted
$ mount /dev/mapper/my_drive /mnt/encrypted

lsblk を再度実行すると、my_driveのタイプを確認できます。

$ lsblk | grep my_drive
└─my_drive 9:7 0 29.3G 0 crypt

2.4. ボリュームのアンマウント

他のボリュームと同じように、ボリュームをアンマウントできます。

$ umount -R /dev/mapper/my_drive

ボリュームがアンマウントされましたが、カーネルメモリからマッピングとキーを削除するためにボリュームを閉じる必要があります。 そのために、LUKS固有のluksCloseコマンドを使用できます。

$ cryptsetup luksClose my_drive

3. VeraCrypt

コマンドラインの簡単な代替手段として、VeraCryptを使用できます。 VeraCryptは、Linux、macOS、FreeBSDなどの複数のプラットフォームで利用できます。 したがって、複数のプラットフォームを頻繁に切り替える場合は、使いやすい選択肢です。

VeraCryptには、グラフィカルインターフェイスとコマンドラインツールが付属しています。 このセクションでは、コマンドラインバージョンを使用します。

3.1. インストール

VeraCryptは、ディストリビューションの公式リポジトリで入手できるはずです。 yumまたはaptを使用して、veracryptパッケージをインストールできます。

インストールしたら、バージョンを確認して確認できます。

$ veracrypt --version
VeraCrypt 1.24-Update8

3.2. 暗号化されたボリュームの作成

voWhを作成する前に、ワンライナーコマンドを使用して暗号化されたパーティションを作成できますが、VeraCryptのテキストインターフェイスを使用する方が便利です。 –textまたは-tフラグをveracryptに渡すことで起動できます。

$ veracrypt --text --create
Volume type:
 1) Normal
 2) Hidden
Select [1]: 1

–createまたは-c フラグは、veracryptにボリュームを作成するように指示します。 ノーマルボリュームを使用します。 この次のステップでは、ボリュームパスを選択します。

Enter volume path: /dev/sdb1

ボリュームパスは、 fdisk-lまたはlsblkコマンドで取得できます。 この例では、sdb1パーティションを使用します。 次の手順で、アカウントのパスワードを入力します。

$ Enter your user password or administrator password:

次に、暗号化アルゴリズムを選択します。 デフォルトのAES暗号化を使用します。

Encryption Algorithm:
 1) AES
 2) Serpent
 3) Twofish
 4) Camellia
 5) Kuznyechik
 6) AES(Twofish)
 7) AES(Twofish(Serpent))
 8) Camellia(Kuznyechik)
 9) Camellia(Serpent)
 10) Kuznyechik(AES)
 11) Kuznyechik(Serpent(Camellia))
 12) Kuznyechik(Twofish)
 13) Serpent(AES)
 14) Serpent(Twofish(AES))
 15) Twofish(Serpent)
Select [1]:

Return を押すだけで、デフォルト値を選択できます。 ハッシュアルゴリズムには、デフォルトのSHA-512オプションを使用します。

Hash algorithm:
 1) SHA-512
 2) Whirlpool
 3) SHA-256
 4) Streebog
Select [1]:

次のステップでは、ボリュームのファイルシステムを選択します。

Filesystem:
 1) None
 2) FAT
 3) Linux Ext2
 4) Linux Ext3
 5) Linux Ext4
 6) NTFS
 7) exFAT
 8) Btrfs
Select [2]:

次のステップで、ボリュームのパスワードを設定します。

Enter password:
WARNING: Short passwords are easy to crack using brute force techniques!

We recommend choosing a password consisting of 20 or more characters. Are you sure you want to use a short password? (y=Yes/n=No) [No]: y

Re-enter password:

Enter PIM:

Enter keyfile path [none]:

y と入力すると、短いパスワードを確認できます。 PIMフィールドとキーファイルフィールドの場合は、Returnを押して空のままにします。 次のステップでは、暗号化の強度を高めるのに役立つ秘密のテキストを入力または貼り付けます。 この手順は、 / dev / urandom から読み取り、xclipで内容をコピーすることで簡単に実行できます。 別のターミナルウィンドウを開いて、次のコマンドを入力してみましょう。

$ cat /dev/urandom | head -c320 | xclip -selection c

これで、内容をフィールドに貼り付けることができます。

$ Please type at least 320 randomly chosen characters and then press Enter: ~5�Q0~>۲,�DVGf�2�'�xf|O��⋱e�_�O] ...

シークレットテキストを入力すると、VeraCryptがパーティションの作成を開始します。ボリュームのサイズによっては、しばらく時間がかかります

Done:   100.000%  Speed: 113 MiB/s  Left: 0 seconds
The hidden VeraCrypt volume has been successfully created and is ready for use.

ボリュームが作成されると、マウントする準備が整います。

3.3. ボリュームの復号化とマウント

veracrypt コマンドを使用して、暗号化されたボリュームをマウントできます。

$ veracrypt /dev/sdb1 /mnt/my_drive
Enter password for /dev/sdb1: 
Enter PIM for /dev/sdb1: 
Enter keyfile [none]: 
Protect hidden volume (if any)? (y=Yes/n=No) [No]: 

最初の引数はボリュームで、2番目の引数はマウントポイントを指定します。 パスワードの入力が必要になります。 その他のフィールドについては、この場合は必要ないため、デフォルト値としてReturnを押します。 これで、データをボリュームにコピーできます。

3.4. ボリュームのアンマウント

アンマウントの場合、 -dまたは–dismount フラグに続いて、ボリュームパスを渡すことができます。

$ veracrypt --dismount /dev/sdb1

4. Linuxインストール中のドライブの暗号化

rootまたはhomeパーティションを暗号化する最も簡単な方法は、ディストリビューションのインストール中です。 ライブインストールメディアで起動している間、ディスクのパーティション分割中にディスクを暗号化するオプションが表示されます。

たとえば、Ubuntuインストーラーでは、次の画像に示すように、[セキュリティのために新しいUbuntuインストールを暗号化する]オプションをオンにして暗号化を有効にすることができます。

次のステップでは、暗号化のパスコードを設定する必要があります。

キーを設定してUbuntuをインストールすると、Ubuntuを起動するときに、パーティションを復号化するためのキーを入力するように求められます。

暗号化の方法はLinuxディストリビューションによって少し異なる場合がありますが、ディストリビューションの公式インストールドキュメントをいつでも参照できます。

5. 結論

この記事では、ストレージドライブを暗号化する方法を学びました。 Cryptsetupを使用して、暗号化されたLUKSコンテナを作成しました。 その後、Cryptsetupの代わりにVeraCryptを使用しました。

最後に、Ubuntuのインストール中にインストールボリュームの暗号化について簡単に説明しました。