Что измеряет энтропия
Энтропия пароля показывает, сколько попыток в худшем случае понадобилось бы, чтобы перебрать все варианты из заданного набора. Её выражают в битах: каждый бит удваивает число вариантов. Пароль с энтропией 40 бит можно выбрать из примерно триллиона комбинаций, с 60 битами уже из миллионов триллионов, и так далее.
Считается она просто, если пароль сгенерирован случайно. Нужно знать размер алфавита и длину. Для пароля длиной L из алфавита размером N число вариантов равно N в степени L, а энтропия в битах равна L, умноженной на двоичный логарифм от N. Например, шесть случайных строчных латинских букв дают около 28 бит: логарифм от 26 примерно 4,7.
Длина против сложности
Отсюда следует полезное практическое правило: добавление длины растит стойкость быстрее, чем добавление типов символов. Расширение алфавита с 26 до 94 печатных символов добавляет к каждой позиции менее двух бит. А каждый лишний случайный символ добавляет от 4,7 до 6,5 бит. Пароль из двенадцати случайных строчных букв, около 56 бит, надёжнее восьмисимвольного из всех видов символов, около 52 бит, а главное, запоминается лучше.
Поэтому для запоминаемых секретов советуют парольные фразы из нескольких случайно выбранных слов: каждое слово из списка в несколько тысяч даёт около 11 или 12 бит. Пять случайных слов дают заметный запас, при условии что они выбраны генератором, а не придуманы вами.
Проблема человеческой случайности
Формулы работают только для действительно случайных паролей. Люди выбирают предсказуемо: слово из словаря, заглавная в начале, цифры в конце, замена «о» нулём. Атакующие учитывают эти привычки и сначала проверяют популярные пароли, словарные слова, их типовые видоизменения и утёкшие ранее пароли. Реальная энтропия придуманного пароля обычно намного ниже расчётной.
Поэтому калькуляторы стойкости, которые считают только длину и наличие спецсимволов, вводят в заблуждение. Более честные оценщики учитывают словари и шаблоны. Ещё хуже — повторное использование пароля: сколько бы бит в нём ни было, после утечки на одном сайте он бесполезен на другом, о чём говорит тема подстановки утёкших паролей.
Скорость перебора и роль хранения
Насколько важны биты, зависит от того, с какой скоростью атакующий пробует варианты. Если он подбирает пароль через форму входа, скорость ограничена временными отключениями входа и задержками, и достаточно даже скромной стойкости. Если же он получил базу хешей, пробовать можно локально с огромной скоростью на видеокартах, и тогда решающее значение получает способ хранения.
Сервисы, которые хранят пароли правильно, применяют медленные функции с солью, из-за чего каждая попытка стоит дорого. Быстрые хеши вроде обычного SHA-256 для этого не подходят, как мы объясняли на странице про него. Практически это значит: у вас нет возможности проверить, как хранит пароль сервис, поэтому нужны уникальные пароли и двухфакторная аутентификация.
Как проверить себя
Создайте пароль генератором в менеджере паролей: 16 и более случайных символов для сервисов или 5 и более случайных слов для главного пароля. Не пытайтесь оценивать стойкость на сайтах, куда вводите настоящий пароль. Используйте тестовые примеры, схожие по структуре.
Проверьте, не встречался ли ваш адрес почты в известных утечках: для этого есть общедоступные сервисы проверки, но вводить туда сам пароль не нужно. Включите двухфакторную защиту, а лучше ключи доступа, чтобы утечка пароля не решала всё. Подробнее о втором факторе написано в статье про двухфакторную аутентификацию.
Пример расчёта на пальцах
Сравним три варианта. Восемь случайных символов из набора в 94 знака дают около 52 бит, ведь каждый символ приносит примерно 6,5 бит. Четыре случайных слова из списка в 7776 слов, как в известном методе с игральными костями, дают около 51 бита. Шесть таких слов уже около 77 бит, а десять случайных строчных букв около 47 бит. Видно, что словесная фраза при сопоставимой стойкости проще запоминается, а длина решает больше, чем разнообразие символов. Если пароль выбран человеком, реальные цифры окажутся ниже расчётных.