暗号化FS EncFS Windows 移植版の EncFS4Winy を試す

以前のエントリの 「暗号化ファイルシステム EncFS の Reverse mode を試す | matoken’s meme」のコメントで EncFS の Windows移植版の EncFS4Winy というものを教えてもらいました.

EncFS の移植 & GUI で簡単にマウントしたりできるもののようです.

今回は VirtualBox 内の Windows 8.1 Professional 64bit 版に検証時の最新版の EncFS4WinyInstall_1.7.5_2.exe を試しました.手元で計算した HASH は以下の通り.

% sha256sum EncFS4WinyInstall_1.7.5_2.exe
fd8c5109876730eb1a0395e9d85a81007655fc0ae135f63adc30e3b34da84315  EncFS4WinyInstall_1.7.5_2.exe
% sha512sum EncFS4WinyInstall_1.7.5_2.exe
c722c41d99944ccc247ac8b3859a2a3f3cfc2e467c814b865adda57d767837ec0561c23725b5d3f79a03babcce8137b3553291aa498a20eedcd46fb00504cc15  EncFS4WinyInstall_1.7.5_2.exe

実行するとインストーラが起動してよきに計らってくれます.
早速起動してみると,「コンピューターに LIBEAY32.dll がないため、プログラムを開始できません。この問題を解決するには、プログラムを再インストールしてみて下さい。」 と言われて起動出来ませんでした.

Gyazo

LIBEAY32.dll は何者だろうと検索すると OpenSSL のもののようです.OpenSSL 本家ではバイナリを配布してないので Vector/窓の杜などで探しますが見当たりません.ReadMe_Windows.txt にも書かれている以下があちこちから参照されているし最新のバージョンに追従しているようですが,個人の人の運用しているページのようで配布物のハッシュや署名なども見当たらず.Announcement ML も登録できずでちょっと不安.皆さん自分でビルドされてるんですかね?(それとも他にいい配布元がある?)

仮想マシン環境なのでスナップショットを取ってあるので後で巻き戻すことにしてひとまずここから OpenSSL を導入しました.
すると EncFS は動作するようになりました.

<追記>
OpenSSL ライブラリが同梱された EncFS4Winy 1.7.5_3 がリリースされました.この辺りの手順は必要なくなったはずです.

</追記>

C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe --version
encfs version 1.7.4
 
C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe -h
.\encfs.exe: invalid option -- h
05:57:06 (..\encfs\main.cpp:354) Missing one or more arguments, aborting.
Build: encfs version 1.7.4
 
Usage: .\encfs.exe [options] rootDir mountPoint [-- [FUSE Mount Options]]
 
