CERT.MSC.SEED_RANDOM

疑似乱数ジェネレータは適切にシードしてください。

このチェッカーは、srandom() の呼び出しでシードされていない random() 呼び出しを強調表示します。

脆弱性とリスク

明示的にシードせずに、または同じ値でシードすることによって、同じ初期状態で疑似乱数ジェネレータを呼び出すと、プログラムを複数回実行しても同じ乱数シーケンスが生成されます。

脆弱コード例

void func(void) {
    for (unsigned int i = 0; i < 10; ++i) {
        /* 常に同じシーケンスを生成します */
        printf("%ld, ", random());
    }
}

この非準拠コード例は、random() 関数を使用して 10 個の疑似乱数のシーケンスを生成します。シードされていない random() は rand() のように振る舞い、この関数を使用するプログラムが実行されるたびに同じ乱数シーケンスを生成します。