make usbnix とすると linux 版ができてテストすることができる。AVR のビルド環境があれば、make で AVR 版もビルドされる。ただし、プログラムサイズをみるためだけのもので動作しない。
実行例
$ ./usbnix
login: suz
New password:
Retype new password: #最初のloginは、パスワードを設定する
# ls
# cat > test1 # これでしかファイルを作れない。
aaa bbb ccc # ^D か 行頭の .で EOF
# ls
test1
# cat test1
aaa bbb ccc
# exit
login: suz
Password: # 2回目からは正しいパスワードが必要
# ls
test1
# rm test1
# ls
# rm aaa
No such file or directory
# passwd # 初期化するだけのいんちき passwd
login: suz
New password:
Retype new password:
login: suz # Retype で間違えれば、やりなおし。
New password:
Retype new password:
#
こんなところでどうだろう。ちなみに AVR 版のサイズは、まだ 5516 バイト。エラー処理とかのブラッシュアップで多少大きくなるだろうが、まだ拡張できそう。
ちなみに、プログラムを動かすとカレントディレクトリに、eeprom のイメージファイル key.img と i2crom のイメージファイル i2crom.img ができる。このファイルを消さなければ、作ったファイルは保存される。(eeprom イメージは、他人に見えないようにパーミッションを設定しないと危険なので注意。実用として使う人はいないと思うが一応。 )
i2crom.img の中身
FILE: i2crom.img (32768) - ASCII
PAGE: 0 (0)
x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xa xb xc xd xe xf 0123456789abcdef
00: 74 65 73 74 31 00 00 00 00 00 00 00 00 00 00 00 test1...........
01: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
02: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
03: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
04: d3 26 a9 ed dc 53 ec 9c c9 77 fb 30 eb 00 00 00 .&...S...w.0....
05: d0 f3 ca 49 1f 42 a7 52 9b c8 88 6e 48 8c cb fb ...I.B.R...nH...
06: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
07: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
08: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
32KB を 1KB 毎にわけて、その1KB の頭 64B までに ファイル名が平文で入る。64B のオフセットから、ファイルの中身が 暗号化されてはいる。
16B 単位でデータをセットするので、後ろのほうは初期値のまま。
TODO
1) rm では、ファイル名しか消去していない。ファイルイメージも消去する必要がある。
2) 消せないファイルができてしまう可能性がある。ls で inode 番号(?ファイルの場所を示すインデックス)を表示して、rm で inode番号を指定できるようにするとか工夫が必要。
3) コマンドライン入力の cooked モードが貧弱で漢字などを入力した場合 BS で文字化けする(はず)。なんか対策を考えたい。
4) Linux 版だけではなく、MinGW 版もつくってみたい。いまは、/dev/urandom とか使っているので、動かない。keyにつかうランダムデータをどう生成するかが問題だが、それは AVR 版の初期データ生成にも共通する問題なので、解決する必要がある。一般の乱数で生成するのは、データに関連性ができてしまうので望ましくない。
おわりに
着想の段階では、8KB ではとても入らないだろうと思っていたが、作ってみたら、わずか 5.5KB に機能が入ってしまった。このサイズで USB を制御し、簡単ながらファイルという概念をもっていて、login できて、コマンド処理もし、暗号化までしているわけだ。
USBNIX というのも面白いものだと思うが、工夫しだいでもっといろんなものが作れそうな気がしてきた。