← |
2024年11月 |
→ |
日 |
月 |
火 |
水 |
木 |
金 |
土 |
|
|
|
|
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
|
26 |
27 |
28 |
29 |
30 |
|
ちょこっと前の話だが、PHP5.3.8がリリースされた。 →http://www.php.net/archive/2011.php#id2011-08-18-1 このPHP5.3.8というか、その前の5.3.7がくせ者で、 5.3.7のリリースのわずか5日後に、5.3.8がリリースされる事態となっている。
5.3.5=1月6日リリース 5.3.6=3月17日リリース を見ても、この短期間のリリースの異常さはわかるだろう。
それもそのはずで、5.3.7には重大なバグが含まれていた。 なお、本バグの経緯などは →http://blog.tokumaru.org/2011/08/php537crypt.html この辺の記事が詳しい。
で、通常、パスワードなどは、サーバーなどにそのまま保存せず、 一方向性関数で暗号化して保存するのが通例だ。
【パスワード】→(一方向性関数(=ハッシュ関数ともいう))→【ランダムに見える文字(ハッシュという)】 こうすることで万が一【ランダムに見える文字】が流出しても、 一方向性関数、つまり「AからBに変換するけど、 BからAには変換することが出来ないことが数学的に保証されている関数」を使っているため、 【パスワード】自体がばれることはない。 ※ちなみに、パスワードの認証は、ログインなどで入力されたパスワードを、 同じ一方向性関数に入力して、生成されたランダムな文字が、 保存している物と一致しているかの確認をすればよい。
ただ『「ABC」というパスワードが「XYZ」に変換される』という事を知っている人が居れば、 【ランダムに見える文字】が流出して、それが「XYZ」だと、 流出したデータを見た人が、パスワードを推測できてしまう。
このような問題に対処するために、様々な方法があるのだが、 その一つがSaltという物である。
Saltというのものは、 サーバー上で隠し持っているランダムな文字の事で、 ユーザーから入力されたパスワードにSaltを付加して 一方向性関数に与えることで【ランダムに見える文字】から【パスワード】を推測しにくくしようという物。
【パスワード】→【パスワード+Salt】→(一方向性関数)→【ランダムに見える文字】 こうすることで、 一方向性関数の入力と出力を知っている人が居て居も、 【ランダムに見える文字】から【パスワード】の推測は困難である。
実用的には、さらに他の手法との併用をするのだが、今は言及しない。
で、そのSaltですが、 今回のPHPのバグはMD5という、超メジャーな一方向性関数を用いて、 パスワード等のハッシュ化をする際に、Saltを使うと指定したら、 変換結果がハッシュではなくSaltそのものになってしまったという重大なバグ。
どれぐらい重大かというと、 PHPのバージョンアップをきちんとやっているサーバーで、 ユーザーがログインできるようなWebサイトをPHPで稼働させていて、 パスワードの保存にSalt付きMD5を使っていた場合、
PHP5.3.7にすると ・それまでのユーザーがログインできなくなる。 ・新規登録したユーザーのパスワードがABCだったとしても、 実際には、DEFだろうが、どんな値を入力したとしても、ログインできてしまう。 ・前項のユーザーはこのバグが治ったあとに、速やかにパスワードを変更しなければログインできない。 等の問題が生じます。 ※特に2番目が個人情報流出に繋がるため非常に危険。
ところで、このSalt。要するに「ソルト」、つまり「塩」である。 なので、このように、ハッシュに余計な文字を加えることを 「塩を振る」などと表現するのだが、会社の上司の一言 「料理に塩を振ったら塩だけになったのかぁ」 いや、正しいんだけど、誰が上手いことを言えと。
ところで、PHPを業務レベルで正しく覚えられる入門書って無いのかな? 初心者向けの本は、セキュリティーの話はすっ飛ばして書いてあるから、 初心者がなんちゃってで作ると、セキュリティーホールだらけになるし、 ちゃんとした、PHPのセキュリティー本とかは、初心者向けじゃないし・・・ |
21:10, Saturday, Aug 27, 2011 ¦ 固定リンク
¦ 携帯
■コメント
■コメントを書く
※コメントの受け付けは終了しました
|
|