なんちゃって暗号ファイルシステムの実装

引き続きFUSEネタ。

昨日のところまでは、loopback.pyを使用する限り、書き込んだ時と同じサイズでないと怒られることを確認しました。
どうもこれはOSモジュールか、その下で行われてるっぽいので、手が出せません。
(手段がないわけではなく、私がよく知らんだけでしょう。FUSEを使った圧縮ファイルシステムは世に存在しますからね)

で、ひとまずの逃げ(そう来るのか?)として、memoryfs.pyを使用することにしました。

ただ、これも書き込みおよび読み込みでは文句を言わないのですが、読み込みの際には
オリジナル(展開前)のサイズしか返してくれないという問題が発生。
まぁ、ls(システムコールだとstatか?)の返してくる値しかないわけだから、これを信用するしかないのだけど。

(記憶があいまいだけど、実はこれはloopback.pyでも同じだった気もする。)

大元のFUSE.pyを読むと、なにやらそれらしい箇所があるのだけど、これをいじっても一向に状況が改善されず。
(このルーチンは呼び出し元からはサイズなどが渡される。返り値は実際に読んだサイズ<=ここをいじったが、無意味だった)

なので、圧縮ファイルシステムはabort!


それに代わるネタとしては、やはり暗号ファイルシステムかと。

ところが、RC4pythonから呼ぼうとすると、意味不明なことが山のように。
どのライブラリもドキュメントがほとんど存在しないような状況で、時間ばかりが過ぎてゆく。
DESやAESなら断片的にはドキュメントはあるのだけど、なぜかRC4は誰も触っていないっぽい。

昨日書いたようにコマンドとしては叩けるのにもったいない。

仕方がないので、DESを使うことにした。
これもまたわけが分からないドキュメントと格闘するのはもううんざりしたので、pyDesなるpurepythonのモジュールを使うことにした。
pyDES download | SourceForge.net
めんどくさいパディング(8byteの倍数じゃないといけないというお約束への対処)も自動でやってくれるという優れもの。
最低限のドキュメントもついてて、pyshellで確認が取れたし。

ということで、実行結果

[skobayas@localhost ~]$ df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
6966792 3181444 3714656 47% /
/dev/sda1 194442 20859 163544 12% /boot
tmpfs 257008 76 256932 1% /dev/shm
Memory 2048 2048 1024 67% /tmp/fuse
↑これ(Memory)がFUSE

[skobayas@localhost ~]$ cat > abcd.txt
abcd
[skobayas@localhost ~]$ ls -al abcd.txt

  • rw-rw-r-- 1 skobayas skobayas 5 2009-04-29 17:28 abcd.txt

[skobayas@localhost ~]$
[skobayas@localhost ~]$ cp abcd.txt /tmp/fuse
[skobayas@localhost ~]$ ls -al /tmp/fuse
合計 4
drwxr-xr-x 3 root root 0 2009-04-29 17:27 .
drwxrwxrwt 35 root root 4096 2009-04-29 17:27 ..

  • rw-rw-r-- 1 root root 8 2009-04-29 17:28 abcd.txt

[skobayas@localhost ~]$ cat /tmp/fuse/abcd.txt
abcd

[skobayas@localhost ~]$ md5sum abcd.txt /tmp/fuse/abcd.txt
f5ac8127b3b6b85cdc13f237c6005d80 abcd.txt
1e315b5fb4d527aa4a60bb0af9acfa3f /tmp/fuse/abcd.txt
んげげ、md5が合わないとは。

[skobayas@localhost ~]$ hexdump -C /tmp/fuse/abcd.txt
00000000 61 62 63 64 0a 00 00 00 |abcd....|
00000008

ご丁寧にstatどおり8byte読み出してるのね。desを解けば実サイズ5byteなのに。
どこかで誰かが勝手にパディングしてるということでしょうな。

暗号化を解いた後でオリジナルのサイズに切り詰める処理が必要なのか。

って差分分切り詰めると本体が切り詰められちゃうな。
かといって切り詰めないと8byte出力されるし。
うーむ、参った。