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