Linux Tips

USBメモリに暗号化した仮想ドライブを作成するには

北浦訓行
2006/12/7

 USBフラッシュメモリ(以下USBメモリ)で大切なデータなどを持ち出す際、あらかじめデータを暗号化しておくと安心だ。ここでは「TrueCrypt」というソフトウェアを使い、USBメモリに暗号化した領域を作成してファイルを保存する方法を紹介する。

 TrueCrypt(http://www.truecrypt.org/)とは、ハードディスクやUSBメモリなどに仮想ドライブを作成して、その仮想ドライブへの読み書きする際に自動的に暗号化・復号するソフトウェアだ。TrueCryptで作成した仮想ドライブは、Linuxから見ると1つの大きなファイルとして認識される。そのファイルは、TrueCryptによりドライブとしてマウントでき、ファイルのコピーや変更、削除などが可能である。

 また、TrueCryptのもう1つの特長はWindowsとLinuxに対応していることである。作成した仮想ドライブは両OSで互換性があり、Windowsで作成した仮想ドライブをLinuxで読み書きすることが可能である。また、その逆も可能だ。

 それでは、Fedora Core 6(FC6)環境を例に、TrueCryptの利用方法を説明する。

 最初にTrueCryptのインストールだ。FC6の場合はカーネルソースをインストールしたうえで、ソースファイルからプログラムをビルドする必要がある。原稿執筆時点でのカーネルのバージョンは、2.6.18-1.2849.fc6である。将来的にはバージョンが変更されるので、バージョン番号に依存したファイル名などは、最新のものに置き換えることをお勧めする。また、カーネルがバージョンアップするとTrueCryptも再ビルドする必要があるので注意していただきたい。

 TrueCryptをビルドするにはmakeやgcc、ld、stripといった開発ツールが必要となる。これらのツールをインストールしていない場合は、[アプリケーション]メニューの[ソフトウェアの追加/削除]を起動して、[開発]の[開発ツール]や[開発ライブラリ]をインストールする。

 次に、カーネルソースをインストールする。カーネルソースのインストールについては、Fedora Core 3でカーネルソースをインストールするにはを参照のこと。FC6での手順は以下のとおりだ。

# wget http://ftp.riken.jp/Linux/fedora/core/updates/6/SRPMS/kernel-2.6.18-1.2849.fc6.src.rpm
# rpm -ihv kernel-2.6.18-1.2849.fc6.src.rpm
# rpmbuild -bp --target i686 /usr/src/redhat/SPECS/kernel-2.6.spec
# mv /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i686 /usr/src
# ln -s /usr/src/linux-2.6.18.i686 /usr/src/linux

 カーネルソースのインストールが完了したら、TrueCryptのtarボールをダウンロードする(注)。TrueCryptのダウンロードページ(http://www.truecrypt.org/downloads.php)の[Select Linux distribution and hardware platform]リストから「Other (source code)」を選択して[Download]ボタンをクリックする。これで、TrueCryptのtarボールtruecrypt-4.2a-source-code.tar.gzがダウンロードされる。

注:TrueCryptのダウンロードページには、Fedora Core 5のRPMファイルなどが公開されているが(原稿執筆時点)、TrueCryptはカーネル依存のためFC6では使用できない。

$ tar zxf truecrypt-4.2a-source-code.tar.gz ←tarボールを展開
$ cd truecrypt-4.2a/Linux ←ソースファイルのディレクトリに移動
$ su
パスワード(P): ←rootのパスワードを入力
# PATH=$PATH:/sbin:/usr/sbin ←インストール用のパス設定を行う

 次に、/usr/src/linux/drivers/md/dm.hを以下のように修正する(注)。この修正を行わないと、FC6ではビルドに失敗してしまう。

注:ビルドが完了したら、元の状態に戻すことをお勧めする。

#define DM_NAME "device-mapper"
#define MSG_PREFIX "truecrypt: " ←追加
#define DM_MSG_PREFIX MSG_PREFIX ←追加
#define DMERR(f, arg...) printk(KERN_ERR DM_MSG_PREFIX ": " f "\n", ## arg) ←追加
#define DMWARN(f, arg...) printk(KERN_WARNING DM_MSG_PREFIX ": " f "\n", ## arg) ←追加
#define DMINFO(f, arg...) printk(KERN_INFO DM_MSG_PREFIX ": " f "\n", ## arg) ←追加
/* ←追加
#define DMERR(f, arg...) printk(KERN_ERR DM_NAME ": " DM_MSG_PREFIX ": " f "\n", ## arg)
#define DMWARN(f, arg...) printk(KERN_WARNING DM_NAME ": " DM_MSG_PREFIX ": " f "\n", ## a
rg)
#define DMINFO(f, arg...) printk(KERN_INFO DM_NAME ": " DM_MSG_PREFIX ": " f "\n", ## arg)
*/ ←追加

 修正が完了したら、以下のようにシェルスクリプトを実行してビルドを開始する。

# ./build.sh

 カーネルモジュールの作成が始まると、完了までかなりの時間がかかる。その間、画面には以下のようなメッセージが表示される。

Building internal kernel modules (may take a long time)...

 ビルドが完了したら、以下のようにシェルスクリプトを実行してインストールを行う。

# ./install.sh
Checking installation requirements...
Testing truecrypt... Done.

Install binaries to [/usr/bin]: ←[Enter]キーを押す
Install man page to [/usr/share/man]: ←[Enter]キーを押す
Install user guide and kernel module to [/usr/share/truecrypt]: ←[Enter]キーを押す
Allow non-admin users to run TrueCrypt [y/N]: y ←[y]を入力して[Enter]キーを押す

 無事にインストール作業が完了したら、以下のコマンドを実行しカーネルモジュールを読み込む。

# modprobe truecrypt
# lsmod | grep truecrypt ←読み込まれたかどうかを確認
truecrypt             161924  0
dm_mod                 61529  3 truecrypt,dm_mirror,dm_multipath

 ここから、実際の使用方法について説明する。

 TrueCryptを使用するには、最初に仮想ドライブ(ボリューム)を作成する必要がある。ここでは、/media/diskにマウントされたUSBメモリにvolume.tcという名前を付けてTrueCryptのボリュームを作成している。作成は対話式で行われるので、基本的に初期設定のままでも問題はない。

# truecrypt -c /media/disk/volume.tc
Volume type:
 1) Normal
 2) Hidden
