====== セキュリティが必要な機能には安全な乱数生成器を利用する ====== ランダム文字列/乱数に機密性が必要な場合、CSPRNG(暗号学的に安全な疑似乱数生成器)を利用する。UNIX系のOSの場合、/dev/urandomなどが利用できる。しかし、OSによっては異るパスや方法でCSPRNGにアクセスしなければならない。PHPはOSで利用可能なCSPRNGを利用する * [[http://php.net/random_bytes|random_bytes()]] - ランダムなバイトデータを取得 * [[http://php.net/random_bytes|random_int()]] - ランラムな整数データを取得 を提供している。 セキュリティ(機密性)が必要なランダム値/乱数が必要な場合、上記の関数を利用しなければならない。 ===== 非適合コード例 ===== function generate_new_password($len = 12) { for ($pw = ''; $len; $len--) { // 英数字+記号のパスワード $pw .= chr(mt_rand(33, 126)); } return $pw; } [[http://php.net/mt_rand|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 | ===== 関連ガイドライン ===== ===== 参考文献 =====