Менеджеры паролей и гигиена аккаунтов
Человек не способен запомнить десятки сильных уникальных паролей — за него это делает менеджер паролей.
Менеджер паролей — программа, которая генерирует, хранит в зашифрованном виде и подставляет уникальные сложные пароли, защищённые одним мастер-паролем.
Главная угроза: повторное использование паролей
Представьте, что вы используете один пароль на форуме, в почте и в банке. Форум взломали и утекла база. Теперь злоумышленник берёт ваш логин и пароль и пробует их везде — это называется credential stuffing (набивка учётных данных). Один и тот же пароль превращает мелкую утечку в компрометацию всех ваших аккаунтов.
Решение очевидно: уникальный пароль на каждый сайт. Тогда утечка одного сайта не затрагивает остальные. Но запомнить десятки уникальных паролей невозможно — поэтому и нужен менеджер.
Что делает менеджер паролей
- Генерирует длинные случайные пароли (например, 20 символов), которые невозможно подобрать.
- Хранит их в зашифрованном хранилище. Без мастер-пароля содержимое — бессмысленный набор байтов.
- Подставляет пароль на нужном сайте, проверяя его адрес, что заодно защищает от фишинга на похожем домене.
- Часто предупреждает, если пароль засветился в известной утечке.
Что делает пароль сильным
Сила пароля — это его непредсказуемость (энтропия), а она растёт прежде всего с длиной. Длинная фраза надёжнее короткого набора спецсимволов. Сравните, насколько дольше перебирать длинный пароль (грубая оценка числа комбинаций):
import math
def combinations_bits(alphabet_size, length):
return length * math.log2(alphabet_size)
# 8 символов из 95 печатных против 16 символов из 26 букв
short = combinations_bits(95, 8)
long_phrase = combinations_bits(26, 16)
print(f"Короткий сложный (8 симв.): ~{short:.0f} бит энтропии")
print(f"Длинная фраза (16 букв) : ~{long_phrase:.0f} бит энтропии")
print("Длина важнее набора символов:", long_phrase > short)
Вывод:
Короткий сложный (8 симв.): ~53 бит энтропии Длинная фраза (16 букв) : ~75 бит энтропии Длина важнее набора символов: True
Каждый дополнительный бит энтропии удваивает время перебора. Поэтому длинные парольные фразы предпочтительнее коротких «P@ss1!».
Генерация случайного пароля правильно
Для паролей и токенов нужен криптографически стойкий генератор случайности — модуль secrets, а не обычный random (он предсказуем). Учебный пример:
import secrets
import string
alphabet = string.ascii_letters + string.digits
password = "".join(secrets.choice(alphabet) for _ in range(16))
print("Длина пароля:", len(password))
print("Все символы из разрешённого набора:",
all(c in alphabet for c in password))
Вывод:
Длина пароля: 16 Все символы из разрешённого набора: True
(Сам пароль каждый раз будет новым — это и есть смысл случайности.)
Защита самого менеджера
Мастер-пароль — единственная точка, которую нужно запомнить, поэтому он должен быть длинным и уникальным, а на сам менеджер обязательно включают MFA. Тогда даже кража зашифрованного хранилища не раскроет пароли.
Итог
- Повторное использование паролей превращает одну утечку в компрометацию всех аккаунтов (credential stuffing).
- Решение — уникальный пароль на каждый сайт, что требует менеджера паролей.
- Длина пароля важнее экзотических символов: она даёт больше энтропии.
- Для генерации используйте криптостойкий источник случайности (secrets), а сам менеджер защитите MFA.