PHPセキュリティ対策:パスワードとcrypt関数

(1/2)
機密性を確保する方法のひとつがパスワード*である。パスワードを保管する際には漏洩リスクがつきまとうので、暗号化して保管するのが定石である。

パスワードの暗号化

PHP によるパスワードの自動生成と、その強度測定については、「PHP でパスワードを生成」を参照していただきたい。ここでは、入力されたパスワードの保管と照合方法を紹介する。
space
まずパスワードの保管であるが、テキストファイルに保管するにせよ、データベースに保管するにせよ、そのまま保管してはならない。万が一、保管データが漏れてしまった場合、そのリスクはプログラム所有者が負うことになるためだ。
一般的に、パスワードは暗号化して保管する
space
パスワードの暗号化方式は様々なものがあるが、UNIX では古くからcrypt 関数を使って暗号化されてきた。PHP も、この流れを汲んでいる。
space
crypt関数は DES 暗号*をベースに、saltと呼ばれる 12 ビットのパラメーターを使って、暗号化テーブルを 4,096通りに変化させる。
厳密に言うと、復号不可能なハッシュ関数*として作用するので、暗号化ではなくハッシュ化である。
ただし、入力できるパスワード文字列は 8 文字以下で(8 文字超の部分は無視される)、出力されるハッシュ値も 64 ビット(ASCII 8 文字)と短いものなので、解読される恐れは十分ある。
したがって、crypt によるパスワードの暗号化保管に際しては、保管ディレクトリのアクセス権限を制限するなど他の機密対策も併用する必要がある。
この項つづく
header