Select [1]:  ←[Enter]キーを押す

Filesystem:
 1) FAT
 2) None
Select [1]:  ←[Enter]キーを押す

Enter volume size (bytes - size/sizeK/sizeM/sizeG): 50M ←ボリューム
のサイズを指定する


Hash algorithm:
 1) RIPEMD-160
 2) SHA-1
 3) Whirlpool
Select [1]:  ←[Enter]キーを押す

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]:  ←[Enter]キーを押す

Enter password for new volume '/media/disk/volume.tc':  ←ボリューム
のパスワードを入力する

Re-enter password:  ←パスワードを再入力する

Enter keyfile path [none]:  ←[Enter]キーを押す

TrueCrypt will now collect random data.

Is your mouse connected directly to computer where TrueCrypt is
 running? [Y/n]: Y ←[y]を入力して[Enter]キーを押す

 しばらくすると、ボリュームの作成が完了する。Linuxから見ると、TrueCryptのボリュームは以下のように1つの大きなファイルとして認識される。

$ ls -l /media/disk/volume.tc
-rwxr-xr-x 1 nori root 52428800 11月 27 15:05 /media/disk/volume.tc

 作成したTrueCryptのボリュームを使用するには、ハードディスクやUSBメモリと同様にマウント作業が必要となる。マウントにはtruecryptコマンドを使用する。以下の例では/mntをマウントポイントにしているが、実際はその下に専用のマウントポイントを用意する方が望ましい。

# truecrypt /media/disk/volume.tc /mnt
Enter password for '/media/disk/volume.tc': ←パスワードを入力
# ls -l /mnt
合計 699
-rwxr-xr-x 1 root root 715268 7月 3 10:39 TrueCrypt User Guide.pdf

 TrueCryptのボリュームに対する読み書きは、/mntに対して行う。ユーザーは暗号化などを意識せずにcpやmvといったコマンドが使える。

 また、アンマウントする場合は以下のように-dオプションを指定する。

# truecrypt -d /mnt

Linux Tips Index



 Linux Squareフォーラム Linux Tipsカテゴリ別インデックス
インストール/RPM ブート/ブートローダ
ファイル操作 環境設定
ユーザー管理 コンソール/ターミナル
X Window System セキュリティ
トラブルシューティング 他OS関係
ネットワーク ハードウェア
Webサーバ Samba
GNOME KDE
OpenOffice.org エミュレータ
ソフトウェア そのほか/FAQ
全Tips公開順インデックス Linux Tips月間ランキング
Linux Squareフォーラム全記事インデックス

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します


Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Linux & OSS 記事ランキング

本日 月間