encfs man

名前

encfs -- 暗号化した仮想ファイルシステムを作成したり、マウントしたりする。

書式

encfs [-s] [-f] [-v│--verbose] [-i MINUTES│--idle=MINUTES]
      [--extpass=program] [--anykey] [-d│--fuse-debug] rootdir mountPoint
      [--[Fuse Mount Options]]

説明

encfsは、「rootdir」ディレクトリに暗号化したデータを格納し、「mountPoint」ディレクトリを通して暗号化前のデータを見せる、仮想的な暗号化されたファイルシステムを作成する。 利用者は、ファイル名とファイル内容を暗号化するためのパスワードを指定する必要がある。

利用者が指定した「rootdir」が存在しない場合、指定した場所に新しい暗号化されたファイルシステムを作成するかどうかを、encfsは利用者に尋ねる。 作成するファイルシステムのオプションは、利用者に提示される。

EncFSが成熟するとともに、オプションの選択枝が増えているだろう。

オプション

-s

-s (シングルスレッド)オプションは、encfsをシングルスレッドモードで実行させる。 省略時、encfsは、マルチスレッドで実行される。 このオプションはencfs開発時に、デバッグを単純化し、かつencfsがメモリをチェックするツールの下で動作することを可能にするために使用する。

-f

-f (フォアグラウンド)オプションは、encfsをフォアグラウンドで実行させる。 encfsは通常デーモンとして、バックグラウンドで実行される。 -f オプションを付けると、encfsはフォアグランドで動作し、警告/デバッグログを標準エラー出力に出力する。 省略時(バックグラウンドモード)は、ログメッセージは全てsyslogによって記録される。

-v, --verbose

encfs内の様々なデバッグの手掛りを記録させる。 通常、これらのログメッセージは抑止され、無効になっている。 このオプションを指定する場合、フォアグラウンドモード(-f)で実行する事を推奨する。

-i, --idle=MINUTES

不活動期間が続いた場合、ファイルシステムを自動的にアンマウントすることを可能にする。

不活動期間「MINUTES」は分で指定する。従って、指定できる最も短い不活動期間は1分である。

ファイルシステム内のファイルを、リードオンリーモードで開いていても、EncFSはファイルシステムをアンマウントしない。 但し、ファイルを単に開くだけでは、活動中と見なさない。

--anykey

キー認証チェックをさせない。 これは、EncFSが第2パスワードによって使われることを意味する。 暗号化されたファイルシステムにファイルの個別のセットを格納するためにこれを使用することができるかもしれない。 EncFSは、適切に解読出来ないファイルを無視します。従って、ファイルシステムがその関連するパスワードでマウントされる時、個別のパスワードで作成されたファイルは単に目に見えるだけである。

第1パスワードを変更した場合、他のパスワードが、ボリュームキー(第1パスワードが変更される場合にそれも変わる)の解読に依存するので、第1パスワードを元に戻さなければ、他のパスワードが使用出来なくなることに注意すること。

注意:自己の責任で、このオプションを使用する事。

訳注:訳している本人も、よく分からないオプションである。

--extpass=program

独自のパスワードを得るために使う外部プログラムを指定する。 外部プログラムが起動する時、環境変数「RootDir」は、フルパスで設定される。 外部プログラムは、パスワードを標準出力に出力(print)すること。

EncFSは、外部プログラムから戻された、改行(¥n)を除く全てをパスワードとみなす。

例:EncFSにsshのパスワードプロンプトプログラムを使わせる。
--extpass=/usr/lib/ssh/ssh-askpass

-d, --fuse-debug

FUSEライブラリ内のデバッグを可能にする。 これは、FUSE自体(EncFSではない)の問題を疑う場合にのみ使用すべきである。

本オプションより前に、-v オプションを試すこと。これは、EncFSに起きているより高度な情報を与えてくれる。

--

-- オプションは、FUSEに直接送るパラメータを指定する。 順番に、FUSEはfusermountへパラメータを渡す。 指定可能なパラメータについては、fusermountのヘルプページを参照のこと。

使用例

例1:暗号化ファイルシステムを新規作成する

生(暗号化された)データを"‾/.crypt"に格納し、非暗号化データを"‾/crypt"において可視化する。この例は、EncFSの全ての出力と利用者の応答を示している。

% encfs ‾/.crypt ‾/crypt
Directory "/home/me/.crypt" does not exist, create (y,n)?y
Directory "/home/me/crypt" does not exist, create (y,n)?y
Creating new encrypted volume.
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?>(空ENTER)

