Table of Contents

セキュリティが必要な機能には安全な乱数生成器を利用する

ランダム文字列/乱数に機密性が必要な場合、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

関連ガイドライン

参考文献