2006年09月11日(月) [過去の今日]
#1 perlによるAESベンチ
ちょっと都合で共通鍵を使うことになったので、とりあえずcpanで見つけたモジュールをベンチマークすることにした。候補は以下の通り。
このうち Crypt::OpenSSL::AES と Crypt::Rijndael は、 Crypt::CBC から利用する。
んで、ベンチを取るスクリプトは、Crypt::CBCを利用するもの用と、Crypt::GCryptを利用するもので二つ用意。
ひとつは aesbench-libcrypt-cbc.pl
#!/usr/bin/perl use strict; use Crypt::CBC; srand; my $plain; while(<>) { $plain .= $_; } my $key_gen = sub { my $seed = '0123456789ABCDEF'; my $key; for ( my $i = 0; $i < 32; $i++ ) { my $num = int(rand(16)); $key .= substr($seed, $num, 1); } return pack('H*', $key); }; my $cipher = Crypt::CBC->new( -key => $key_gen->(), #-cipher => "Crypt::OpenSSL::AES" -cipher => "Crypt::Rijndael" ); my $data = $cipher->encrypt($plain); print $cipher->decrypt($data);
もいっこがGCrypt用、aesbench-gcrtypt.pl
#!/usr/bin/perl use strict; use Crypt::GCrypt; srand; my $plain; while(<>) { $plain .= $_; } my $key_gen = sub { my $seed = '0123456789ABCDEF'; my $key; for ( my $i = 0; $i < 32; $i++ ) { my $num = int(rand(16)); $key .= substr($seed, $num, 1); } return pack('H*', $key); }; my $cipher = Crypt::GCrypt->new( type => 'cipher', algorithm => 'aes', mode => 'cbc' ); my $key = $key_gen->(); $cipher->start('encrypting'); $cipher->setkey($key); my $data = $cipher->encrypt($plain); $data .= $cipher->finish; $cipher->start('decrypting'); $cipher->setkey($key); print $cipher->decrypt($data);
で、これらを切り替えてtimeコマンドで計れるようにシェルスクリプトを用意。aesbench.sh
#!/bin/sh for i in spam/*; do perl $1 <$i >/dev/null done
このスクリプトを見てもわかるが、spamディレクトリに適当にMaildirからひろってきたspamファイルを200個ほど用意した。
@ ベンチマーク開始:
いざ3回ずつ実行。 まずはCrypt::OpenSSL::AES
$ time ./aesbench.sh aesbench-libcrypt-cbc.pl real 5.21 user 3.62 sys 0.75 $ time ./aesbench.sh aesbench-libcrypt-cbc.pl real 4.57 user 3.59 sys 0.79 $ time ./aesbench.sh aesbench-libcrypt-cbc.pl real 4.53 user 3.53 sys 0.85
次はCrypt::Rijndael。
$ time ./aesbench.sh aesbench-libcrypt-cbc.pl real 6.40 user 4.48 sys 0.76 $ time ./aesbench.sh aesbench-libcrypt-cbc.pl real 6.68 user 4.45 sys 0.77 $ time ./aesbench.sh aesbench-libcrypt-cbc.pl real 6.37 user 4.72 sys 0.57
んでもってCrypt::GCrypt
$ time ./aesbench.sh aesbench-gcrypt.pl real 2.90 user 1.50 sys 0.42 $ time ./aesbench.sh aesbench-gcrypt.pl real 2.01 user 1.39 sys 0.48 $ time ./aesbench.sh aesbench-gcrypt.pl real 2.88 user 1.49 sys 0.39
@ まとめ:
いやなんつーか、GCrypt速すぎ。ぶっちぎりじゃん。なんでこんなに速いのよ。
しかし、GCryptはencryptしたものをencryptするのはできない模様。正確にはできるんだけど、decryptできなくなる。最初はそれでベンチマーク取ってたんだけどね、1000回くらいループさせて。おかげでベンチマークがめんどうになった。もしかしたらなんかのミスがあるのかもしれないけど、ちょっとわからない。
さらにCrypt::GCryptだとコードがすっきりしない。手続きが繁雑でめんどいのよね。そういう意味でもCrypt::CBCのほうが有利。
うーん、というわけで総合的にはCrypt::OpenSSL::AESかな。どうしても速度が欲しいときはCrypt::GCryptで。
(@577)
#2 携帯電話と無線
携帯通話運転と酔っぱらい運転、どちらが危ない? という記事を読んだ。
こういう記事を読むたびに思うのだが、なぜここに「アマチュア無線」が比較対象として登場しないのだろうか。
うちは家系なのか、俺がごく小さい頃には父がアマチュア無線をやっており、車載無線機で顔も知らない相手と交信しながらドライブにでかけてた事を覚えている。時にはそういう相手と「初対面」の時に居合わせた事もあった。
こういう無線交信は廃れて来たとはいえ、今でもトラックやタクシー、はてはレーシングカーなどに搭載され、無線交信しながら運転するというのはごく当り前のことになっている。
なのに、なぜそれが携帯電話だと危険視されるのか。はたまた危険であるというデータがでてくるのか。 俺にはそれがまったく理解できない。何が違うというのだろうか。
ぜひともこの手の研究をする人達には、アマチュア無線や同乗者との会話を、比較対象として入れておいて欲しい。安全であると一般に認められてる範疇をどれだけ逸脱するのか、ぜひ見てみたいものである。
(@653)
2006年09月12日(火) [過去の今日]
#1 NetBSDにかかるOTPの記事
OTPの「NetBSDの将来」 という記事は、NetBSD創始者による現状のプロジェクトへの意見として話題を呼んだ。まあ、それはそれとして的を得たものではあるのだろうが、 某日記の記事 にあるような、
まあ煎じ詰めれば「俺たち好みの UNIX」を維持したいだけなのであって、そこに或る種の停滞性が生じるのはしょうがないかもしれない。
という意見も見逃せない。
プロダクトとしてモダンであるべきか、ある形を維持すべきかは、そのプロジェクトの総意によって判断されるべきだろう。別な形を望みたいなら、fork()すればいいだけのことだ。OpenBSDのようにね。
たぶん、創始者としてはNetBSDへの愛着も捨てられないんだろうが、思い切ってfork()したほうが、いい結果が生まれるのかもしれないね。
(@853)
#2 簡単な事を難しく考えすぎてる例
何故他者の承認が必要なのか という記事を読んだ。
表題通りの内容なのだが、こういう事で悩む人がけっこういるらしい。
これは実に簡単な話なのだ。他人に認められなければ、人は生きていけないのだから。
考えてみりゃ当り前の話で、学校に認めてもらえなきゃ受験しても入学できないし、面接官に認めてもらえなきゃバイトすらできない。就職となれば何を言わんや、である。
仕事に就けばそれは尚重要だ。上司に認めてもらえなきゃ給料は上がらないし、お客さんに認めてもらえない仕事じゃお金は入って来ない。
他者の承認などというのは、ビタミンのように必須のものなのである。
社会生活を放棄すればいらないかもしれないが、それはそれとて自然という大きな存在に認めてもらう必要があるのだ。だからみんな他者の承認を欲しがる。当然の話だ。
もし、こういうことでなく、自らの存在をあるがままに受け入れてもらえることを承認というのだと考えているなら、それをしてくれるのは親(あるいはそれに近い存在)と自分だけである。それを簡単な言葉で言うと、「愛してる」ということなのだ。
で、まあ考えるなら「愛とは何か」というあたりにしてみたらどう? という話なのでした。
(@923)
2006年09月17日(日) [過去の今日]
#1 調子悪い
#2 やっていいことと悪いことがある、やっていけないのは……
できることはやっていいこと、できないことはやっていけないこと、というのはある種健全にも思える。やられると困ることは最初からできなくしておくのが、もっとも効率的だからだ。
が、それはかなりルールが細かくなる。融通も効きにくくなる。
そんなルール整備にコストをかけるより、先輩からの一言、親からの一言、「それは人に迷惑がかかるでしょ」という言葉で共通の倫理観を形成した方がずっと簡単な話のはずだ。
で、まあそういう事ができにくい時代になってる(倫理観が崩壊してる)から、やられちゃ困ることはできなくしとこうね、という流れになってるんだと思われ。リンク先の人が不安がってるのも当然だな。倫理観の崩壊を前提としてルール整備を始めようとしてるんだから。
(@873)