Standard configuration selected.
Using cipher Blowfish, key size 160, block size 512
New Password: ここにパスワードを入力
Verify: もういちどパスワードを入力

上記の操作で、ファイルシステムはマウントされ、‾/cryptを通して見る事が出来るようになる。ファイルをここ(‾/crypt)に作成すると、‾/.cryptの中に暗号化された形式のファイルを見る事が出きる。

ファイルシステムをアンマウントするには、-u(アンマウント)オプションを付けたfusermountコマンドを使用する。

% fusermount -u ‾/crypt

例2:暗号化ファイルシステムをマウントする

例1と同じファイルシステムをマウントする。但し、fusermountに、マウントポイントを '/dev/foo' に変更するオプションと、ファイルデータをカーネルレベルでキャッシュするオプションを与える。

% encfs ‾/.crypt ‾/crypt -- -n /dev/foo -c

例3:ファイルシステムの挙動がおかしい時の情報取得

暗号化ファイルシステム動作中に、奇妙な振るまいを発見したので、冗長(verbose)モードで実行し、問題を再現させ、再現時の詳細情報をファイル「encfs-report.txt」に取得する。

% encfs -v -f ‾/.crypt ‾/crypt 2 > encfs-report.txt

警告

EncFSは、本物のファイルシステムでは無い。 EncFSは、実際の記憶装置や、ファイルのメンテナンスのいずれも扱わない。 EncFSは、単にリクエスト(必要なときに暗号化するか解読して)を翻訳し、リクエストをホスト・ファイルシステムへ渡す。 そのため、ホスト・ファイルシステムのどんな制限も、EncFSに(恐らく、さらに制限されて)継承される。

制限の一例は、ファイル名の長さである。 ホスト・ファイルシステムがファイル名をN文字に制限する場合、EncFSはファイル名をほぼ3*(N-2)/4に制限する。例えば、ホスト・ファイルシステムのファイル名の制限が256文字の場合、EncFSは190文字に制限する。これは、暗号化したファイル名が、元のファイル名より長くなる為である。

ファイルシステム オプション

EncFSが既存のEncFSファイルシステムを含んでいないルート・ディレクトリーを指定した時、EncFSファイルシステムを作成するオプションを与えることが出来る。 ファイルシステムを作成する時のみ、オプションが指定出来ることに注意。 EncFSは、ファイルシステムの変更はサポートしていない。

より新しい特徴を使用するようにファイルシステムをアップグレードしたい場合、 新しいファイルシステムを作成し、 古いファイルシステムと新しいファイルシステムの両方を同時にマウントした後、 新しいファイルシステムに古いファイルシステムのファイルをコピーする。

自由にオプションが設定できる上級者モードに加えて、予め設定値が決まっている標準モードと猜疑モードを提供している。

標準モード(standard mode)の内容

Cipher: Blowfish
Key Size: 160 bits
Filesystem Block Size: 512 bytes
Filename Encoding: Block encoding with IV chaining
Unique initialization vector file headers

猜疑モード(paranoia mode)の内容

Cipher: AES
Key Size: 256 bits
Filesystem Block Size: 512 bytes
Filename Encoding: Block encoding with IV chaining
Unique initialization vector file headers
Message Authentication Code block headers
External IV Chaining

上級者モード(マニュアル設定モード)での設定項目

Cipher

使用する暗号化アルゴリズムを指定する。 EncFSは、暗号ライブラリから、システムがサポートしている暗号化アルゴリズムを見つけ出し、暗号化アルゴリズムの一覧を自動的に生成する。 OpenSSLの最近のバージョンを使用する場合、BlowfishとAESは典型的なオプションとなる。

Blowfishは、8バイト暗号(一度に8バイトをコード化)である。 AESは16バイト暗号である。

Cipher Key Size

サポートされた暗号の多く(すべてではないにしても)は、複数のキー長をサポートしている。大きなキー長を持つ必要は、実際にはあまり無い。160ビット(デフォルト)でさえ恐らく過剰である。

Filesystem Block Size

これはEncFSが一度に扱うサイズ(単位:バイト)である。 各ブロックはそれ自身の初期ベクトルを得て、暗号の「cipher-block-chaining mode」でコード化される。 ファイルの終端では、断片的なブロックのサイズをどこかに格納しなければならないことを回避するために、「stream mode」を使用してコード化される。

