Windows XP/2000/2003 と Linux で利用できる無料のオープンソースディスク暗号化ソフトウェア
TrueCrypt の特徴:
- 仮想暗号化ディスクイメージファイルを作成することができ、通常のディスクとしてマウントすることができる。
- ハードディスクパーティションやUSBメモリースティック、フロッピーディスクなどのデバイスを暗号化することができる。
- “敵”があなたにパスワードを強制的に聞き出してきた場合に備えて、2レベルのもっともらしい否認能力を提供する:
- 隠しボリューム(詳細な情報は、ここで見つかるかもしれない)。
- TrueCrypt ボリュームは、確認されることがない。(TrueCrypt ボリュームは、ランダムなデータを区別されることができない)。
- 複数の暗号化アルゴリズム: AES-256、Blowfish(448-bit key)、CAST5、Serpent(256-bit key)、Triple DES と Twofish(256ビットのキー)。カスケードしたものもある(例えばAES-Twofish-Serpent)。
- 暗号化の基礎は、the Messes(E4M)2.02a のために1997年に考えられた。
ソフトウェアの特徴に関する更なる情報は、ドキュメンテーションを参照のこと。
TrueCrypt – Free Open-Source On-The-Fly Disk Encryption Software for Windows XP/2000 and Linux
Red Hat Enterprise Linux 4 のバイナリがない…
TrueCrypt – ダウンロードページ では、以下のバイナリコードが提供されている。
- Windows XP/2000/2003
- Fedora Core 4 x86
- OpenSuSE 10.0 x86
- SuSE 9.2 x86
- SuSE 9.3 x86
- Ubuntu 5.04 x86
- Ubuntu 5.10 x86
- Ubuntu 5.10 x86-64
・・・ RHEL4 用がないやんけ! ッテナンデヤネン┌(`Д´)ノ)゚∀゚ )
“Fedora Core 4 x86” のコードが流用できないかなぁ~と、、、
$ tar zxvf truecrypt-4.0-fedora-core-4-x86.tar.gz truecrypt-4.0/ truecrypt-4.0/truecrypt-4.0-0.i386.rpm truecrypt-4.0/Readme.txt truecrypt-4.0/License.txt $ cd truecrypt-4.0/ $ rpm -qps truecrypt-4.0-0.i386.rpm normal /lib/modules/2.6.11-1.1369_FC4/extra/truecrypt.ko normal /usr/bin/truecrypt normal /usr/share/man/man1/truecrypt.1.gz |
、、、あ、残念、ドライバがいるのね。さすがに FC4 と RHEL4 ではカーネルのバージョンが違うので無理だろう。 (´・ω・`)ガッカリ・・・
というわけで素直にソースからコンパイルすることにする。
Red Hat Enterprise Linux 4 でコンパイル
TrueCrypt – ダウンロードページ から “truecrypt-4.0-source-code.tar.gz” をダウンロードして、configure と言いたかったがなかったので、ドキュメント(Readme.txt)を読んでみる。
$ tar zxf truecrypt-4.0-source-code.tar.gz $ cd truecrypt-4.0/ $ less Readme.txt |
Instructions for Building TrueCrypt for Linux: ———————————————- To build TrueCrypt execute the following commands: cd Linux The build script will first verify requirements for building TrueCrypt. |
ふむふむ、これを見る限り、Linux ディレクトリで build.sh を動かせばよいらしい。
$ cd Linux/ $ ./build.sh Checking build requirements… Error: Administrator (root) privileges required |
root じゃないとダメぽ。
# ./build.sh Checking build requirements… Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: |
む、カーネルソースがいるらしい。 RHEL4 では、”/usr/src/kernels/2.6.9-22.0.1.EL-i686″かな?
Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /usr/src/kernels/2.6.9-22.0.1.EL-i686 : (コンパイル中、、、省略) : make[2]: *** [/home/—–/src/truecrypt-4.0/Linux/Kernel/Dm-target.o] Error 1 make[1]: *** [_module_/home/—–/src/truecrypt-4.0/Linux/Kernel] Error 2 make: *** [truecrypt] Error 2 Error: Failed to build kernel module |
やはりそう簡単にはコンパイルできんらしい。世の中そんなに甘くないということか。 ( ゚Д゚)マンドクセー
エラーログからつぶしていくか、、、
Building kernel module… /home/—–/src/truecrypt-4.0/Linux/Kernel/Dm-target.c:16:16: dm.h: No such file or directory |
ってのがまず目に付くね。”dm.h”とはなんぞや?わからないので、Google様に聞いてみよう。
“linux-2.5.72/drivers/md/dm.h”、”linux-2.6.6-rc2-udm1-original/drivers/md/dm.h”、、、ふむふむ、どうも Linux カーネルソースに含まれているらしい。
僕の Linux には入ってないのかな?
find /usr/src/kernels/2.6.9-22.0.1.EL-i686 -name dm.h find /usr/include -name dm.h |
あ、ないね。。。どうして?
あ!!そういえば、FC3 以降は、kernel-source がなくなった関係で、/usr/src/kernels は役立たずだったっけな? RHEL4 で kernel をいぢくる を参考にちゃんとしたカーネルソースを呼び出す。
$ rpm -Uvh kernel-2.6.9-22.0.1.EL.src.rpm $ cd /home/—–/src/rpms/SPEC $ rpmbuild -bp –target i686 kernel-2.6.spec |
これで、/home/—–/src/rpms/BUILD にカーネルソースが展開される。
※ ここでは利便上、一般ユーザーの権限で rpmbuild の設定がしてあるので、/usr/src/redhat は使わない。
今度は、/usr/src/kernels/2.6.9-22.0.1.EL-i686 ではなく、/home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 を指定してみよう。
$ cd /home/—–/src/truecrypt-4.0/Linux # ./build.sh Checking build requirements… Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 : (コンパイル中、、、省略) : make[2]: *** [/home/—–/src/truecrypt-4.0/Linux/Kernel/../../Crypto/Aescrypt.o] Error 1 make[1]: *** [_module_/home/—–/src/truecrypt-4.0/Linux/Kernel] Error 2 make: *** [truecrypt] Error 2 Error: Failed to build kernel module |
むむむ?頑固者だなぁ?
Building kernel module… In file included from /home/—–/src/truecrypt-4.0/Linux/Kernel/../../Crypto/Aesopt.h:159, from /home/—–/src/truecrypt-4.0/Linux/Kernel/../../Crypto/Aescrypt.c:38: /home/—–/src/truecrypt-4.0/Linux/Kernel/../../Common/Endian.h:22:29: asm/byteorder.h: No such file or directory |
これかな? “Aescrypt.c” → “Aesopt.h” → “Endian.h” → “asm/byteorder.h” って連鎖が続いてるんだけど、”asm/byteorder.h” がねーって言ってる。
$ find / home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 -name byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-x86_64/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-v850/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-sparc/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-sh64/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-parisc/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-s390/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-sparc64/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-sh/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-mips/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-i386/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-arm/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-ppc64/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-alpha/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-um/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-h8300/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-m68knommu/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-arm26/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-ppc/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-m32r/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-m68k/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-ia64/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-cris/arch-v10/byteorder.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/asm-cris/byteorder.h |
あーほんとだー、”asm-*” ってディレクトリはあるけど、肝心の “asm/”がない!
ないものは作ってしまえ!! おそらく i686 環境で必要なのは、”asm-i386″ だろう。
$ cd /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/ $ ln -s asm-i386 asm |
$ cd /home/—–/src/truecrypt-4.0/Linux # ./build.sh Checking build requirements… Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 : (コンパイル中、、、省略) : make[2]: *** [/home/—–/src/truecrypt-4.0/Linux/Kernel/Dm-target.o] Error 1 make[1]: *** [_module_/home/—–/src/truecrypt-4.0/Linux/Kernel] Error 2 make: *** [truecrypt] Error 2 Error: Failed to build kernel module |
まだ反抗期らしい。
Building kernel module… /home/—–/src/truecrypt-4.0/Linux/Kernel/Dm-target.c:13:27: linux/version.h: No such file or directory |
今度は、”version.h” か?
$ find /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 -name version.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/arch/i386/math-emu/version.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/linux/dvb/version.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/sound/version.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/pcmcia/version.h |
ん~なんかちょっと違う気がするぞ。
$ find /usr/src/kernels/2.6.9-22.0.1.EL-i686 -name version.h /usr/src/kernels/2.6.9-22.0.1.EL-i686/include/linux/dvb/version.h /usr/src/kernels/2.6.9-22.0.1.EL-i686/include/linux/version.h /usr/src/kernels/2.6.9-22.0.1.EL-i686/include/sound/version.h /usr/src/kernels/2.6.9-22.0.1.EL-i686/include/pcmcia/version.h |
おっ!これだろう!!ないものはコピーしてしまえ!
$ cp /usr/src/kernels/2.6.9-22.0.1.EL-i686/include/linux/version.h /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/include/linux/ |
# ./build.sh Checking build requirements… Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 make[2]: *** [__modpost] Error 127 make[1]: *** [modules] Error 2 make: *** [truecrypt] Error 2 Error: Failed to build kernel module |
はふ~、まだダメか。
Building kernel module… /bin/sh: scripts/mod/modpost: No such file or directory |
次は “modpost” か。。。
$ find /home/shinago/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 -name modpost $ find /usr/src/kernels/2.6.9-22.0.1.EL-i686 -name modpost |
はい、これもコピー決定!
$ cp /usr/src/kernels/2.6.9-22.0.1.EL-i686/scripts/mod/modpost /home/shinago/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9/scripts/mod/ |
# ./build.sh Checking build requirements… Linux kernel (2.6.9-22.EL) source directory [/usr/src/linux]: /home/—–/src/rpms/BUILD/kernel-2.6.9/linux-2.6.9 Building kernel module… Done. Building truecrypt… Done. |
ふぅぅぅ~、やっとコンパイルできたよ。 (≧∇≦)b
Red Hat Enterprise Linux 4 でインストール
さてと、、、インストール方法は?っと。
$ cd .. $ less Readme.txt |
Installing TrueCrypt: ——————— To build and install TrueCrypt, execute the following commands: cd Linux The installation script will first verify requirements for running TrueCrypt. Kernel/truecrypt.ko |
Linux ディレクトリで install.sh を実行するだけですか?
# ./install.sh Checking installation requirements… Error: modprobe or rmmod not found. TrueCrypt requires kernel module tools. |
sbin に PATH がとおってないといけないみたいだな。
$ PATH=$PATH:/sbin:/usr/sbin # ./install.sh Checking installation requirements… Testing truecrypt… Done. Install binaries to [/usr/local/bin]: /usr/local/truecrypt-4.0/bin |
あー先に、インストールしたいディレクトリ作っておかないとだめぽ。
(利便上、/usr/local/truecrypt-4.0 にインストールしたい)
# mkdir -p /usr/local/truecrypt-4.0/bin # ./install.sh Checking installation requirements… Testing truecrypt… Done. Install binaries to [/usr/local/bin]: /usr/local/truecrypt-4.0/bin |
甘かった。。。
# mkdir -p /usr/local/truecrypt-4.0/man/man1 # ./install.sh Checking installation requirements… Testing truecrypt… Done. Install binaries to [/usr/local/bin]: /usr/local/truecrypt-4.0/bin |
おお~。できたぽ。
あとは、利便上の処理をちょこっと。
$ cd /usr/local/ # ln -s truecrypt-4.0 truecrypt # echo << EOF >> /etc/man.config > # truecrypt > MANPATH /usr/local/truecrypt/man > MANPATH_MAP /usr/local/truecrypt/bin /usr/local/truecrypt/man > EOF |
Red Hat Enterprise Linux 4 で使ってみる
どうやって使うんだ?GUIなんてあるわけねーよな?
$ man truecrypt |
TRUECRYPT(1) User Commands TRUECRYPT(1)
NAME SYNOPSIS DESCRIPTION OPTIONS Open a TrueCrypt volume specified by VOLUME_PATH and map it as -d, –dismount [MAPPED_VOLUME] Dismount and unmap mapped volumes. If MAPPED_VOLUME is not -l, –list [MAPPED_VOLUME] Display a list of mapped volumes. If MAPPED_VOLUME is not spec- MAPPED_VOLUME Specifies a mapped or mounted volume. One of the following 1) Path to the encrypted TrueCrypt volume. 2) Mount directory of the volume’s filesystem (if mounted). 3) Device number of the mapped volume. 4) Device name of the mapped volume. –device-number N Use device number N when mapping a volume as a block device –display-password Display password characters while typing. –filesystem TYPE Filesystem type to mount. The TYPE argument is passed to -h, –help Display help information. -k, –keyfile FILE | DIRECTORY Use specified keyfile to open a volume to be mapped. When a -K, –keyfile-protected FILE | DIRECTORY Use specified keyfile to open a hidden volume to be protected. –mount-options OPTIONS Filesystem mount options. The OPTIONS argument is passed to -p, –password PASSWORD Use specified password to open a volume. Additional passwords –password-tries NUMBER Prompt NUMBER of times for a password until the correct pass- -P, –protect-hidden Write-protect a hidden volume when mapping an outer volume. -r, –read-only Map and/or mount a volume as read-only. Write operations to the –test Test all internal algorithms used in the process of encryption –update-time Do not preserve access and modification timestamps of volume -v, –verbose Enable verbose output. Multiple -v options can be specified to -V, –version Display version information. EXAMPLES Map a volume /root/volume.tc and mount its filesystem at truecrypt -d Dismount and unmap all mapped volumes. truecrypt -d /root/volume.tc Dismount and unmap a volume /root/volume.tc. truecrypt -d /mnt/tc Dismount and unmap a volume mounted at /mnt/tc. truecrypt -vl Display a detailed list of all mapped volumes. truecrypt –device-number=1 /dev/hdc1 && mkfs /dev/mapper/truecrypt1 Map a volume /dev/hdc1 and create a new filesystem on it. truecrypt -P /dev/hdc1 /mnt/tc Map and mount outer volume /dev/hdc1 and protect hidden volume truecrypt -p “” -p “” -k key1 -k key2 -K key_hidden -P volume.tc Map outer volume ./volume.tc and protect hidden volume withi DIAGNOSTICS REPORTING BUGS COPYRIGHT SEE ALSO truecrypt 4.0 October 2005 TRUECRYPT(1) |
なるほど。truecrypt [OPTIONS] VOLUME_PATH [MOUNT_DIRECTORY] だな。
では、Windows であらかじめ暗号化した FAT の USB メモリーを挿してっと。プスッ。
(NTFS はそもそも論、Linux でマウントできないので、Windows ⇔ Linux の互換性を保とうと思うなら、FAT を使う必要があるので注意。)
$ mkdir usb-crypt # /usr/local/truecrypt/bin/truecrypt /dev/sdb usb-crypt/ Enter password for ‘/dev/sdb’: (※パスワードを入力) $ ls tmp/ :(ないしょ) |
以上、非常に簡単だな。(/dev/sd* は挿した順番によって毎回変わるので、適時変更が必要。)
unmount は、-d オプションで VOLUME_PATH を指定する。
# /usr/local/truecrypt/bin/truecrypt -d /dev/sdb |
(mount と違い、MOUNT_DIRECTORY でない点に注意。)
とりあえず、僕の使用目的は、Windows ⇔ Linux で USB メモリを使って、安全にデータを転送することにあるので、以上。