TrueCrypt

提供: ArchWiki
2017年3月8日 (水) 21:34時点におけるKusakata (トーク | 投稿記録)による版 (同期)
ナビゲーションに移動 検索に移動

関連記事

警告:
  • 2014年5月から、TrueCrypt の開発は中止され もはやアップデートや修正は行われない ことになっています。dm-crypttcplay など他の暗号化プログラムあるいは TrueCrypt のフォークを使用するようにしてください。例えば VeraCrypt は活発に開発されており veracrypt パッケージでインストールできます。VeraCrypt のストレージフォーマットはバージョン 1.0f から TrueCrypt のストレージフォーマットと互換性を持つようになっています。現在 TrueCrypt プロジェクトは pure-privacy assocation が継承しています [1]。TrueCrypt のコードの監査については [2] を参照。
  • 2015年9月26日に TrueCrypt の Windows 版に深刻なセキュリティ問題が2つ発見されました: CVE-2015-7358 と CVE-2015-7359。Windows と Arch Linux で暗号化ボリュームを共有する場合は注意してください。詳しくは 12 を参照。

TrueCrypt はフリーでオープンソースのオンザフライ暗号化 (OTFE) プログラムです。TrueCrypt の機能として以下があります:

  • 実際のディスクとしてマウントできる仮想的な暗号化ディスク。
  • ハードディスクパーティションやストレージデバイス/メディアの全てを暗号化。
  • ストレージ暗号化の初期化ベクトルを推測することができる CBC モードよりも安全な LRW モードを全ての暗号化アルゴリズムで使用。
  • 通常の"外殻"の暗号化ボリュームの中に"隠しボリューム"を作成可能。パスフレーズやキーファイルが漏れない限り、隠しボリュームをランダムなデータの中から発見するのは不可能。

TrueCrypt と他のディスク暗号化ソリューションの詳しい比較はディスク暗号化#比較表を見て下さい。

インストール

ノート: 既存の TrueCrypt コンテナを開いてアクセスしたいときは cryptsetup を使用することを推奨します。新しい TrueCrypt コンテナは truecrypt で作成できます。

公式リポジトリから truecryptインストールしてください。linux 以外のカーネルを使っている場合は、適当なカーネルモジュールもインストールします。

truecrypt を使って仮想ファイルシステム (例: ファイル) を暗号化する場合は、truecrypt コマンドを実行したときに自動でモジュールがロードされます。

truecrypt を使って物理デバイス (例: ハードディスクや usb ドライブ) を暗号化する場合は、ブートシーケンスの間にモジュールをロードするようにしてください:

/etc/modules-load.d/ にモジュールを追加:

# tee /etc/modules-load.d/truecrypt.conf <<< "truecrypt"
ノート:
  • 上記の設定でうまくいかない場合、以下のように "loop" モジュールを追加することで動作します:
# tee /etc/modules-load.d/truecrypt.conf <<< "loop"
# modprobe loop
  • Arch の標準カーネルではモジュールのロードは必ずしも手動で行う必要はありません。ただし、カスタムカーネルを使用している場合は FUSEloop、および使用する暗号化アルゴリズム (例: AES, XTS, SHA512) を有効化する必要があります。既存の TrueCrypt コンテナにアクセスするだけなら TrueCrypt のインストールは不要です。

cryptsetup を使って TrueCrypt コンテナにアクセス

バージョン 1.6 から、cryptsetup は TrueCrypt コンテナをネイティブで開けるようになっており、truecrypt パッケージを必要としません。cryptsetup でコンテナを開くには、次のコマンドを実行してください:

$ cryptsetup --type tcrypt open container-to-mount container-name

container-to-mount を開きたい /dev 下のデバイスファイルやファイルのパスに置き換えてください。コンテナが開かれると /dev/mapper/container-name というデバイスが新しく認識され、通常のデバイスと同じように mount できるようになります。

キーファイルを使用する場合、--key-file オプションを使ってファイルを指定してください。隠しボリュームを開く場合は --tcrypt-hidden オプションを使ってください。システムモードで暗号kパされたパーティションあるいはデバイスを開くには --tcrypt-system オプションを使ってください。

サポートされているオプションなどの詳細は man cryptsetup を見て下さい。

/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 を通常ユーザーでマウントする場合などで有用です。

サポートされているオプションなどの詳細は man crypttab を参照してください。

ファイルを仮想ボリュームとして暗号化

以下では仮想ファイルシステムとして扱えるファイルを作成します。ファイルをマウントすれば暗号化ファイルの中にファイルを保存することが可能です。口座の情報やパスワードなど機密情報をシングルファイルに保存して 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  

