ラベル 暗号化 の投稿を表示しています。 すべての投稿を表示
ラベル 暗号化 の投稿を表示しています。 すべての投稿を表示

2010年9月23日木曜日

httpsを使わずに暗号化通信 with aSSL 〜結局aSSL使わず解決w〜

前回の記事を書いた時点できっつい予感はしてたんですが、やはりaSSLのPHP版は動かすに至りませんでした。

原因は全然掴みきれてませんが、PHPの環境構築な可能性が一番高い気がしてます。

しかし、所望の暗号化通信自体には成功しました。
今回はjCryptionというライブラリを使用しました。

こいつもaSSLと同じようなものなんですが、jQueryに依存している点、Javascript+PHPのサンプルが文句なしに動く点が違いましたw

今回はこいつの解説とかを特に行ったりするわけではないですが、 ライブラリに付属してくるサンプルが小さくて解りやすくてすぐ動くので、導入はそこまで大変ではないはずです。

おかげさまで、ユーザにメールアドレスやらパスワードやらを送信してもらう際に、暗号化してデータをPOSTすることが可能になりました。


こんな感じで普通にボタンをクリックすると、wiresharkで見たときに、、


こんな感じで、
$_POST['email] === 'someone@somewhere.com'
$_POST['password'] === 'secret'
であることがモロばれです。

そこでjCryptionを使ってやると・・・



メールアドレスもパスワードも、全部 $_POST['jCryption'] という変数に暗号化して収められていることが分かります。

あとはこいつをPHP側で(サンプル通りに)復号化してやれば、目的達成というわけです。


しかしjQryptionにたどり着くまでに色々なライブラリを試しては挫折しを繰り返し、今日はほぼ一日暗号化に費やしてしまいました。非リア乙。

あとは今後このライブラリ周りで改善していきたいことを書いていって本日の記事を締めくくりたいと思います。


  1. こちらで指摘されているとおり、セッションで鍵情報をやり取りするのはよろしくない
  2. 暗号化はRSAの2048bitだが、さすがに処理が重い。ライブラリのソースいじってビット数をもう少し落としたい

2010年9月21日火曜日

httpsを使わずに暗号化通信 with aSSL 〜泥沼〜

先のエントリでaSSLがどうのこうの言ってましたが、ようやく実際に試すことにしました。

しかし本家のPHP版サンプルが動かない・・・
動かない間接的な原因は、ajaxのresponseTextが空になってるからなんですが、直接的な原因が掴めません。

でも本家のサンプルはちょっとでかすぎる気がします。コード読むのが辛い。

僕が実装したいのはもっと小ぢんまりしたものなので、言語はRuby+Javascriptですが、こちらのページを大いに参考にさせていただいて何とか頑張ろうかと思います。

要するに、
  1. PHP側=サーバ側で公開鍵と秘密鍵をペアで生成
  2. Javascript側=クライアント側で公開鍵を受け取る(サーバ側が公開鍵を一意に定めるNとEを渡し、それを使って公開鍵を生成)
  3. Javascript側で公開鍵を用いて、POSTするデータを暗号化
  4. サーバ側が、POSTメソッドで受け取ったデータを秘密鍵で復号化
ってのをしてるだけなはず。
で、2,3の部分でaSSLさんが大活躍すると思われます。

ちょっと試行錯誤して、できるだけ小さいサンプル作って報告しようかと思います。

まずは牛丼食べてこよ。