ja:rule:enc:セキュリティが必要な機能には安全な疑似乱数生成器を利用する
セキュリティが必要な機能には安全な乱数生成器を利用する
ランダム文字列/乱数に機密性が必要な場合、CSPRNG(暗号学的に安全な疑似乱数生成器)を利用する。UNIX系のOSの場合、/dev/urandomなどが利用できる。しかし、OSによっては異るパスや方法でCSPRNGにアクセスしなければならない。PHPはOSで利用可能なCSPRNGを利用する
- random_bytes() - ランダムなバイトデータを取得
- random_int() - ランラムな整数データを取得
を提供している。
セキュリティ(機密性)が必要なランダム値/乱数が必要な場合、上記の関数を利用しなければならない。
非適合コード例
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 |
関連ガイドライン
参考文献
ja/rule/enc/セキュリティが必要な機能には安全な疑似乱数生成器を利用する.txt · Last modified: 2017/06/29 11:56 by yohgaki
