Почему нельзя генерировать пароли через random в Python: разбор на практике

Вы уверены, что ваш “случайный” пароль действительно случайный?
Я тоже так думал — пока не полез разбираться, как Python на самом деле генерирует случайные значения. Оказалось, что привычный random — это не про безопасность вообще. Это генератор, который только выглядит случайным, но при определённых условиях может быть воспроизведён. Что даст нам возможность предсказать все будущие пароли и прошлые.
В статье я последовательно разбираю:
• почему классическая “энтропия пароля” часто вводит в заблуждение;
• как устроен Mersenne Twister и в чём его фундаментальная проблема;
• почему даже хороший seed (через os.urandom) не делает random безопасным;
• и что на практике можно (и нельзя) восстановить, имея время генерации, код и несколько паролей.
Я попытался воспроизвести реальную атаку: восстановить seed по временной метке и набору сгенерированных паролей. Спойлер — всё оказалось сложнее, чем кажется.
Отдельно показываю, где проходит граница между «кажется надёжным» и «действительно криптостойким», и почему secrets — это не просто «рекомендованный модуль», а принципиально другой класс генерации.

















