Python random — не для паролей: как Mersenne Twister позволяет предсказать ваши секреты
Использование стандартного модуля `random` в Python для генерации паролей — это грубая ошибка безопасности. Этот генератор, основанный на алгоритме Mersenne Twister, лишь создаёт видимость случайности. На практике, зная определённые условия (например, временную метку генерации), злоумышленник может восстановить внутреннее состояние генератора и предсказать все сгенерированные пароли — как будущие, так и прошлые.
Ключевая проблема заключается в детерминированной природе Mersenne Twister. Даже использование качественного начального значения (seed) через `os.urandom` не делает `random` криптографически стойким. В статье на Habr подробно разбирается устройство этого алгоритма и его фундаментальный недостаток: ограниченное внутреннее состояние, которое может быть полностью восстановлено по относительно небольшому объёму выходных данных. Автор предпринял практическую попытку атаки — восстановить seed по временной метке и нескольким известным паролям, что наглядно демонстрирует уязвимость.
Этот разрыв между «кажущейся надёжностью» и реальной криптостойкостью имеет прямые последствия для разработчиков и системных администраторов. Использование `random` для любых задач, связанных с безопасностью (токены, сессии, ключи), создаёт скрытую уязвимость. Для подобных целей необходимо применять специализированные модули, такие как `secrets` в Python или функции операционной системы `os.urandom`, которые обеспечивают криптографически безопасную энтропию.