VeraCrypt
TrueCrypt はフリーでオープンソースのオンザフライ暗号化 (OTFE) プログラムです。TrueCrypt の機能として以下があります:
- 実際のディスクとしてマウントできる仮想的な暗号化ディスク。
- ハードディスクパーティションやストレージデバイス/メディアの全てを暗号化。
- ストレージ暗号化の初期化ベクトルを推測することができる CBC モードよりも安全な LRW モードを全ての暗号化アルゴリズムで使用。
- 通常の"外殻"の暗号化ボリュームの中に"隠しボリューム"を作成可能。パスフレーズやキーファイルが漏れない限り、隠しボリュームをランダムなデータの中から発見するのは不可能。
TrueCrypt と他のディスク暗号化ソリューションの詳しい比較はディスク暗号化#比較表を見て下さい。
目次
インストール
truecrypt パッケージをインストールしてください。linux 以外のカーネルを使っている場合は、適当なカーネルモジュールもインストールします。
truecrypt を使って仮想ファイルシステム (例: ファイル) を暗号化する場合は、truecrypt コマンドを実行したときに自動でモジュールがロードされます。
truecrypt を使って物理デバイス (例: ハードディスクや usb ドライブ) を暗号化する場合は、ブートシーケンスの間にモジュールをロードするようにしてください:
/etc/modules-load.d/
にモジュールを追加:
# tee /etc/modules-load.d/truecrypt.conf <<< "truecrypt"
cryptsetup を使って TrueCrypt コンテナにアクセス
バージョン 1.6 から、cryptsetup は TrueCrypt と VeraCrypt のコンテナをネイティブで開けるようになっており、truecrypt や veracrypt パッケージを必要としません。cryptsetup でコンテナを開くには、次のコマンドを実行してください:
# cryptsetup --type tcrypt open container-to-mount container-name
container-to-mount
を開きたい /dev
下のデバイスファイルやファイルのパスに置き換えてください。コンテナが開かれると /dev/mapper/container-name
というデバイスが新しく認識され、通常のデバイスと同じように mount
できるようになります。
VeraCrypt コンテナをマウントしたいときは、--type tcrypt
に加えて --veracrypt
オプションを使ってください。カスタム Personal Iteration Multiplier (PIM) を使用する場合、--veracrypt-query-pim
オプションを使ってください。
キーファイルを使用する場合、--key-file
オプションを使ってファイルを指定してください。隠しボリュームを開く場合は --tcrypt-hidden
オプションを使ってください。システムモードで暗号kパされたパーティションあるいはデバイスを開くには --tcrypt-system
オプションを使ってください。
サポートされているオプションなどの詳細は cryptsetup(8) を見て下さい。
/etc/crypttab を使って自動マウント
バージョン 206 から、systemd は /etc/crypttab
を使用して起動時に TrueCrypt コンテナを (自動的に) マウントすることをサポートしています。
以下のセットアップでは /mnt/truecrypt-volume
にアクセスしたら systemd によって自動的にシステム暗号化モードで /dev/sda2
がマウントされます。ボリュームを開くためのパスフレーズは /etc/volume.password
に記述します。自動マウントを使用するには /etc/fstab
に指定するデバイスファイルは /dev/mapper/
のものでなくてはなりません。/dev/disk/by-uuid/
などは使えません。以下のように /dev/disk/
のデバイスファイル名を使うことで /etc/crypttab
の中で暗号化ボリュームを問題なく識別できます:
/etc/crypttab
truecrypt-volume /dev/sda2 /etc/volume.password tcrypt-system,noauto
標準の truecrypt ボリュームの場合、tcrypt-system の代わりに tcrypt を使ってください。隠しボリュームの場合、tcrypt-hidden を使ってください。
/etc/fstab
/dev/mapper/truecrypt-volume /mnt/truecrypt-volume auto noauto,x-systemd.automount 0 0
auto のかわりに直接、ファイルシステムやマウントオプションを指定することもできます。NTFS を通常ユーザーでマウントする場合などで有用です。
サポートされているオプションなどの詳細は crypttab(5) を参照してください。
ファイルを仮想ボリュームとして暗号化
以下では仮想ファイルシステムとして扱えるファイルを作成します。ファイルをマウントすれば暗号化ファイルの中にファイルを保存することが可能です。口座の情報やパスワードなど機密情報をシングルファイルに保存して Linux, Windows, macOS などからアクセスできるようにしたい場合に有用です。
新しい truecrypt ファイルをインタラクティブに作成するには、ターミナルに以下のコマンドを入力:
# truecrypt -t -c
指示に従ってファイルを作成できます。設定がよくわからない場合はデフォルトの値を使ってください:
Volume type: 1) Normal 2) Hidden Select [1]: 1 Enter file or device path for new volume: /home/user/EncryptedFile.tc Enter volume size (bytes - size/sizeK/sizeM/sizeG): 32M Encryption algorithm: 1) AES 2) Blowfish 3) CAST5 4) Serpent 5) Triple DES 6) Twofish 7) AES-Twofish 8) AES-Twofish-Serpent 9) Serpent-AES 10) Serpent-Twofish-AES 11) Twofish-Serpent Select [1]: 1 Hash algorithm: 1) RIPEMD-160 2) SHA-1 3) Whirlpool Select [1]: 1 Filesystem: 1) None 2) FAT 3) Linux Ext2 4) Linux Ext3 5) Linux Ext4 Select [2]: 2 Enter password for new volume '/home/user/EncryptedFile.tc': ***************************** Re-enter password: ***************************** Enter keyfile path [none]: Please type at least 320 randomly chosen characters and then press Enter: Done: 32.00 MB Speed: 10.76 MB/s Left: 0:00:00 Volume created.
新しい暗号化ファイルは既存のディレクトリにマウントできます:
# truecrypt -t /home/user/EncryptedFile.tc /home/user/EncryptedFileFolder
マウントしたら、通常のディレクトリと同じように暗号化ディレクトリの中に新しいファイルをコピー・作成できます。再度暗号化するにはディレクトリをアンマウントします:
# truecrypt -t -d
上記のコマンドは管理者権限を必要とします。アンマウントしたら暗号化されたファイルがディレクトリから消えているかどうか確認してください (重要でないデータから試してみると良いでしょう)。
物理ボリュームの暗号化
キーファイルを使いたい場合は、次のコマンドでファイルを作成します:
# truecrypt --create-keyfile /etc/disk.key
デフォルトでは、ボリュームを解錠するにはパスフレーズとキーの両方が必要になります。
/dev/sda1
デバイスに新しいボリュームを作成:
# truecrypt --volume-type=normal -c /dev/sda1
ボリュームを /dev/mapper/truecrypt1
にマップ:
# truecrypt -N 1 /dev/sda1
上記のコマンドが使えない場合は次のコマンドでボリュームをマップしてみてください:
# truecrypt --filesystem=none --slot=1 /dev/sda1
お好きなファイルシステムを選択して、通常通りにディスクをフォーマットします。ただしパスには /dev/mapper/truecrypt1
を使います。例えば ext4 の場合:
# mkfs.ext4 /dev/mapper/truecrypt1
ボリュームをマウント:
# mount /dev/mapper/truecrypt1 /media/disk
ボリュームをマップしてマウント:
# truecrypt /dev/sda1 /media/disk
ボリュームをアンマウントしてマップを解除:
# truecrypt -d /dev/sda1
隠しボリュームの作成
先に、物理ボリュームの暗号化で説明されているように、通常の外殻ボリュームを作成してください。
外殻ボリュームを /dev/mapper/truecrypt1
にマップ:
# truecrypt -N 1 /dev/sda1
外殻ボリュームの空き領域に truecrypt の隠しボリュームを作成:
# truecrypt --type hidden -c /dev/sda1
外殻ボリュームとは異なるパスフレーズまたはキーファイルを使う必要があります。
外殻 truecrypt ボリュームをアンマップして隠しボリュームをマップ:
# truecrypt -d /dev/sda1 # truecrypt -N 1 /dev/sda1
隠しボリューム用のパスフレーズを使ってください。TrueCrypt は自動的にパスフレーズを選び取ります。
ファイルシステムを作成してマウント:
# mkfs.ext4 /dev/mapper/truecrypt1 # mount /dev/mapper/truecrypt1 /media/disk
書き込み保護を有効にして外殻ボリュームをマップ・マウント:
# truecrypt -P /dev/sda1 /media/disk
fstab でボリュームをマウント
まず最初に、fstab でマウントを処理するスクリプトを書く必要があります。以下を /usr/bin/mount.truecrypt
として保存してください:
#!/bin/sh DEV="$1" MNTPT="$2" OPTIONS="" TCOPTIONS="" shift 3 IFS=',' for arg in $*; do case "$arg" in system) TCOPTIONS=(${TCOPTIONS[*]} --m=system);; fs*) TCOPTIONS=(${TCOPTIONS[*]} --filesystem=${arg#*=});; keyfiles*) TCOPTIONS=(${TCOPTIONS[*]} --keyfiles=${arg#*=});; password*) TCOPTIONS=(${TCOPTIONS[*]} --password=${arg#*=}) && echo "password triggered" ;; protect-hidden*) TCOPTIONS=(${TCOPTIONS[*]} --protect-hidden=${arg#*=});; *) OPTIONS="${OPTIONS}${arg},";; esac done /bin/truecrypt --text --non-interactive ${DEV} ${MNTPT} ${TCOPTIONS[*]} --fs-options="${OPTIONS%,*}"
ファイルに実行可能属性を付与してください:
# chmod +x /usr/bin/mount.truecrypt
最後に、fstab に以下のようにデバイスを追加してください:
/dev/sdb3 /mnt truecrypt fs=vfat,defaults 0 0
通常ユーザーでボリュームをマウント
TrueCrypt を使うには root 権限が必要です。このセクションでは通常ユーザーにボリュームへの書き込み権限を与えて、通常ユーザーが TrueCrypt を使えるようにする方法を説明します。
以下のどちらの方法でも sudo が必要になります。先に進む前に sudo を設定するようにしてください。
方法 1: truecrypt グループを追加
truecrypt という名前の新しいグループを作成して必要な権限を与えます。グループに属しているユーザーは TrueCrypt を使えるようになります。
# groupadd truecrypt
sudo の設定を編集:
# visudo
sudo の設定ファイルの末尾に以下の行を追加:
# Users in the truecrypt group are allowed to run TrueCrypt as root. %truecrypt ALL=(root) NOPASSWD:/usr/bin/truecrypt
使用するユーザーを truecrypt グループに追加:
# gpasswd -M first_user,second_user,etc truecrypt
その後、以下のコマンドでデバイスをマウントすることができます:
$ truecrypt --mount /path/to/device /path/to/mountpoint
デフォルトのマウントポイントは /media/truecrypt1
です。通常、--filesystem
フラグを使ってデバイスのファイルシステムを明示的に指定する必要はありません。
truecrypt にはパーミッションマスクを指定すると良いでしょう。そうしないと、マウントしたデバイスの全てのファイルが実行可能になってしまいます。例:
$ truecrypt --fs-options=users,uid=$(id -u),gid=$(id -g),fmask=0113,dmask=0002 --mount /PATH/TO/DEVICE /PATH/TO/MOUNTPOINT
上記のコマンドは bash の設定ファイル (~/.bashrc
) などにエイリアスとして追加できます:
alias tc1='truecrypt --fs-options=users,uid=$(id -u),gid=$(id -g),fmask=0113,dmask=0002 --mount /path/to/device"" /path/to/mountpoint'
指定したデバイスをマウントするには、通常ユーザーで以下のコマンドを使用します:
$ tc1
方法 2: sudo の簡易化
パスワードを入力せずに truecrypt を実行できるようにしたい場合、以下のコマンドを実行:
# visudo
そして以下を追加:
USERNAME ALL = (root) NOPASSWD:/usr/bin/truecrypt
もしくは wheel グループを使用する場合:
%wheel ALL = (root) NOPASSWD:/usr/bin/truecrypt
通常ユーザーのパーミッションが困る場合、truecrypt のマウントコマンドに -u
フラグを追加してください。例:
$ truecrypt -u /home/user/EncryptedFile.tc /home/user/EncryptedFileFolder
ログイン時に自動マウント
スタートアップに以下を追加:
truecrypt /home/user/Encrypted File.tc /home/user/Encrypted File Folder <<EOF password EOF
-p
スイッチは使わないでください。ps などのツールを使ってプロセスの名前からパスワードを確認できてしまいます [2]。
The most recent truecrypt has a couple of followup questions. If you have expect installed, this will work (assuming no keyfile and no desire to protect hidden volume), saved to a file with root-only perms called from /etc/rc.local:
#! /bin/bash expect << EOF spawn /usr/bin/truecrypt ''/path/to/EncryptedFile'' ''/mount/point'' expect "Enter password" send "volume password\n" expect "Enter keyfile" send "\n" expect "Protect hidden volume" send "\n" expect eof; EOF
上記はパスワードを普通に入力するのと比べるとセキュアでありませんが、TrueCrypt のファイルシステムが共有ストレージなどにあるときに、暗号化されないままの状態にするよりはましです。
(シャットダウン時に) ボリュームを安全にアンマウントしてマップを解除
以下のコマンドで指定したデバイスをアンマウントできます:
# truecrypt -d /path/to/mountpoint
全ての truecrypt ボリュームをアンマウントしたい場合はパスを省略してください。
シャットダウン時に自動的に truecrypt デバイスをアンマウントさせたい場合、以下を /etc/rc.local.shutdown
ファイルに追加:
if (/usr/bin/truecrypt --text --list) then { /usr/bin/truecrypt -d sleep 3 } fi
sleep コマンドは取り払ってもかまいません。実際にシャットダウンする前にアンマウントする猶予を与えているだけです。
エラー
TrueCrypt is already running
TrueCrypt の起動時に TrueCrypt is already running というメッセージボックスが表示される場合、ホームディレクトリに .TrueCrypt-lock-username という名前の隠しファイルが存在しないか確認してください (username はあなたのユーザー名に置き換えて下さい)。ファイルを削除して TrueCrypt を再起動してください。
Deleted stale lockfile
Truecrypt の起動後に "Delete stale lockfile [....]" というメッセージが表示される場合、GNOME のログアウト時に ID が一番小さい Truecrypt のプロセスを終了する必要があります。/etc/gdm/PostSession/Default
を編集して exit 0 の前に以下の行を追加してください:
kill $(ps -ef | grep truecrypt | tr -s ' ' | cut -d ' ' -f 2)
ユニコードのファイル/フォルダ名の問題
NTFS
(暗号化されていない NTFS パーティションは問題なく扱えるのに) 名前にユニコード文字が含まれているファイルやフォルダが TrueCrypt の NTFS ボリュームで表示されない場合、最初に NTFS-3G ドライバーがインストールされているかどうか確認してください。そして以下のシンボリックリンクを root で作成してください:
# ln -s /sbin/mount.ntfs-3g /sbin/mount.ntfs
自動的に NTFS ボリュームで NTFS-3G ドライバーが使われるようになります。コンソールで以下のように指定するのと同じです:
# truecrypt --filesystem=ntfs-3g /path/to/volume
TrueCrypt の GUI (Settings > Preferences > Mount Options) で以下のオプションを設定できます:
rw,noatime
FAT
同じように、Windows で作成した FAT32 ボリュームは ISO 8859-1 ではなく Unicode が使われることがあります。UTF-8 を使用するには、マウントオプションを設定:
iocharset=utf8
もしくは、ボリュームをローカルにマウントする際に以下のように指定:
--fs-options=iocharset=utf8
linux-4.14.4 から [3]、デフォルトで UTF8 文字セットが有効になっているため、ISO 8859-1 エンコーディングを使ってボリュームをマウントするには以下のオプションが必要です:
--fs-options=utf8=no
アンマウントエラー (device mapper)
truecrypt のボリュームをアンマウントしようとすると "device-mapper: remove ioctl failed: Device or resource busy" とメッセージが表示される場合、解決方法は Setting > Preferences > System Integration > Kernel Service から次のボックスにチェックを入れて下さい:
Do not use kernel cryptographic services
マウントエラー (device mapper, truecrypt partition)
truecrypt ボリュームをマウントしようとすると、以下のようなメッセージが表示される場合:
Error: device-mapper: create ioctl failed: Device or resource busy Command failed
次を実行してください:
# cryptsetup remove /dev/mapper/truecrypt1
Failed to set up a loop device
TrueCrypt ボリュームを作成・マウントしようとすると "Failed to set up a loop device" というメッセージが表示される場合、最近カーネルをアップデートしたのに再起動していないのが原因です。再起動を行えばエラーはなくなるでしょう。
それでもエラーが消えない場合、loop がカーネルモジュールとしてロードされているか確認してください:
$ lsmod | grep loop
loop がロードされていない場合、modprobe loop
を実行した後に TrueCrypt のコマンドを実行してみてください。それで上手くいくときは、/etc/modules-load.d
のモジュールに loop を追加すると良いでしょう:
# tee /etc/modules-load.d/truecrypt.conf <<< "loop"
新しいバージョンのカーネルでは起動時にループデバイスが作成されません。ループデバイスが存在しないと、コンテナファイルのマウントに TrueCrypt が失敗します ("Failed to set up a loop device")。ただし最大数のループデバイス (通常は256個) が作成され、マウントができるようになります。
問題を回避するにはファイルをマウントする前にループデバイスを作成してください:
# mknod -m 0660 /dev/loop8 b 7 8
上記のコマンドで /dev/loop8
が作成されます。起動時にループデバイスを作成するには:
# echo "options loop max_loop=8" > /etc/modprobe.d/eightloop.conf
max_loop=8
は必要なデバイスの数に置き換えてください。
システムパーティションのパスワードに en_US キーマップが必要
Xorg を使っている場合、以下のコマンドでキーマップを一時的に変更できます:
# setxkbmap us
NTFS ボリュームで Permission denied
パーミッションに問題がないのに、ファイルシステムに変更を加えられない場合、NTFS-3G がインストールされていないのが原因のことがあります。NTFS を見て下さい。