Mersenne Twister — детерминированный PRNG с большим периодом, но предсказуемым состоянием. Для секретов используют secrets, который получает криптографически стойкую случайность от ОС.
Опишите устройство генератора случайных чисел Mersenne Twister в стандартном модуле random. Почему его нельзя использовать для генерации токенов сессий или паролей и как устроен модуль secrets на уровне системных вызовов ОС, например getrandom?
Mersenne Twister — детерминированный PRNG с большим периодом, но предсказуемым состоянием. Для секретов используют secrets, который получает криптографически стойкую случайность от ОС.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Mersenne Twister — детерминированный PRNG с большим периодом, но предсказуемым состоянием. Для секретов используют secrets, который получает криптографически стойкую случайность от ОС.
MT19937 преобразует внутреннее состояние и применяет tempering к выходу; достаточное число наблюдений позволяет восстановить состояние, поэтому длинный период не обеспечивает секретность. secrets опирается на SystemRandom и системный источник случайности; в Linux Python может использовать getrandom. Для токена задайте явное число байтов, например secrets.token_urlsafe(32), и не заменяйте его seed временем.
Источник: docs.python.org.