ファイルシステム:

1) None
2) FAT
3) Linux Ext2
4) Linux Ext3
5) Linux Ext4

[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 は root 権限を必要とします。通常ユーザーでファイルを使いたい場合は通常ユーザーでボリュームをマウントを参照してください。

マウントしたら、通常のディレクトリと同じように暗号化ディレクトリの中に新しいファイルをコピー・作成できます。再度暗号化するにはディレクトリをアンマウントします:

$ truecrypt -t -d

上記のコマンドは管理者権限を必要とします。アンマウントしたら暗号化されたファイルがディレクトリから消えているかどうか確認してください (重要でないデータから試してみると良いでしょう)。

物理ボリュームの暗号化

ノート: グラフィカルインターフェイスで問題が起こる場合、-t フラグを使って CLI モードで起動してみてください。

キーファイルを使いたい場合は、次のコマンドでファイルを作成します:

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-mountAUR パッケージでもインストールできます。

通常ユーザーでボリュームをマウント

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 simplified

Simply enable desired user to run truecrypt without a password:

# visudo

Append the following:

USERNAME ALL = (root) NOPASSWD:/usr/bin/truecrypt

alternatively, if you make use of the wheel group:

%wheel ALL = (root) NOPASSWD:/usr/bin/truecrypt

If you have any difficulties with permissions as a normal user, just add the -u flag to the truecrypt mount command, for example:

$ truecrypt -u /home/user/EncryptedFile.tc /home/user/EncryptedFileFolder

ログイン時に自動マウント

Simply add:

$ truecrypt /home/user/Encrypted File.tc /home/user/Encrypted File Folder <<EOF
password
EOF

to your startup procedure. Do not use the -p switch, this method is more secure. Otherwise everyone can just look up the password via ps and similar tools, as it is in the process name! source

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

Of course, this isn't as secure as entering your password manually. But for some use cases, such as when your TrueCrypt filesystem is in a file on shared storage, it's better than being unencrypted.

(シャットダウン時に) ボリュームを安全にアンマウントしてマップを解除

以下のコマンドで指定したデバイスをアンマウントできます:

# 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

You can also leave away the sleep command, it is just to give the unmounting some time to complete before the actual shutdown.

エラー

TrueCrypt is already running

TrueCrypt の起動時に TrueCrypt is already running というメッセージボックスが表示される場合、ホームディレクトリに .TrueCrypt-lock-username という名前の隠しファイルが存在しないか確認してください (username はあなたのユーザー名に置き換えて下さい)。ファイルを削除して TrueCrypt を再起動してください。

Deleted stale lockfile

If you always get a message "Delete stale lockfile [....]" after starting Truecrypt, the Truecrypt process with the lowest ID has to be killed during Gnome log out. Edit /etc/gdm/PostSession/Default and add the following line before 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

That will cause TrueCrypt to automatically use this driver for NTFS volumes, having the same effect as the explicit use of

truecrypt --filesystem=ntfs-3g /path/to/volume

via the console.

One may also consider setting e.g.:

rw,noatime

amongst other options in the TrueCrypt GUI (Settings > Preferences > Mount Options).

FAT

Similarly, FAT32 volumes created using Windows may use Unicode rather than ISO 8859-1. In order to use UTF-8 globally, set the mount option:

iocharset=utf8

Alternatively, when mounting volumes locally use:

--fs-options=iocharset=utf8

アンマウントエラー (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"
ノート: As of udev 181-5, the loop device module is no longer auto-loaded, and the procedure described here is necessary.

With newer kernel versions there are no loop devices created at startup. If there are no loop devices the first time mounting a container file, TrueCrypt fails ("Failed to set up a loop device") but also creates the maximum number of loop devices (usually 256), mounting should now work.

To avoid this you can create a loop device before mounting a file:

# mknod -m 0660 /dev/loop8 b 7 8

This creates /dev/loop8. Or create some loop devices at startup:

# echo "options loop max_loop=8" > /etc/modprobe.d/eightloop.conf

Change max_loop=8 to the number of devices you need.

システムパーティションのパスワードに en_US キーマップが必要

If you are using Xorg (which you most likely are, should you not know what that is), use the following command to use US keymap until restart:

# setxkbmap us

NTFS ボリュームで Permission denied

パーミッションに問題がないのに、ファイルシステムに変更を加えられない場合、NTFS-3G がインストールされていないのが原因のことがあります。NTFS を見て下さい。

参照