【暗号
】
ケータイで使える軽い暗号方式「K2」が登場http://www.atmarkit.co.jp/news/200603/15/k2.html
AESと比較して、同レベル以上の安全性を実現しながら、7〜10倍の処理速度を実現したという。また、K2にはAESでは困難な携帯電話上でのリアルタイム暗号化・復号処理ができるメリットがあるという。
【Ajax
】
,
暗号
】
とりあえず、試しに、md5.jsで作ったハッシュ値をサーバーへ送り、PHPのmd5()関数と結果が同じになるかどうか軽いテストをしてみます。
簡単にするため、まず、FORMのGETで送ります。
テスト
md5.jsは、今回は下記を使わせていただきました(_ _)。
http://www.onicos.com/staff/iz/amuse/javascript/expert/md5.txt
PHP側
http://jsgt.org/ajax/ref/test/md5/test1.php
<?php
outputData();
//PHP側のmd5関数でハッシュ化
function md5_on_php()
{
//ハッシュ化したい文字列
$data = 'test1234567890';
//ハッシュ化
$md5_data = md5($data);
return $md5_data ;
}
//比較出力
function outputData()
{
//PHPのMD5
echo ("<b>PHPのMD5:</b><br>".md5_on_php());
echo ('<br>');
//JavaScriptのMD5
echo ("<b>JavaScriptのMD5:</b><br>".$_GET['data']);
}
?>
js側
http://jsgt.org/ajax/ref/test/md5/test1.htm
<script charset="Shift_JIS" src="./md5.js"></script>
<script charset="Shift_JIS">
<!--
function chgToMD5(oj) {
//MD5してセット(実際にはソースに答えを書いちゃダメ^^;)
oj.form.data.value = MD5_hexhash('test1234567890');
}
// -->
</script>
<body onload="chgToMD5(document.f0.data)">
<form action="http://jsgt.org/ajax/ref/test/md5/test1.php"
name = "f0" >
<br><br>テキスト'test1234567890'を md5 したテキストを送信します。
<br>
<input size = "50" name = "data"><br><br>
<input type = "submit" value = "送信">
</form>
ちなみに、
MD5は、ハッシュ関数で
Wikipediaを引き写すと、、、
といった用途で使われるようです。昔なつかしチェックデジットみたいなものでしょうかね。。。(そういえば、15年くらい前に振込用紙の戻り片に顧客コードのチェックデジットを打ち出して、改ざん?や入力間違いチェックとかしてたことがあります(旧式だなぁ、でもかなり役に立ちました。))。
そういえば、LinuxではパスワードのハッシュにMD5を使っているものもあります。私のFedoraはそうです。
さて、これで、とりあえず、送信の途中経路でTCPをモニタされても、
一応平文ではありませんから、解析が困難にはなります。。。と思ったら、
大間違い。もしパスワードなら、盗聴したデ−タをそのままコピーして送り込めば、
おしまいです(^^;;。
そもそも、この例のようにソースに元テキストを丸見えで埋め込んではいけませんが...^^;;;
では、どう使いましょうか?
送信データに対するレスポンスの正当性チェックとか、、?
うーん、、、たとえば、
これなんか、少し楽しげな、、、
HTTP クライアントを作ってみよう(6) - Digest 認証編 -
http://x68000.q-e-d.net/~68user/net/http-auth-2.html
Basic認証は平文が流れるので気持ちが悪いですが、Digest認証なら、MD5で暗号化されて流れるのです。そう、JavaScriptでこれ作れるんではないでしょうか?、、、でも、もしかして、サーバーから「WWW-Authenticate」ヘッダが帰ってきたところでダイアログでないかな、、、(^^;;;でも、やってみないとわからない。
追記
2005.4.29
ということで、やってみました。
通常のディレクトリへAjaxでアクセスした時のヘッダとDigest認証ディレクトリへアクセスした時のヘッダを比べてみました。ダイアログは出ますね、やはり。
http://jsgt.org/ajax/ref/test/auth/digest/test1.htm
ちなみに、onreadystatechange 内のソースはこんなのです。文字通りgetAllResponseHeaders()
です。(参考までに、これはキャッシュの影響を受けます)
httpoj.onreadystatechange = function()
{
if (httpoj.readyState==4)
{
//ヘッダを全部くださいな
headers = httpoj.getAllResponseHeaders()
//こんなんでましたけど
alert(headers)
}
}
でも、キャンセルしてもなぜか「Authentication required」ページへ飛ばされません。
「Authentication required」ページへ飛ばされてみたい方は、下記を直接叩いてみてください。
http://jsgt.org/ajax/ref/test/auth/digest/room/
うーむ、でも、そうすると、このまま、非同期ってことで、Digest認証なやりとりをはじめたらどうなるのかな?ヘッダは受け取れるわけですし、、、あるいは、自前のAjax的Digest認証を作ってしまうのがよいのかぁ、、、。今日は時間が無いので、つづく、、、(GW欲しいよ〜)
せっかくなのでこの2つのヘッダを採取しておきます(Win IE 6)。
まず、通常のヘッダ。(Opera8でみたらTransfer-Encoding行が無かった、、、)
Date: Fri, 29 Apr 2005 14:15:29 GMT
Server: Apache/2.0.40 (Red Hat Linux)
Vary: accept-language
Accept-Ranges: bytes
Keep-Alive: timeout=12, max=200
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
X-Pad: avoid browser bug
Digest認証のヘッダ
Date: Fri, 29 Apr 2005 14:20:47 GMT
Server: Apache/2.0.40 (Red Hat Linux)
WWW-Authenticate: Digest realm="realm", nonce="fU8E++P1AwA=7cf06025c89e445a237ff8e17196b70d7d6a9eb3", algorithm=MD5, domain="/ajax/ref/test/auth/digest/room/", qop="auth"
Vary: accept-language
Accept-Ranges: bytes
Keep-Alive: timeout=12, max=199
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
メモ
HTTP Authorization
http://www.studyinghttp.net/auth
Apache2でDigest 認証[ダイジェスト認証]
http://www.fkimura.com/apache14.html
第 16章PHP による HTTP 認証
http://php.s3.to/man/features.http-auth.html
RFC 2617
http://www.faqs.org/rfcs/rfc2617.html
【Ajax
】
,
暗号
】
そろそろ、下記ライブラリを使わせていただく時がきたのかも。
# ライト兄弟はすばらしいですけれど、兄弟2人の力だけでコンコルドは作れません。
# スタンドアロンで作業している方の多いJavaScriptにもライブラリは大事です。
# 感謝をこめつつ、リンク。
高度な JavaScript 技集
http://www.onicos.com/staff/iz/amuse/javascript/expert/
md5.js
http://www.onicos.com/staff/iz/amuse/javascript/expert/md5.txt
Paj's Home md5.js
http://pajhome.org.uk/crypt/md5/md5src.html
【Ajax
】
,
暗号
】
AjaxはWebサービスで使われることが多いでしょうから、セキュリティへの考慮は大事かも。
PigPGP 0.2.3
JavaScriptによる1024-bit RSA 暗号系
http://www.faireal.net/demo/PigPGP/
JavaScript: 触って分かる公開鍵暗号RSA
http://www.faireal.net/articles/8/01/#d40204
高校数学で遊ぶ公開鍵暗号RSA
http://www.faireal.net/articles/5/24/#d20523
JavaScriptでPGPもどき
http://www.faireal.net/articles/5/24/#d20524
最速インターフェース研究会
[Ajax] location.hashを使ったセッション復元
http://la.ma.la/blog/diary_200502270128.htm
?username#passwordといったリクエストを送ることで
1. サーバーはusernameに対応した、暗号化された状態のデータをXMLHTTPで送る
2. クライアントは#passwordに指定された秘密鍵を使って、元のテキストに復元
3. データの更新時はクライアント側がテキストを暗号化し、サーバーにデータを預ける
これによりサーバー側が元のデータを絶対に知りえない
プライベートデータを保存できるストレージを用意することができる
素敵でござる。