ピースペース

C#でBlowfishするときの注意

leave a comment »

.NETには標準でBlowfishな実装がない。ので、別途ライブラリ(クラス)が必要。
は、Blowfish本家サイトにあるのでそれを使えばよい。
http://www.schneier.com/blowfish-download.html

さて、自分で暗号化して複合化する場合は特に何も意識することなく
このクラスの頭にコメントで示してある簡単なサンプル通りに使えばよい。

そもそも、今回、なんでBlowfishか?というと
開発中のシステムが連携する別システムからのご指定があったのである。
こちらにアクセスするときには問い合わせ内容をBlowfishで暗号化してネ!と。
で、暗号化キーはこれを使ってね。と

うえのBlowfishCSクラスを使うには、単に暗号化キーを取決めしただけでは十分ではなくて
キーはバイト列化して使うとか、Encrypt_ECBなのかCBCなのかも決めておく必要はある。
まあ、そこはだいたい問題なくクリアできるだろう。

今回、オラが暗号化素人のためにはまってしまったのはパディングについてだ。
相手側複合器は、暗号がPKCS#5Paddhingしてあるのが当然だと思ってたんだよね。
ええ、ええ、当たり前なんでしょ! きっとそうなんでしょう! 一部界隈でわ…

しかしながら、上記Blowfish本家サイトで、C#なBlowfishクラスの使用に関して
パディングをどうするか?なんて一切説明されてないんでやんすよ。
ブロック暗号のパディングの説明を読んでも、暗号化時にパディングして複合化時にそれを除去する。としか説明されていない。
だば、そんな面倒なことが必要ならそれは内部的によきにはかられている!と思うのが人情ってもんじゃないすか。
という情に流されてはまった;

Blowfishはパディング方式には感知しないんだよね。それはBlowfish外側の関心事。
で、一部界隈ではBlowfishを使った暗号化とPKCS#5Paddhingがほぼデフォルトでペアとして扱われている。
すれ違わないわけがない。
お互い、自分文化の常識で相手を見ているうちは、すれ違わないわけがない!というアレですな;;

てことで結論
C#でBlowfishする人は、(きっと相手があるだろうから)相手にパディングはどうするのか?を確認しておいた方がいい。
相手には当たり前かもしれない、その機能はBlowfishCSには含まれてないですからっ!!

てか、こうゆうオンラインのチェックツールにもパディングに関する説明はないけど、どう扱ってるんだろか??
http://www.tools4noobs.com/online_tools/encrypt/

Written by nasu38yen

2012年4月24日 @ 4:19 PM

カテゴリー: 未分類

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。