Deterministic random output from constant seed

Стандартная программа отбора использует постоянный seed, делающий детерминированный выход

Описание

Этот дефект происходит, когда вы используете случайные стандартные функции, которые имеют детерминированный выход, учитывая постоянный seed.

Риск

Когда некоторые случайные функции, такие как srand, srandom, и initstate, имейте постоянные seed, результаты производят тот же выход каждый раз, когда ваша программа запущена. Хакер может разрушить вашу программу, если они знают, как ваша программа ведет себя.

Фиксация

Используйте различную случайную стандартную функцию или используйте непостоянный seed.

Некоторые стандартные случайные стандартные программы по сути криптографически слабы, и не должны использоваться в целях безопасности.

Примеры

развернуть все

#include <stdlib.h>

void random_num(void)
{
    srand(12345U);
    /* ... */
}

Этот пример инициализирует генератор случайных чисел с помощью srand с постоянным seed. Генерация случайных чисел детерминирована, делая эту функцию криптографически слабой.

Коррекция — использует различный генератор случайных чисел

Одна возможная коррекция должна использовать генератор случайных чисел, который не требует seed. Этот пример использует rand_s.


#define _CRT_RAND_S
#include <stdlib.h>
#include <stdio.h>

unsigned int random_num_time(void)
{

    unsigned int number;
    errno_t err;
    err = rand_s(&number);

    if(err != 0)
    {
        return number;
    }
    else
    {
        return err;
    }
}

Информация о результате

Группа: безопасность
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: RAND_SEED_CONSTANT
Удар: носитель
ID CWE: 330, 336

Введенный в R2015b