Common Options:
  -H                    show optional FUSE Mount Options
  -s                    disable multithreaded operation
  -f                    run in foreground (don't spawn daemon).
                        Error messages will be sent to stderr
                        instead of syslog.
  -v, --verbose         verbose: output encfs debug messages
  -i, --idle=MINUTES    Auto unmount after period of inactivity
  --anykey              Do not verify correct key is being used
  --forcedecode         decode data even if an error is detected
                        (for filesystems using MAC block headers)
  --public              act as a typical multi-user filesystem
                        (encfs must be run as root)
  --reverse             reverse encryption
 
Example, to mount at c:\plain with raw storage in c:\crypt :
    encfs c:\crypt c:\plain
 
For more information, see the man page encfs(1)
 

早速 Linux で作った暗号化ファイルシステムをマウントしてみると以下のようにエラーとなってしまいました.

C:\Program Files (x86)\EncFS\EncFS4Winy>.\encfs.exe F:\tmp\encfs_c I: EncFS Password:
06:53:02 (..\encfs\FileUtils.cpp:1694) Unable to find nameio interface nameio/block, version 4:0:0
The requested filename coding interface is not available
 

ちょっと調べると,EncFS 領域作成時のファイル名エンコードのオプションで Blick32 を指定しているとこうなるようです.EncFS4Winy で利用している EncFS 1.7.4 にはこのオプションがありません.

The following filename encoding algorithms are available:
1. Block : Block encoding, hides file name size somewhat
2. Null : No encryption of filenames
3. Stream : Stream encoding, keeps filenames as short as possible
 
Enter the number corresponding to your choice:

Linux 側で暗号化ファイルシステム作成時に Block を指定してみたところ EncFS4Winy でマウントできました.Windows 側で作成した領域の Linux でのマウントもOK でした.EncFS4Winy の EncFS バージョンが追従するまでは Linux 側で注意する必要があるようです.
ファイル名については UTF-8 であれば相互問題ありませんでした.

ということで,今度は GUI を試してみます.マウント元の暗号化フォルダと,マウント先のドライブレター,パスワードと入力していくとマウントできました.(コマンドプロンプトからの実行時にはマウント先はドライブレターだけでなくパスも指定可能)

GyazoGyazoGyazo

マウント元の暗号化フォルダに空のものを指定すると新しい EncFS の暗号化領域が作成できます.オプションで paranoia mode が指定できます.

Gyazo

動作は Linux の Cryptkeeper とほぼ同じですね.違いは EncFS4Winy では暗号化FS 作成時のオプションに paranoia mode があって,Cryptkeeper のマウントオプションに自動アンマウントオプションがあるくらいでしょうか.

GitHUB などで検索してみると Mac版の EncFS も複数出てきました.何年も更新されていないものとかもありますが GUI のあるものもあるようです.今手元に環境がないので試していませんがうまく動くようならマルチプラットホームで利用できるかもしれませんね.

暗号化ファイルシステム EncFS の Reverse mode を試す

IMGP5154

EncFS という恐らく Linux のみで動作する暗号化ファイルシステムがあります.

<追記>
コメントで Windows の移植版を教えていただきました :)
EncFS4Winy ファイル暗号化 « 座間ソフト
</追記>

これは FUSE 経由で通常のファイルシステムの上に暗号化ファイルシステムを作成するもので,設定した暗号化領域のディレクトリを Encfs でマウントすることで透過的に暗号化ファイルシステムが利用できます.ただし,ファイル名暗号化時にはメタデータをファイル名に含めるためファイル名長が短く制限されるなどの制限はあります.このあたりは eCryptFS と同じですね.私はオンラインストレージ領域などに利用しています.(同期がファイル単位の場合 EncFS はお勧め)

オプションを眺めていて EncFS コマンドの --reverse というオプションに気づきました.

–reverse reverse encryption

Reverse mode
 
encfs --reverse provides an encrypted view of an unencrypted folder. This enables encrypted remote backups using standard tools like rsync.

この EncFS の Reverse mode はその名の通り,通常の非暗号化領域をマウントして EncFS による暗号化領域を提供してくれるようです.例えば rsync のバックアップ時に利用して,バックアップ経路からバックアップ先まで暗号化すると行ったことが出来ます.(タイムスタンプやパーミッションはそのままなので rsync の差分バックアップも問題なく行える)

利用例

初回起動時は要設定ですが,2回目からはパスワードの入力だけでOK です.

  • マウント対象: ~/
  • マウントポイント: /tmp/encfs
% mkdir -m 700 /tmp/encfs
% encfs -i 10 --reverse ~/ /tmp/encfs
新しい暗号化ボリュームを作成します。
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.
?> x
 
手動設定モードが選択されました
以下の暗号アルゴリズムが使用できる :
1. AES : 16 byte block cipher
 -- 鍵長 128 から 256 ビットをサポート
 -- ブロックサイズ 64 から 4096 バイトをサポート
2. Blowfish : 8 byte block cipher
 -- 鍵長 128 から 256 ビットをサポート
 -- ブロックサイズ 64 から 4096 バイトをサポート
 
使用するアルゴリズムの番号を入力してください: 1
 
アルゴリズム "AES" が選択されました
 
鍵サイズをビット単位で指定してください。選択された
暗号アルゴリズムは 128 から 256 ビット (64 ビット間隔) の
鍵サイズをサポートしています。
例えば:
128, 192, 256
使用する鍵サイズ: 256
 