より大きなブロック・サイズにすることは、EncFSのオーバーヘッドを少し削減するが、 あなたのプログラムがファイルの小片を読む場合、オーバーヘッドは増加する。 シングルバイトのファイルを読みこむ度に、そのバイトを含むブロック全体を読みこみ復号 するに違いない。すなわち、大きなブロック・サイズは、小さな要求にオーバーヘッドを追加する。 書き込み要求では、ブロックを読み解読し、変更を反映し、ブロックを暗号化し、書き込まなければならないので、それはさらに悪くなる。

バージョン1.0の時点では、省略時の値は、512バイトである。 バージョン0.xでは、64バイト固定であった。 それは、一般的な使用方法の為の現在の設定と違って、あまり効率的ではなかった。

Filename Encoding

バージョン1.1新機能。

ファイル名の「stream encoding」と「block encoding」のどちらかを選択できる。 「stream encoding」の利点は、暗号化されたファイル名を出来るだけ短くすることである。 1文字のファイル名をつける場合、暗号化されても非常に短い。「block encoding」されたファイル名は、使用する暗号化アルゴリズムのブロックサイズ(の倍数)に切り上げられる(Browfishは8バイト、AESは16バイト)。

「block encoding」の利点は、暗号化されたファイル名の長さが、暗号化アルゴリズムのブロックサイズの倍数となることである。 つまり、暗号化後のファイル名を見ても、元のファイル名を推定できない。 「stream encoding」と処理時間は同等なので、の使用にかかるので、「block encoding」をデフォルトとしている。 しかしながら、何らかの理由で、より短い暗号化されたファイル名を望むのであれ、「stream encoding」は有用である。

バージョン1.1に前は、「stream encoding」だけがサポートされていました。

Filename Initialization Vector Chaining

バージョン1.1新機能。

前のバージョンでは、パス中の各ファイル名要素が別々に暗号化されました。つまり、"foo"を"XXX"に暗号化する場合、常にその方法(同じ暗号化キーを与える)で暗号化される。たとえパスが"a/b/foo"や "aa/foo/cc"等であったとしても。 これは、暗号化された名前の元の名前は分からないが、異なるディレクトリー中の2つのファイルが同じ名前であるかどうかを判別することが可能であることを意味する。

「initialization vector chaining」によって、各ディレクトリー毎に初期ベクトルを得る。従って、「a/foo」「b/foo」は、完全に異なる暗号化名となる。 この機能は(ほとんどのオペレーションの)性能に影響を与えないので、全てのモードの省略値となっている。

重要な1つの例外は、ディレクトリーの改名である。 ファイル名暗号化のための初期ベクトルがディレクトリー・パスに依存するので、 改名したディレクトリのツリー下の全てのファイル名を再暗号化する必要がある。 何千ものファイルがある場合、EncFSは何千もの改名を行わなければならない。 EncFSが、解読できないファイルや、改名オペレーション中に移動する許可が無いファイルに遭遇するだろう。その場合、その場所や改名結果を取消すことを試み、失敗するだろう。

Per-File Initialization Vectors

バージョン1.1新機能。

前のバージョンでは、各ファイルが同じ方法で暗号化されました。 ファイル中の各ブロックはそれ自身の初期ベクトルを常に持っていた、しかし、決定論的方法(?)では、 あるファイルのブロックNは、他のファイルのブロックNと同じ方法で暗号化されていた。 それは、暗号化された2つのファイルを比較する事により、それらのファイルが同一の内容であること(あるいは同一な部分)を見つける事を可能にする。

「per-file initialization vectors」を使用すると、 ファイル毎にランダムな初期ベクトルを使用する、つまり、ファイル毎に異なる方法で暗号化する。

このオプションは、デフォルトで有効になっている。

External IV Chaining

バージョン1.1.3 新機能。

このオプションは、「per-file initialization vectors」および「Filename Initialization Vector Chaining」と密接な関係がある。 基本は、「initialization vector chaining」をファイル名から「per-file initialization vector」まで拡張します。

このオプションを有効にすると、「per-file initialization vector」は、 「filename initialization vector chaining」に由来した初期ベクトルを使用して暗号化する。 これは、ファイル中のデータがファイル名に結び付けられるようになることを意味する。 暗号化されたファイルがencfsの外部で改名される場合、encfsはデータを解読出来なくなるということではありません。 もし「Block MAC headers」が有効でなければ、解読エラーが検知されず、でたらめなデータを読みこむという結果になることに注意すること。

このオプションには、制限事項がある。 「External IV Chaining」を有効にした場合、同じデータを指す2つの異なるファイル名を、適切に解読する方法が無いので、ファイルシステム内では、ハードリンクは許可されない。

