Loopback Encrypted Filesystem HOWTO Copyright by Ryan T. Rhea, rhear@cs.winthrop.edu v1.1, 29 November 1999 Linux JF Project JF@linux.or.jp v1.1, 30 November 1999 この文書は,ユーザがマウントしたときに,その内容を動的かつ透過的に暗号 化するファイルシステムの設定方法と使用方法を説明します.このファイルシ ステムは通常ファイルの中に置かれるので,隠しファイルにしたり目立たない 名前を付けたりして,ほとんど見つからないようにすることができます.この 方法により,データを非常に安全に保持することが可能です. ______________________________________________________________________ 目次 1. 始める前に 2. はじめに 3. 手順のまとめ 4. 詳細な手順 5. 日本語訳について ______________________________________________________________________ 1. 始める前に この処理を行うにはカーネルのソースコード,カーネルのコンパイルに関する 知識,それからかなりの根気が必要です.起動ディスクを用意しておくことを 筆者はお勧めします.また,重要なデータを暗号化したファイルシステムに移 す前には,必ずバックアップを取っておきましょう.他のファイルシステムと 同様に壊れるかもしれないからです. まず最初に,Linux カーネルにパッチを当ててバージョンを少なくとも 2.2.9 以上にしておかなければなりません.パッチを当てる詳しい手順は,この文書 の``詳細な手順''の節で後述します. カーネルのソースコードは以下の場所にあります: カーネルの再コンパイル手順に関する HOWTO 文書は以下の場所から入手でき ます: 本文書の全体または一部は,以下の条件の下において,無料で複製・配布して もかまいません. o 本文書の全体あるいは一部をコピーした場合は,著作権表示とこの許諾表 示を残さなければなりません. o 翻訳または派生物については,配布を行う前に著者の承認が必要です. o 本文書の一部分を配布する場合には,本文書の完全な版を入手する手順を 含めなければなりません.また,完全な版を得る手段を提供しなければな りません. o 本文書に書かれた全てのソースコードは GNU General Public License に 従います.このライセンスは以下の場所から anonymous FTP を使って入手 できます: 2. はじめに 今回の作業では,`/dev/loop*' デバイス(普通にインストールしていれば * は 0 から 7 まででしょう)を使ってループバックファイルシステムをマウン トします.この作業は暗号化を用いずに行うこともでき,Linux ファイルシス テムを Linux 以外のパーティションに置くことができます.これについて述 べた HOWTO 文書が以前は LDP にありました. 何種類かの暗号を使えます.例えば XOR, DES, twofish, blowfish, cast128, serpent, MARS, RC6, DFC, IDEA などです.暗号化されたファイルと,その中 に含まれるファイルシステムや暗号の種類を関連付けるのは `losetup' (loopback setup)プログラムの役割です. kerneli.org と国際版の crypto パッチを管理している Alexander Kjeldaas によると,現在は DES と losetup は組み合わせられません.これは両者におけるパリティビットの扱い が異なるためです.DES は他の暗号と比べて安全性がずっと劣るので,DES を サポートする計画はありません. Twofish, blowfish, cast128, serpent は,目的を問わずに自由に使えるライ センスです.他はライセンスに制限が不明です.これらのいくつかは,AES 標 準の候補です.最終的に勝ち残った暗号は,使用料なしで世界中で使えるよう になるでしょう. 本文書では serpent アルゴリズムを利用します.なぜなら,この暗号は強度 が高い上に極めて高速で,かつ GPL の下で自由に配布できるからです. serpent 付属の文書によると,serpent は Ross Anderson, Eli Biham, Lars Knudsen が設計した 128 ビットブロックの暗号を使っています.この暗号 は,抜け道を使った攻撃がないことを実用最高級のレベルで保証しています. serpent に関する文書とソースコードは以下の場所から入手できます: また本文書では,暗号化の機構は直接カーネルに組み込まれるものとします. これはモジュールとしてもインストールできますが,その方法は本文書では説 明しません.`/etc/conf.module' ファイルを編集する必要があるでしょう. この手順は,先に述べたカーネルのコンパイルに関する HOWTO 文書で詳しく 説明されています. 3. 手順のまとめ 作業はいくつかの手順からなります.それぞれの手順については,次の節 ``詳細な手順''で説明します.リファレンスとしてまとめを最初に用意してお くといいだろうと考えました (もし読者の皆さんの UNIX/Linux の経験が豊富 ならば,いずれにせよ細かい説明は不要でしょう).では,まとめを以下に示 します: 1. 国際版暗号パッチの最新版を以下の場所からダウンロードします(本文書の 執筆時点では `patch-int-2.2.10.4' を用いました): 2. カーネルにパッチを当てます 3. `make config'(または `menuconfig' や `xconfig')を実行して,新しいカ ーネル用の `Makefile' を設定します.暗号化を有効にするためのオプ ションは,あちこちに散らばっています.まずはともかく,どのオプショ ンよりも前に `Code Maturity level options' の下の `Prompt for development and/or incomplete code/drivers' を有効にしてください. 次に,`Crypto options' の下の `crypto ciphers' と `serpent' を有効 にします.繰り返しますが,本文書では serpent を使うものとします.で も,読者の皆さんは好きなものを試してください.ただし 2.2.10.4 の時 点では DES とは組み合わせられないことを忘れないでください.今後もま ずサポートされることはないでしょう.`Block Devices' の下には,選択 すべき重要なオプションがいくつかあります. `Loopback device support', `Use relative block numbers as basis for transfer functions(RECOMMENDED)', `General encryption support' です.ここで は `cast 128' や `twofish' は選択しないでください.ネットワーク関連 の各種項目の下にある暗号関係のオプションは,どれも選択する必要はあ りません.カーネルの設定については,これ以上細かい部分には立ち入り ません.これは本文書の守備範囲ではないので,LDP のサイトにある他の 文書をご覧になってください. 4. 新しいカーネルをコンパイルします. 5. `/etc/lilo.conf' を編集して,新しいカーネルイメージを追加します.そ れから `lilo -v' を実行して,ブートローダにこのカーネルを追加しま す. 6. 最新の `util-linux' パッケージ(筆者は `util-linux-2.9v' を使ってい ます)を以下の場所から入手します: 7. `util-linux' のソースを展開します. 8. ローカルの `/usr/src/linux/Documentation/crypto/' ディレクトリにあ る,使いたい暗号に対応するパッチを当てます. 9. `INSTALL' ファイルを注意深く読んでください! このパッケージには,シ ステム依存のファイル(`login', `passwd', `init' といった重要なツール 群)のソースコードがたくさん入っています. MCONFIG ファイルをいい加 減に編集してこれらのソースをコンパイルしてしまうと,システムがめ ちゃくちゃになるかもしれません - 起動ディスクかショットガンを用意し ておきましょう.基本的には,ほとんど全ての `HAVE_*' の項目を `yes' にしておき,重要な認証ツールのコンパイルと上書きが行われないように しておきましょう.再構築の必要があるツールは,新しい暗号化手法に対 応させる `mount' と `losetup' です.このステップについては,後述の ``詳細な手順''の節を参照することをお勧めします. 10. `util-linux' のソースのコンパイルとインストールを行います. 11. 新しいカーネルでマシンを再起動します. 12. `/etc/fstab' を編集し,以下のようなマウントポイントの項目を追加しま す: ______________________________________________________________________ /dev/loop0 /mnt/crypt ext2 user,noauto,rw,loop 0 0 ______________________________________________________________________ 13. ファイルシステムをマウントするためのディレクトリを作ります.上記の 例では `/mnt/crypt' です. 14. 一般ユーザ権限で,暗号化するファイルを以下のようにして作ります: dd if=/dev/urandom of=/etc/cryptfile bs=1M count=10 15. 以下のように losetup を実行します: losetup -e serpent /dev/loop0 /etc/cryptfile パスワードを入力する機会は一度しかないので注意してください.パスワード の二重チェックをしたければ,以下のコマンドを使いましょう: losetup -d /dev/loop0 このコマンドは loop デバイスをアクティブでない状態にします.次にもう一 度 losetup を実行し,以下のようにしてパスワードを確認します. losetup -e serpent /dev/loop0 /etc/cryptfile 16. ext2 ファイルシステムを以下のようにして作成します: mkfs -t ext2 /dev/loop0 17. ここで,暗号化したファイルシステムを以下のコマンドでマウントします: mount -t ext2 /dev/loop0 /mnt/crypt 18. ファイルシステムの使用を終了したら,以下のコマンドでファイルシステ ムをアンマウントして保護します: umount /dev/loop0 losetup -d /dev/loop0 4. 詳細な手順 カーネルへのパッチ当て: パッチを当てて,`2.2.x' リリースからアップグレードします. `2.2.x' 向 けにリリースされているそれぞれのパッチはバグ修正です.新機能は開発版カ ーネルである `2.3.x' に追加されます.パッチを当ててインストールするに は,現在のバージョンより新しいパッチファイルを全て入手し,以下のコマン ドを実行します: cd /usr/src gzip -cd patchXX.gz | patch -p0 現在のソースツリーよりバージョン番号が大きいものを全て,XX に当てはめ ていきます.これは番号順に行います. カーネルソースのデフォルトのディレクトリは `/usr/src/linux' です.ソー スが別の場所にインストールされている場合は,`/usr/src/linux' からシン ボリックリンクを張ることをお勧めします. `util-linux' パッケージのコンパイルのために `MCONFIG' を編集します: 以下に示すのは,筆者が `util-linux' パッケージのコンパイルに使った `MCONFIG' ファイルです.これは筆者の設定(RedHat 5.2 をある程度ベースに しています) にかなり特化しているので注意してください.確実に守るべき点 は,`login', `getty', `passwd' といった重要なシステムファイルを上書き しないことです.とりあえず,重要な行を以下に示します: ______________________________________________________________________ CPU=$(shell uname -m | sed s/I.86/intel/) LOCALEDIR=/usr/share/locale HAVE_PAM=no HAVE_SHADOW=yes HAVE_PASSWD=yes REQUIRE_PASSWORD=yes ONLY_LISTED_SHELLS=yes HAVE_SYSVINIT=yes HAVE_SYSVINIT_UTILS=yes HAVE_GETTY=yes USE_TTY_GROUP=yes HAVE_RESET=yes HAVE_SLN=yes CC=gcc ______________________________________________________________________ お勧め: 8 つのループバックデバイス(`dev/loop0' から `/dev/loop7' まで)のどれを 使ってもよいことに注意してください.また,マウントポイントは目立たない ディレクトリにしましょう.筆者は,ホームディレクトリ以下にパーミッショ ン 700 のディレクトリを作ることをお勧めします.同じことがデータを入れ るファイルにも言えます.筆者は `/etc' フォルダ内に `sysfile' や `config.data' といったファイル名で置いています.これは普通,見逃されま す. 筆者は,1 コマンドでファイルシステムのマウントとアンマウントを行うため の,とても簡単な Perl スクリプトを書きました.以下の内容のファイルを作 り,これを実行可能にし(chmod u+x),パスが通った場所に置いてください. ______________________________________________________________________ #!/usr/bin/perl -w # #minimal utility to setup loopback encryption filesystem #Copyright 1999 by Ryan T. Rhea `losetup -e serpent /dev/loop0 /etc/cryptfile`; `mount /mnt/crypt`; ______________________________________________________________________ 上記のスクリプトを `loop' と名付けます.これを使うと,コマンド一 つ(`loop')とパスワード入力でマウントを行えます. ______________________________________________________________________ #!/usr/bin/perl -w # #minimal utility to deactivate loopback encryption filesystem #Copyright 1999 by Ryan T. Rhea `umount /mount/crypt`; `losetup -d /dev/loop0`; ______________________________________________________________________ 2 つ目のスクリプトを `unloop' と名付けます.`unloop' を実行すると,す ぐにファイルシステムを非アクティブにできます. 5. 日本語訳について 日本語訳は Linux Japanese FAQ Project が行いました。翻訳に関するご意見 は JF プロジェクト 宛に連絡してください。 改訂履歴を以下に示します。 v1.0j, 27 November 1999 翻訳: 藤原輝嘉 校正: o 高城正平 o 中野武雄 o 武井伸光 v1.1j, 29 November 1999 翻訳: 藤原輝嘉