В сети регулярно появляются новости об очередной масштабной утечке паролей. Словари паролей все толще, инструментов для перебора больше, а пользователям все сложнее придумывать надежные пароли и запоминать их без посторонней помощи.  Новые исследования предлагают нам научные методы для создания сильных и удобных паролей. Ученые из Университета Карнеги-Меллона (CMU) выяснили, как создать парольную политику с человеческим лицом и не пожертвовать безопасностью. Мы перевели ключевые рекомендации CMU и дополнили их подборкой полезных инструментов для самостоятельной проверки паролей.   Многие механизмы для формирования хороших парольных привычек имеют под собой научную базу. К примеру, сотрудники CMU доказали, что лучше увеличить минимальную длину пароля, чем принудительно использовать символы разных классов. Другие исследовательские группы разработали “паролеметры” для оценки паролей на основе больших данных. Отдельные научные работы посвящены словарям паролей. Но мало конкретных рекомендаций, как комбинировать все эти механизмы и добиваться оптимальной сложности и удобства пароля. По этой причине в CMU провели 2 эксперимента и оценили, как разные комбинации парольных политик защищают от атак и воспринимаются пользователями. Участникам экспериментов предлагали создать пароль по заданной парольной политике. Сначала ученые разными методами измерили надежность этих паролей. Затем пользователей попросили вспомнить придуманный пароль, а исследователи оценили легкость его запоминания.   Количество и классы символов. В основе всех политик лежали требования к длине пароля и числу классов: это буквы верхнего и нижнего регистра, цифры и специальные символы. Каждую политику исследователи обозначили формулой вида:  Все протестированные политики включали длину пароля не менее 8 символов. Получился примерно такой список политик: 1с8, 3c8, 4c8, 1с10, 1с12, 2с12, 3c12, 1с16. Проверка по словарю. Требования к символам помогают генерировать более сложные пароли. Но некоторые пользователи могут соблюдать требования и все равно придумать слабый пароль. Например, для политик 4c8 и 1c16 можно создать предсказуемые варианты: 1Password! и passwordpassword. Чтобы этого избежать, политики часто комбинируют с поиском по словарям.  Для словарной проверки нужен список часто используемых, предсказуемых или скомпрометированных паролей, а также сам алгоритм поиска по словарю. Например, можно искать точные совпадения в списке, а можно использовать нечеткий поиск, который найдет совпадения с разницей в регистрах или отдельных символах. Допустим, в словаре есть password. Нечеткий поиск также посчитает “словарными” пароли типа pa$$word или Passw0rd.  В эксперименте использовались словари Xato и Pwned, а также разные алгоритмы поиска:  поиск полного совпадения со строками словаря без учета регистра – case-insensitive full-string comparison (cifs);  поиск полного совпадения со строками словаря с учетом регистра – case-sensitive full-string comparison (fs);  отделение цифр и специальных символов и последующий регистронезависимый поиск точно таких же строк в словаре (strip-cifs);  регистронезависимый поиск любых 5-символьных совпадений словарных фрагментов с фрагментами пользовательского пароля (ciss). В сочетании с разными словарями получились такие варианты для проверки: Pwned-fs, Xato-cifs, Xato-strip-cifs, Xato-ciss и так далее.  Количество попыток перебора. Один из методов оценки надежности пароля – сколько попыток сделает злоумышленник, прежде чем подберет пароль. Для такой проверки используются разные модели, в том числе нейронные сети. Минимальные требования к количеству и частоте попыток зависят от многих факторов, например, используемых средств защиты или характера атаки. В своей работе CMU рассматривают 2 вида атак: при онлайн-атаках хакер может перебирать пароли только при взаимодействии с сервером. Если отрубить доступ, продолжить попытки не получится. при офлайн-атаках хакер может подбирать пароли без обратной связи от сервера, то есть дольше. Это возможно, если у злоумышленников есть краденая база с хэшами паролей.     Для оценки надежности в CMU использовали модели машинного обучения. С помощью базы данных скомпрометированных паролей нейронную сеть обучили предсказывать, какова вероятность подобрать пароль. Степень надежности определяли по количеству необходимых попыток и записывали формулой: Гипотезы по совместному использованию методов. Исследователи использовали разные комбинации политик, чтобы ответить на вопросы: Как проверка по словарю сочетается с политиками вида 1c8 и 3c8? Как разные варианты проверок по словарю сочетаются с политикой вида 1с8? Насколько разные политики по длине и классам от 1с8 до 3с12 выполняют требование надежности на уровне NN6? Насколько проверка по словарю сочетается с проверкой с помощью нейронных сетей? Насколько успешна проверка надежности на уровне NN8 и NN10 при разных требованиях только к длине пароля? Как проверка по словарю сочетается с разными требованиями к числу классов символов (от 1с8 до 4с8)? Получилась такая таблица проверки разных условий:  Теперь перейдем к измерениям удобства. На первом этапе все участники эксперимента должны были придумать пароль в специально разработанном “паролеметре”. Парольная политика выбиралась случайно из всех комбинаций, которые проверяли исследователи.  Участники эксперимента получали список рекомендаций, вводили пароль и в реальном времени наблюдали, как меняется индикатор сложности пароля.  Как только минимальные требования были выполнены, “паролеметр” давал рекомендации для усиления пароля: Пока пользователь придумывал пароль, “паролеметр” фиксировал, с какой попытки удалось выполнить требования и сколько времени понадобилось на создание правильного пароля.    Все созданные пароли проверяли с помощью нейронных сетей и предсказывали, сколько попыток потребуется для подбора.   Через 2 дня ученые просили пользователей принять участие во втором этапе и вспомнить созданный пароль. Если пользователи не отвечали через 5 дней, они выбывали из эксперимента. Для остальной выборки фиксировали долю тех, кому удалось вспомнить пароль. Исследователи анализировали все сопутствующее поведение участников: могут ли они воспроизвести пароль по памяти или записывают его, сколько времени и попыток нужно на воспроизведение.    Участников обоих этапов просили заполнить опросник и описать в нем опыт участия в эксперименте: насколько сложно создать пароль, как сильно выбранная парольная политика раздражала пользователя.   Для каждой комбинации условий ученые фиксировали объективные показатели эксперимента: количество участников, долю выбывших на втором этапе, фактическое время создания пароля, фактическое время на воспроизведение пароля, долю успешных попыток подбора пароля. Помимо этого указывались и субъективные ощущения участников из опроса: насколько создание пароля кажется им сложным и раздражающим, насколько легко его вспомнить.    Получилась такая таблица: Наиболее оптимальная парольная политика, по мнению исследователей, – настройка минимальной длины пароля и одновременная проверка пароля с помощью нейронной сети. Лучше всего в экспериментах себя показала политика вида 1c12+NN10: пароль не менее 12 символов с “угадываемостью” не менее 10 млрд попыток. Это обеспечивает достаточную защиту от офлайн-атак и необходимый уровень удобства.  Если проверка с помощью нейронных сетей не подходит, то исследователи рекомендуют задавать длину пароля не менее 8 символов и одновременно проверять пароли по словарям. Такая проверка обеспечивает меньшую защиту, но достаточно эффективна против онлайн-атак. При этом, защиту можно усилить, если увеличить минимальную длину пароля.  Проверка по словарю будет эффективнее, если использовать методы нечеткого поиска. То есть, лучше включать в поиск не только точные совпадения, но и вариации вроде P@$$w0rd. Если же используется точный поиск, стоит запускать проверку по максимально доступному словарю скомпрометированных паролей.  Пользователи испытывают больше неудобства, если им требуется создать пароль с разными классами символов. Если же пользователю нужно только соблюдать длину не менее 8–-16 символов и пройти проверку “угадываемости” пароля, то парольная политика воспринимается как удобная.   Авторы исследования призывают не забывать и о других инструментах для защиты аккаунтов: менеджерах паролей и многофакторной аутентификации (2FA). Если же хочется проверить надежность самих паролей, вот несколько инструментов: Поиграться с “паролеметром” CMU можно здесь. Этот же “паролеметр” на гитхабе. Словари паролей, по которым мы прогоняем хэши пользовательских паролей в DataLine: https://box.dtln.ru/s/grt5EKBJYTE8nLf;https://box.dtln.ru/s/2GjXzEXbzaX8PfY. Полные рекомендации в оригинале: Practical Recommendations for Stronger, More Usable Passwords Combining Minimum-strength, Minimum-length, and Blocklist Requirements. Комментарии исследователей для СМИ: Years of Research Reveals Holy Grail of Password Strength