鍵サイズ 256 ビットを使用します
ブロックサイズをバイト単位で指定してください。選択された
暗号アルゴリズムは 64 から 4096 バイト (16 バイト間隔) の
ブロックサイズをサポートしています。
Enter を押すとデフォルト値 (1024 バイト) を使用します。
 
ファイルシステムブロックサイズ: 4096
 
ファイルシステムブロックサイズ 4096 バイトを使用します
 
以下のファイル名暗号アルゴリズムが使用できます:
1. Block : Block encoding, hides file name size somewhat
2. Block32 : Block encoding with base32 output for case-sensitive systems
3. Null : No encryption of filenames
4. Stream : Stream encoding, keeps filenames as short as possible
 
使用するアルゴリズムの番号を入力してください: 2
 
アルゴリズム "Block32" が選択されました"
 
reverse encryption - chained IV and MAC disabled
Enable per-file initialization vectors?
This adds about 8 bytes per file to the storage requirements.
It should not affect performance except possibly with applications
which rely on block-aligned file io for performance.
y/[n]: y
 
 
設定が完了しました。以下のプロパティのファイルシステムが
作成されます:
ファイルシステム暗号アルゴリズム: "ssl/aes", バージョン 3:0:2
Filename encoding: "nameio/block32", version 4:0:2
鍵サイズ: 256 ビット  
ブロックサイズ: 4096 バイト
Each file contains 8 byte header with unique IV data.
File holes passed through to ciphertext.
 
Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.
 
新しい Encfs パスワード:
Encfs パスワードの確認:
% mount |grep -i encfs
encfs on /tmp/encfs type fuse.encfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
% ls /tmp/encfs
23GX4BPMMVSWOUUXIQCCX4EGI4BHG
24FEOFMBBK774KOXKO6CD5LVPB2JH
2ANNTH3275PXEFQCTLRIXDUBJFMPG
2B72K7FH3NZDIXX7S6P3FSMNCPIWL
2BX2O7FBGPIMLVQ66GD67O5MRYUJN
2GXZR6YY5C2T66GTHAOTBFDHHURZF
2HRGOCQRQI2FKQU5T4YR7X756KQ37IVWCWDUJIL7U4X5APCL4GH3ITX4QRWIDCLSZRTKWXVUA7WFVWME
2HUXRTPOJQFPEY7G62TCSD6BLXI6J
2JMEPULBHHVQVIOUHT2XEMVLD4BAO
2JTHYUVWCXXNYVAWGY4GIV4HGFMBL5BFRU7SGYGVHIR43ZOLVCEG5BA
2LFQK6EBYEOKU2UQV7F32ATU4XQF2EAOXKL75QXYUG4HKKRIADTIJGD
2NU47TEEVRXUIMWBMKGTPXJUEGCAM
2OI3GILDZS3UAMVQB4TL46DQCREKL
 :

アンマウント

% fusermount -u /tmp/encfs

2回目以降のマウント

% encfs -i 10 --reverse ~/ /tmp/encfs
EncFS パスワード:

問題なく利用できました.
ただ,注意しないといけなさそうな点が1つ.マウント時にパスワードだけでマウントするために暗号化情報を格納したデータの含まれたファイルが作成されるのですが,Reverse mode の場合このファイルも暗号化されてしまうのでこのファイルは別途バックアップを取っておいたほうが良いです.

オプションを覚えていればどうにかなりますがそうでないとオプションを試行錯誤しないといけないと思います.

<追記>
man を見るとマスターキーが含まれているのでこのファイルがなくなると復元できなくなるようです.注意しましょう.

Warning: If you lose the config file, the encrypted file contents are irrecoverably lost. It contains the master key encrypted with your password. Without the master key, recovery is impossible, even if you know the password.

</追記>

このファイルは EncFS 1.8.1 では .encfs6.xml です.(EncFS のバージョンにより数字部分は変わるようです)今回の例では ~/.encfs6.xml を別途バックアップします.

EncFS は他の暗号化ファイルシステムより弱い気がしていますが,この辺の柔軟さはいいですね.
出来れば他の OS にも対応してくれると利用範囲が広がって嬉しいのですが.