ランダム文字列/乱数に機密性が必要な場合、CSPRNG(暗号学的に安全な疑似乱数生成器)を利用する。UNIX系のOSの場合、/dev/urandomなどが利用できる。しかし、OSによっては異るパスや方法でCSPRNGにアクセスしなければならない。PHPはOSで利用可能なCSPRNGを利用する
を提供している。
セキュリティ(機密性)が必要なランダム値/乱数が必要な場合、上記の関数を利用しなければならない。
function generate_new_password($len = 12) { for ($pw = ''; $len; $len--) { // 英数字+記号のパスワード $pw .= chr(mt_rand(33, 126)); } return $pw; }
mt_rand()は暗号学的に安全な乱数生成器ではない。パスワードなど機密性が必要な情報の生成に利用してはならない。
function generate_new_password($len = 12) { for ($pw = ''; $len; $len--) { // 英数字+記号のパスワード $pw .= chr(random_int(33, 126)); } return $pw; }
CSPRNGを利用したrandom_int()を利用しているので安全なパスワードが生成される。
[ルール/推奨事項のリスク評価]
[評価例 - 英語表記に統一]
| Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
| IDS05-J | medium | unlikely | medium | P4 | L3 |