さらに、ファイルの改名はファイル・ヘッダーを修正することを要求する。 従って、ユーザがファイルへの書き込みアクセス権を持っている時のみ、改名出来る。

これらの制限により、このオプションはデフォルトでは、無効としている(但し、猜疑モードでは有効)。

Block MAC headers

バージョン1.1.3 新機能。

このオプションを有効にした場合、すべてのファイルの中のすべてのブロックは暗号のチェックサム(メッセージ認証コード)と共に格納される。 これは、EncFSを通さずに、ファイルを修正することを事実上不可能にする。 EncFSは、チェックサムを渡さないデータを読むことを拒絶し、エラーを記録し、アプリケーションにIOエラーを返す。

これは物質的なオーバーヘッド(デフォルトは、ファイルシステム・ブロック当たり8バイト)を加え、計算処理のオーバーヘッドも加える。猜疑モード除いて、デフォルトは無効としている。

これを無効とし、EncFSが改竄されたデータの読みこみを要求された場合、オリジナルの暗号データを解読したデータであることを、確認する方法が無い。

攻撃

EncFSの主要なゴールはオフ・ライン・データを保護することです。 もしファイルが横取りされたとしても、それらを読みとるどのような試みも妨げる、 ファイルを格納する便利な方法を提供する。

EncFSの中のいくつかのアルゴリズムは、攻撃者がファイルを修正することができると仮定される場合でも、オン・ライン攻撃を妨げる。 攻撃者がユーザのコンピュータの完全な制御権を奪取する(EncFS、FUSE、あるいはカーネル自体を改竄することができる)ような、最も深い攻撃は、防御出来ない。 あなたが危険にさらされたコンピューターにパスワードを入力したとしても、暗号化されたファイルがあなたの機密データを保護するだろうと過信しないこと。 コンピュータをどうやって安全に使用するかということは、本ドキュメントの対象外である。

EncFSがサポートしているアルゴリズムが、ファイルシステムの内容を、攻撃やデータ収集技術から防御する例を以下に示す。

例1

攻撃

防御

翻訳中断。気力があったら、続く。

Attacks
       The primary goal of EncFS is to protect data off-line.  That is, pro-
       vide a convenient way of storing files in a way that will frustrate any
       attempt to read them if the files are later intercepted.
                                                                                                                           
       Some algorithms in EncFS are also meant to frustrate on-line attacks
       where an attacker is assumed to be able to modify the files.
                                                                                                                           
       The most intrusive attacks, where an attacker has complete control of
       the user’s machine (and can therefor modify EncFS, or FUSE, or the ker-
       nel itself) are not guarded against.  Do not assume that encrypted
       files will protect your sensitive data if you enter your password into
       a compromised computer.  How you determine that the computer is safe to
       use is beyond the scope of this documentation.
                                                                                                                           
       That said, here are some example attacks and data gathering techniques
       on the filesystem contents along with the algorithms EncFS supports to
       thwart them:
                                                                                                                           
        Attack: modifying a few bytes of an encrypted file (without knowing what they
        will decode to)
        Guard: B does not use any form of XOR encryption which would allow
        single bytes to be modified without affecting others.  Most modifications
        would affect dozens or more bytes.  Additionally, MAC Block headers can be
        used to identify any changes to files.
                                                                                                                           
        Attack: copying a random block of one file to a random block of another file
        Guard: Each block has its own [deterministic] initialization vector.
                                                                                                                           
        Attack: copying block N to block N of another file
        Guard: When the Per-File Initialization Vector support is enabled (default in
        1.1.x filesystems), a copied block will not decode properly when copied to
        another file.
                                                                                                                           
        Attack: copying an entire file to another file
        Guard: Can be prevented by enabling External IV Chaining mode.
                                                                                                                           
        Attack: determine if two filenames are the same by looking at encrypted names
        Guard: Filename Initialization Vector chaining prevents this by giving each
        file a 64-bit initialization vector derived from its full path name.
                                                                                                                           
        Attack: compare if two files contain the same data
        Guard: Per-File Initialization Vector support prevents this.

DISCLAIMER
       This library is distributed in the hope that it will be useful, but
       WITHOUT ANY WARRANTY; without even the implied warranty of MER-
       CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  Please refer to the
       "COPYING" file distributed with encfs for complete details.

AUTHORS
       EncFS was written by Valient Gough .

SEE ALSO
       encfsctl(1)

バージョン

1.1.4 2004-07-10