→ crosscript-0.4.3-mingw01.zip
ドライバ本体は、filedisk と同じようにすれば良かった。(説明略)
コマンドも 同様。MSYS で使えるように、仕様を変更。
これについて少し説明。
MSYS というか bash ? から起動するとき、/ で始まる引数はファイル名とみなして windows のファイル名に変換している。
/d/test.img → d:/test.img
/mount → C:/msys/1.0/mount
こんな感じ。これが /mount とか DOS 流のオプションが使えない理由。filedisk.exe の第一引数は、コマンドと決まっているので、/ を外している。他のオプションは / → - に変更。
あと、ファイル名の / も (filesys.exeでは)具合が悪い。
d:\test.img → \??\d:\test.img
という変換をやっていて、それをするために、ファイル名を解析している。bash では、\ を入力するには、\\ とかしなければならなくて面倒なので、/ → \ 変換を内部に入れることにした。
次に、ドライバーのインストールプログラムに手をいれてみた。
フリーのリソースエディタ ResEdit (ver 1.4.4.15) を使って、resource.rc を編集して、ボタンを付けた。--- この程度なら ResEdit で十分だった。
付けたボタンで何をするかというと.. ドライバ起動の設定。実用として使うなら自動で起動してくれないと困るが、改造時に致命的なバグが入ったときまで起動されては困る。それで、押すボタンでどちらにするか決めるようにしてみた。
あと使い勝手を良くするために、C:\WINDOWS\system32\drivers へのコピーと削除の機能も入れた。
で、MSYS で普通に使えていたので... Windows から開くと、コンソール画面が開いてしまうという問題に後になって気がついた。
これを直すには、リンク時に次のオプションを追加する。
-Wl,--subsystem,windows
あるいは
-mwindows
subsystem の指定には、native,windows,console,posix の 4つがある。普通のアプリは、windows か console 。native はドライバとか。posix はよくわからない。
さて、こうやってビルドした crosscrypt を使ってみた。
$ filedisk.exe mount /d/zzz.iso -cd
G: -> d:\zzz.iso mounted
$ filedisk mount /d/test.img 100M
H: -> d:\test.img mounted
$ filedisk umount g:
G:: unmounted
$ filedisk umount
H:: unmounted
デバイス番号、ドライブ名が必須ではなくなって、使い勝手があがっている。
暗号化するときは、こんな感じ。
$ filedisk mount /d/test2.img 200M -aes256
1.Passphrase:aaa
H: -> d:\test2.img mounted
WARNING: Key will be to short for linux (min 20 chars) 3
$ filedisk umount
H:: unmounted
$ filedisk mount /d/test2.img -aes256
1.Passphrase:zzz
H: -> d:\test2.img mounted
WARNING: Key will be to short for linux (min 20 chars) 3
簡単なのは良いのだが... パスワードが見えてしまっている。
実用で使うには問題だが、もっと大きな問題が...
どんなパスワードでも、mount できてしまうのだ。mount できるが内容が出鱈目になる。で、アクセスしたとき、フォーマットされていません。となるわけだ。
なんらかのチェック機能がほしいところ。
さて、性能はどうだろう。
eeePC 701SD-X 600MHz , SSD BUFFALO SHD-DI9M 16G で、CrystalDiskMark 2.2 をやってみた。
native plain aes256 TrueCrypt
Sequential Read : 76.583 MB/s 57.112 MB/s 12.866 MB/s 13.183 MB/s
Sequential Write : 31.693 MB/s 29.380 MB/s 4.860 MB/s 12.586 MB/s
Random Read 512KB : 74.786 MB/s 55.822 MB/s 12.737 MB/s 13.580 MB/s
Random Write 512KB : 6.601 MB/s 6.360 MB/s 3.283 MB/s 5.076 MB/s
Random Read 4KB : 12.071 MB/s 9.471 MB/s 5.300 MB/s 5.099 MB/s
Random Write 4KB : 0.063 MB/s 0.069 MB/s 0.060 MB/s 0.068 MB/s
native は、ファイルがあるディスク、plain は暗号化なし、aes256 は暗号化で、TrueCrypt は比較用。
plain の場合、read が大分落ちる。これは、read するとき、一旦 バッファに読み込んでそこから、コピーしているため。暗号化した場合、TrueCryptに比べて Write が 大分劣る。 なにか変なところがあるのかも。
追記:
当面使ってみようと思う。いろいろいじるドライバーと同じ名前では、都合が悪いので、
ドライバ名 :FileDisk → CrossCrypt
デバイス名 :FileDisk/FileDiskCd → CrossCrypt/CrossCryptCd
ドライバファイル名:filedisk.sys → crosscrypt.sys
コマンド名 :filedisk.exe → ccsetup.exe
と変更したのを作った。
→ crosscript-0.4.3-mingw02.zip
あ! crypt ではなく、cript になっている!。次からちゃんとする。
メモ:
パスワードが正しいかどうかチェックできない問題について
確実ではないが、ほとんどの場合チェックできる方法を考えてみる。
マウントしたものが、ファイルシステム か 初期化状態のいずれでもなかったら、エラーにする。
MBR の場合は、パーティション 1 が ファイルシステムかどうかをチェック。
MBR:
先頭 512B の最後 2 バイトが、0x55 0xaa
Windows 系 ファイルシステム :
先頭が 0xeb ANY 0x90 。
続く 8 バイトに文字列が入り 0 が続く。
文字列には、フォーマッタの文字列が入る。
Windows XP では、NTFS MSDOS5.0 EXFAT などだが、
linux などでは、msdosfs だし、sdformatter なら ALLスペース。
0xeb ANY 0x90 ANY x 8 0x00 をチェックすれば良さそうだ。
ext2/3/4 :
先頭 1024バイトは ANY 。1024バイト目から super_block 。
そして、supre_block の offset 56-57 バイトが 0x53 0xef 。
iso イメージ:
Linux などの /usr/share/magic によると 32769 バイト目から
CD001 が入る。(2352 セクタでは 37633バイト目)
初期状態: チェックしたところが all 0 なら初期状態とみなす。
これで検討中。