Стандартная программа посева использует предсказуемый seed, делая выход предсказуемым
Этот дефект возникает, когда вы используете стандартные функции генератора случайных чисел с неконстантным но предсказуемым seed. Примерами предсказуемого seed чисел являются time
, gettimeofday
, и getpid
.
Проверка обнаруживает эту проблему со следующими функциями генератора случайных чисел:
Функции стандартной библиотеки C, такие как srand
, srandom
и initstate
Функции стандартной библиотеки C++, такие как std::linear_congruential_engine<>::seed()
и std::mersenne_twister_engine<>::seed()
(а также конструкторы этих шаблонов классов)
Когда вы используете предсказуемые начальные значения для генерации случайных чисел, ваши случайные числа также предсказуемы. Хакер может сорвать вашу программу, если узнает, как ведет себя ваша программа.
Можно использовать другую функцию, чтобы сгенерировать менее предсказуемые семена.
Можно также использовать другой генератор случайных чисел, который не требует seed. Для примера, Windows® Функциональные rand_s
API сами семена по умолчанию. Он использует информацию из всей системы, например, системное время, идентификаторы потоков, системный счетчик и кластеры памяти. Эта информация является более случайной, и пользователь не может получить доступ к этой информации.
Некоторые стандартные случайные стандартные программы по своей сути являются криптографически слабыми и не должны использоваться в целях безопасности.
Группа: Безопасность |
Язык: C | C++ |
По умолчанию: Off |
Синтаксис командной строки: RAND_SEED_PREDICTABLE |
Влияние: Средний |
ИДЕНТИФИКАТОР CWE: 330, 337 |
Deterministic random output from constant seed
| Find defects (-checkers)
| Unsafe standard encryption function
| Vulnerable pseudo-random number generator