[PHP-users 2178] Re: ブラウザのキャッシュについて

Yasuo Ohgaki php-users@php.gr.jp
Wed, 19 Sep 2001 15:18:47 +0900


大垣です。

> > $id = md5(microtime());
> > や
> > $id = md5(uniqid());
>
> これ、MD5 よりも、SHA1 のほうがよかったりしませんか?
> もう一つ聞くならば、衝突に関してはなにか考慮されてますか?

MD5でも十分と思っています。

このIDをSHA1にするほどハッシュ値の衝突に気を使うのであれば、
ここを変更するよりまず先にPHP4 Session moduleを書き換えをお
勧めします。

> まぁ、衝突の可能性と、増える bit 数のコストを比べたら、
> SHA1 ではなく MD5 で、衝突の検出を省略しても、大丈夫でしょうけど。

デフォルトではSHA1は使えません。MD5でも十分では?
コリージョンが気になる方は、それなり対応しておいた方が良いかもし
れません。単純にこのIDをキーにせず複合キーを使うなどして簡単に
コリージョンの確立を大幅に減らせます。

MD5には他のより強力なハッシュ関数に比べてコリージョンが起き易い
のでmhashを使っている方はもっと強度の強いハッシュ関数を使っても
何も問題ありません。
私は使っていますがmhashを使っている方、少ないのでは?

ところで、前にPHP4 SessionのSession IDのコリージョンに関して話題に
なった時にも書きましたが、PHP4 Sessionもハッシュアルゴリズムに
MD5を使っています。気にされる方はこちらの方を気にした方が良いです。

# 心配になってしまう方の為に:
# Session IDの場合、/dev/urandom /dev/randomから大きめの
# データを読み込むようにすれば、普通のシステムではMD5の脆弱
# 性にはそれ程気を使わなくても大丈夫です。(私はCryptographyの
# 専門家でも無く、皆さんのシステムの責任者でも無いので保証で
# ませんが)
# コリージョンに関してどうしても気になる方はX-FORWARDED-FOR
# とREMOTE_ADDRを使ってある程度対処できます。普通のシステム
# ではここまでやれば、十分と思います。(ついでに、Session hijackに
# にもある程度対処できます)
# より高い安全性を求める場合は非対称暗号を使う方が現実的です。
#
# ハッシュ関数の脆弱性のみを考えてもあまり意味がありません。シ
# ステム全体のセキュリティー要求を明確に定義し、どの程度のトレー
# ドオフが可能かトータルに考える必用があります。
#
# 極端な話し、データを守るにはコンピュータの電源を入れないとかなり安
# 全です。でもこれでは誰も使えません :)。 どのリスクを何処まで許容
# できるのかを決めなければなりません。
# いくらセッションIDのコリージョンの確立を減らしても、クラッカーが簡単
# にシステムを乗っ取れるようでは意味がありません :)

> 1 > $md5 = get_md5_value_this_form_id($HTTP_POST_VARS['FID']));
> 2 > if ($md5 == $md5(serialize($HTTP_POST_VARS)) {
> 3 >   print('Data sent already. You are not supposed to submit the
same
> 4 > data.');
>
> 細かい突っ込みですが、二行目の二番目の md5 は変数じゃなくて関数です
よね。

直打ちのため、typoです。

# ところで www.php.net 落ちてませんか?

--
Ohgaki, Yasuo (大垣 靖男) 
Mail: yohgaki@dd.iij4u.or.jp