観察 コマ33・34

パスワードの保存方法

パスワードは平文保存禁止。ハッシュ化して保存する。ただし単純なハッシュ(MD5/SHA-1)は 高速に総当たりでき、レインボーテーブルで逆引きされる。ソルト(利用者ごとの ランダム値)とストレッチング(反復)で守る。

平文(保存してはいけない)password
MD5(弱い)5f4dcc3b5aa765d61d8327deb882cf99
SHA-256(速い=総当たりに弱い)5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8
SHA-256 + ソルト7e1dd6176cdb15aaf5e87ccf7210e56b3caefa856b4052f69f1ecf4011cc3878
bcrypt(ソルト+ストレッチング内蔵・推奨)$2y$10$UHsZ0ygqo9m09HB7sdNI8.zrtIQLfPujtZYsW7ondvSAi9l.RhZkG

同じパスワードでも、ソルトが違えばハッシュが変わる(レインボーテーブル無効化)。 bcrypt は毎回異なる値になり、反復回数で総当たりを遅くできる。実装は自作せず password_hash() / password_verify() を使う。

ストレッチングの効き目を数字で見る

総当たりの速さは「1秒間に何回ハッシュを計算できるか」で決まる。 このサーバーで MD5 と bcrypt を実際に計算して比べる。

あなたの座席ID: 2027b4df74dd この演習をリセット 演習一覧へ