2005年03月23日

Blowfish暗号化ライブラリ

「AES暗号化ライブラリ」の続きです。
AES暗号化ライブラリが結構いい感じだったのでこれを使おうかと思いましたが、 最後にライセンスフリーで評判のBlowfishを試してみることにしました。
今更ですが、ライセンスフリーの暗号化方式と言えばBlowfishが有名でしたね。 すっかり忘れていました。

暗号化方式がライセンスフリーでも、実装(ライブラリ)の方がライセンスフリーであるとは限りません。というわけで実装を見てみることにします。
Bruce Schneier氏のサイトソースコードが配布されています。C/C++は4つありますね。全部試してみましょう。

C by Bruce Schneier
ライブラリというよりもサンプルコードのようです。ライブラリのように使うと言うわけには行かないですね。これをアプリケーションに組み込むためには一工夫必要です。
ライセンスは特に書いてないので良く分かりません。でもこのサンプルコードは、Blowfish暗号化方式はライセンスフリーと決めた考案者本人が作成したものなので、恐らく勝手に使用しても文句を言われることはないでしょう。
しかしBlowfishの実装って小さいコードですね。DESやAESよりもずっと小さいです。
C by Paul Kocher
インターフェースを見た限りではライブラリとして使えそうですが、なんとライセンスがLGPL。これは厳しい。
C (author unknown)
なんとたった1つのファイルから構成されています。サンプルコードのようですが、「C by Bruce Schneier」との違いは良く分かりませんでした。ライセンスも書いてないので分かりません。
C++ by Jim Conger
唯一のC++の実装です。「C by Bruce Schneier」をC++に直してライブラリとして使えるようにしたという感じです。
バイトオーダー周りのバグがあるようです。これだけ使っていれば問題ないとは思いますが、これで暗号化して他の実装で復号化したときに問題が発生するかもしれません。
ライセンスは書いてないので分かりません。

サンプルコードからライブラリを作るのは面倒ですので、最初からライブラリになっているものを使いたいと思います。
コードを見た限りで一番良いのは「C by Paul Kocher」ですが、ライセンスがLGPLというとても厳しいものになっています。
LGPLだと、静的リンクして実行形式のファイルを作ると、実行形式のファイルのソースコードを公開する必要があります。 しかし、私がいま作ろうと思っているもの(Bloglinesチャンネル)は、ソースコードの中に暗号化鍵が埋め込まれています。これを公開すると暗号化鍵がばれますので、公開できません。 ですので、残念ながら「C by Paul Kocher」は使えません。

残りの候補は、「C++ by Jim Conger」だけです。
バグがあることと、ライセンスが不明であることが気になるところですが、一応そのまま使えそうなのでこれを使おうと思います。

投稿者 MASATO : 2005年03月23日 22:48 | トラックバック
コメント

仕事でPostgreSQLの暗号化関数調べてたらここに来ました!

Posted by: SH2 : 2008年04月21日 21:36

>C++ by Jim Congerのバグ

Blowfish_enciphe()では引数がDWORD型に、
Encode()では引数がunsigned char*型になっているので、
リトルエンディアンだとバイトオーダーがずれる。
これかなあ?

Posted by: : 2007年01月10日 23:59

ご指摘ありがとうございます。
-----
もし著作物が『ライブラリ』とリ ンクされた実行形式ならば、著作物を完全かつ機械読み取り可能な「『ラ イブラリ』を利用する著作物」のオブジェクトコードあるいはソースコー ド(どちらかでも可) と一緒にし、ユーザが『ライブラリ』を改変した後 に再リンクして、改変された『ライブラリ』を含む改変された実行形式を 作成できるようにする
-----
ということですので、オブジェクトコードだけでも大丈夫なようですね。

Posted by: MASATO : 2005年07月04日 07:53

少し気になったので、一言。

LGPLの第6節を読む限り、LGPLが原因で「実行形式のファイルのソースコードを公開する必要」はありません。もっとも、LGPLの第3節において許可される権利を行使した結果、GPLで配布するとなると話は別ですが。

http://www.opensource.gr.jp/lesser/lgpl.ja.html

と、いうような話をしなきゃならんあたりでGPL/LGPLは面倒くさいので、当方もBSDライセンスなコードはないかいな、と探しかけた口です。みんな、Codeを書いた人をRespectしようぜ、な世界であってほしいと思います。Give & TakeでFreeを訴えなければいけない世界は少し切ないです。

Posted by: minek : 2005年07月04日 06:13
コメントする









名前、アドレスを登録しますか?