В связи с ростом вычислительной мощности CPU и GPU правила генерации паролей периодически пересматриваются. Специалисты обычно ориентируются на показатель информационной энтропии (в битах). Но в отношении паролей это не универсальное мерило, потому что пространство возможных вариантов не равномерно, то есть различные элементы этого пространства встречаются с разными вероятностями. Поэтому существуют более эффективные техники вскрытия парольных хэшей, в том числе атаки по словарю, по радужным таблицам, а в последнее время — с применением генетических алгоритмов и нейросетей.
Поскольку единых парольных правил нет, многие компании публикуют собственные рекомендации, которые сильно отличаются друг от друга. Иногда эти правила весьма экстравагантые.
В коллекции Dumb Password Rules собрано несколько сотен сайтов с нестандартными правилами для паролей.
Например, некоторые сайты жёстко ограничивают не только минимальную, но и максимальную длину пароля. Например, в 14, 16 или 32 символа:
Другие запрещают использовать последовательность из трёх и более одинаковых символов:
Некоторые требуют вводить пароль только мышкой, выбирая шесть из десяти цифр:
У одного из банков пароль тоже обязательно вводить мышкой, выбирая символы на очень необычном экранном кейпаде (на КДПВ).
Примечание. Если ваша компания случайно оказалась в этом списке, можно подать пулл-реквест на удаление.
Для контраста, ниже приведены базовые рекомендации по генерации надёжных паролей от нескольких авторитетных организаций и компаний.
Рекомендации по генерации надёжных паролей
В 2017 году Национальный институт стандартов и технологий США (NIST) обновил парольные спецификации, которые рекомендуются в качестве стандартов NIST. Новые требования изложены в Специальной публикации NIST 800-63B, раздел 5.1.1.2 «Запоминаемые секретные верификаторы» (NIST, 2017).
Основные требования NIST 800-63B для верификаторов (компаний и организаций), которые устанавливают собственные парольные политики:
- Верификаторы не должны устанавливать правила составления паролей, например, требовать сочетания различных типов символов или запрещать последовательное повторение символов.
- Верификаторы не должны требовать произвольной или регулярной смены паролей, как, например, предыдущее правило 90 дней. С другой стороны, смена пароля должна быть обязательной в случае его компрометации.
- Пароли должны быть длиной не менее 8 символов.
- Системы паролей должны позволять абонентам выбирать пароли длиной не менее 64 символов.
- В паролях должны быть допустимы все печатные символы ASCII, символ пробела и символы Unicode.
- При установлении или изменении паролей верификатор должен сообщить абоненту, что ему необходимо выбрать другой пароль, если он выбрал слабый или скомпрометированный пароль.
- Верификаторы должны предлагать рекомендации, например, измеритель стойкости пароля, чтобы помочь пользователю выбрать надёжный пароль.
- Верификаторы должны хранить пароли в форме, устойчивой к офлайновым атакам. К паролям следует добавлять соль и хэшировать с помощью подходящей односторонней функции деривации ключа. Функции выработки ключа принимают на вход пароль, соль и требуемые вычислительные ресурсы (cost factor), а затем генерируют хэш пароля. Их цель — сделать каждую попытку угадывания пароля злоумышленником, получившим хэш-файл пароля, дорогостоящей и, следовательно, стоимость атаки на угадывание высокой или запретительной.
Дополнительно, в вопросах B05 и B06 в разделе FAQ документации NIST к обновлённым специальным публикациям (NIST, 2020) организация официально пояснила, что обязательная смена пароля «снижает общую безопасность системы паролей» и не должна использоваться. Согласно объяснению NIST, периодическая смена паролей снижает их энтропию. Хотя это довольно спорный вопрос, по которому нет единого мнения.
Кроме того, нет единого мнения и по всем остальным правилам гненерации паролей, включая минимальную длину, минимальную энтропию, наличие/отсутствие спецсимволов.
В качестве примера можно привести рекомендации по созданию надёжных паролей от ведущих компьютерных корпораций: Microsoft, Google и Apple.
Microsoft
Советы по созданию защищённых паролей:
- Минимум 12 символов, лучше от 14-ти
- Буквы в верхнем и нижнем регистрах, цифры и символы
- Запрещено использовать слова из словаря, а также имена людей, символов, продуктов и компаний
- Пароль должен значительно отличаться от предыдущих паролей пользователя
- Простая в запоминании, но трудная для подбора фраза. В качестве примера Microsoft приводит
6MonkeysRLooking
Рекомендации для паролей:
- Минимум 12 символов
- Буквы в верхнем и нижнем регистрах, цифры и символы ASCII
Google рекомендует максимально увеличивать энтропию пароля, создавая очень длинные пароли. Чтобы их было легче запомнить, можно брать знакомые отрывки текста:
- Лирика из песни или стихотворения
- Осмысленная цитата из фильма или речи
- Отрывок из книги
- Серия слов, которые имеют для вас значение
- Аббревиатура: можно составить пароль из первой буквы каждого слова в предложении
Apple
Требования к паролю Apple ID:
- Минимум 8 символов
- Буквы в верхнем и нижнем регистрах
- Минимум одна цифра
Ну и полезная рекомендация для любых паролей — использовать хороший парольный менеджер, правила шифрования и резервного копирования приватных данных, а также двухфакторную авторизацию.
Если вам повстречался сайт или иная компьютерная система с экстравагантными парольными правилами, то можно добавить его в коллекцию Dumb Password Rules и упомянуть в комментариях к этой статье.
Комментарии (69)
aborouhin
25.05.2023 19:41+22Моё любимое (причём встречалось не один раз). Максимальная длина пароля есть (тут уже вопрос, зачем). Но про это ограничение не пишут, молча принимают введённый мной длинный пароль (по умолчанию генерю 32 символа), а в итоге сохраняется его обрезанная до N символов версия. N потом подбирается экспериментально методом удаления по одному символу с конца пароля, пока не получится войти. К сожалению, не могу вспомнить, кто именно последний раз так отличился, если склероз отпустит :) - напишу.
vvovas
25.05.2023 19:41+5Bricklink, например, так делает. Не сразу понял почему при автозаполнении с помощью парольного менеджера не могу войти, а если вручную делаю Ctrl+C/Ctrl+V, то могу. Оказалось, что пароль обрезали и при вставке в поле его тоже обрезают.
Дичь, конечно.
drath
25.05.2023 19:41+2Аналогично, часто бывает что в форме регистрации ограничение длины одно, а в форме логина - другое. Причем, что самое тупое, бывает что подрезанный пароль тоже не считается верным. И когда оригинальный пароль, отправленный через консоль в обход фронтовой валидации, не проходит валидацию уже на бэке. Получается, единственный способ залогиниться - это сбрасывать. Бонусные очки тем, у кого и в форме восстановления лимит тоже не соответствует предыдущим.
Wesha
25.05.2023 19:41+7А представьте себе, какой жим-жим произошёл в один прекрасный день у меня, когда я опечатался в пароле — а он ПОДОШЁЛ! Я уж подумал было, что сервак сломали, но нет — он просто молча обрезал пароль до 8 симоволов, а я опечатался в десятом.
Neusser
25.05.2023 19:41У меня однажды была вообще сюрреалистическая ситуация. Ввожу пароль медленно - не подходит. Ввожу быстро - подходит, но тоже не всегда, а через раз примерно. Выяснилось, что когда я его менял, то дважды одинаково опечатался - вводил быстро и при быстром наборе два раза подряд кнопки в другом порядке нажались.
vitecd
25.05.2023 19:41+1будет здорово, если хэш посчитать по 32 символам, а сверять, допустим, с сохраненными 8ю ))
nikis05
25.05.2023 19:41+17О да, мое любимое - самодеятельность в жанре "художественный регекс". Нельзя использовать сгенерированный менеджером паролей
rigorously tight horse speculation parameter significantly butterfly mangling discourage
, ведь в нем нет ни одной цифры, ни одного символа, ни одной заглавной буквы, и он еще и длиннее 20, атятя! Другое делоPassword123-
, который отвечает всем требованиям которые я собезъянил с гугл почты (а там ведь не дураки сидят).К этой же категории бессмысленной траты долларов заказчика, нервов юзера, и циклов CPU относятся "валидаторы емейла". Если вам действительно так уж важно убедиться, что юзер действительно ввел реально рабочий емейл - для этого умными людьми давно изобретен хитромудрый способ под названием "отправить ссылку на этот емейл". Если же вы просто хотите проверить, что юзер понял, что от него требуется, и не ввел случайно в поле для почты свой телефон, вам поможет
/^.*@.*\..*$/
, а еще лучше/@/
. Не надо лепить туда простыню с перечислением всех известных человечеству доменных имен, и цикломатической сложностью как у шахматного движка.aborouhin
25.05.2023 19:41+3О да, верификация емейла - отдельная боль. Регулярно сталкиваюсь с тем, что мою почту с именем пользователя до @ длиной один символ какая-то очередная форма считает невалидной. Для таких есть alias подлиннее, конечно, но бесит.
Для верификации, кстати, можно ведь даже не отправлять письмо, а на лету проверять, что у домена MX запись есть, на 25 порту там нам отвечают и в ответ на RCPT TO:<email> не ругаются. Если пользователь нам важен, то так мы и страхуемся от опечаток в адресе, и исключаем лишний этап подтверждения аккаунта, который может пойти не так (письмо со ссылкой не дойдёт / попадёт в спам / пользователь забудет и т.п.)
bronenos
25.05.2023 19:41+1Для верификации, кстати, можно ведь даже не отправлять письмо, а на лету проверять
А как застраховаться от того, что допустил опечатку (случайно либо намеренно), и вписал по факту ящик вообще другого человека?
aborouhin
25.05.2023 19:41+1От всего не застраховаться, если нужна 100% уверенность в принадлежности мейла пользователю - без письма со ссылкой не обойтись. Но, во-первых, так ли часто такая уверенность нужна? Во-вторых, одно другого не отменяет, можно при регистрации быстро, пока пользователь никуда не переключился, проверить сам факт существования мейла, а уже потом, если надо, просить верификацию. Здесь же разговор начался не про неё, а про первичную валидацию по регекспам и пр., которую я таким образом предложил улучшить.
DaneSoul
25.05.2023 19:41+2и исключаем лишний этап подтверждения аккаунта, который может пойти не так (письмо со ссылкой не дойдёт / попадёт в спам / пользователь забудет и т.п.)
Если что-то пойдет не так с письмом верификации, то высока вероятность что те же проблемы возникнут и когда на этот е-мейл будет отправлена критически важная информация от сервиса (мы же для этого его запрашиваем?). Поэтому, ИМХО, лучше это сразу проверить на этапе регистрации.
aborouhin
25.05.2023 19:41+2У меня, если верить менеджеру паролей, больше 500 аккаунтов на разных сайтах. Изрядная их часть сходу просила верификацию почты. Но вот "критически важную информацию" на почту присылают единицы.
Кстати, многие сайты поступают в этой части довольно, на мой взгляд, разумно - регистрация проходит без верификации почты, но для совершения каких-то значимых действий (связанных с финансами, например) её уже надо подтвердить.
MaxKozlov
25.05.2023 19:41Гениальные сберовцы в своём гигачате зарегистрироваться не дают, если в емейле встречается больше одного спецсимвола
и кто им сказал, что почты типа cber--bank@sbrf.ru не бывает ?
Mur81
25.05.2023 19:41+7У одного из банков пароль тоже обязательно вводить мышкой, выбирая символы на очень необычном экранном кейпаде
Требование вводить пароль мышкой это защита от кейлоггеров. Ввод с помощью необычного экранного кейпада, я так понимаю, защита от записи трека мышки (кейпад, вангую, каждый раз разный).
И вот уже это не выглядит настолько бредовым. Хотя я не берусь судить насколько это эффективно.
aborouhin
25.05.2023 19:41+7Ну из-за единиц ротозеев, которые имели неосмотрительность словить кейлоггер, заставлять ежедневно мучиться тысячи (а если это крупный банк - то и десятки/сотни тысяч) людей - так себе идея в любом случае. Лучше уж 2FA обязательную делать, тут один кейлоггер не поможет; а у кого и кейлоггер завёлся, и 2FA утекла - тому уже, скорее всего, не поможет вообще ничего...
vilgeforce
25.05.2023 19:41+1Если бы ротозеев были единицы... Их же тысячи! И да, особо ушлые плохие парни явно целятся на обход 2FA, я правда, не знаю как они это делают. Но раз стараются - есть потенциал...
rrrav
25.05.2023 19:41Punto Switcher использовали в прежние времена как кейлоггер (при умелом конфигурировании). Причем, никакой антивирус на него не ругался.
Wesha
25.05.2023 19:41+1Google рекомендует максимально увеличивать энтропию пароля, создавая очень длинные пароли. Чтобы их было легче запомнить, можно брать знакомые отрывки текста:
* Лирика из песни или стихотворения
Классный совет: "как уменьшить энтропию, считая, что увеличиваешь её".
P.S. Хинт: количество стихотворений конечно и не так уж и велико.
P.P.S. У скольки хабровчан пароль "сОРОК ТЫСЯЧ ОБЕЗЬЯН В ЖОПУ СУНУЛИ БАНАН."?
man55
25.05.2023 19:41Позвольте, но вот же он: https://habr.com/ru/companies/globalsign/articles/737694/#comment_25584832
yurikmellon
25.05.2023 19:41о да, Чинга знает толк в придумывании паролей, хотя пароль Стрелка мне нравится больше. Интересно есть он в словаре?
bbc_69
25.05.2023 19:41Классный совет: "как уменьшить энтропию, считая, что увеличиваешь её".
"сОРОК ТЫСЯЧ ОБЕЗЬЯН В ЖОПУ СУНУЛИ БАНАН."?
Это ж база. А там можно и повыпендриваться.
$0R()k T1000_...
Удачи такое подобрать.
К тому же, если брать по первой букве от слова в случайном стихе, то получится почти случайная последовательность.
Вообще, общий совет такой: надо найти способ запомнить случайный набор символов. Или то, то запомнил превратить в случайный набор символов.
Wesha
25.05.2023 19:41Надо найти способ запомнить случайный набор символов.
Есть такой способ, и вы его знаете!
bbc_69
25.05.2023 19:41Хм... Так-то поиск будет по словарям, так что энтропия будет меньше. Как правильно считать - не силён.
ЗЫ в интернете как-то не особо понятно, где сарказм, а где на серьёзных щах. Если я промахнулся - простите!
Wesha
25.05.2023 19:41Если в языке всего 2048 разных слов — это 11 бит энтропии. Если слов четыре — то это 4 * 11 = 44 бита энтропии. Как Вы понимаете, в среднем человеческом языке сильно больше 2048 слов, так что это оценка снизу.
bbc_69
25.05.2023 19:41Секундочку! Давайте разбираться.
Ваша оценка верна при условии, что к обоим паролям будет одинаковый подход к взлому. Т.е. оно будет верно если все вокруг будут писать сложные пароли, а вы один - длинный. Если же рассматривать это именно как разные стратегии (если угодно, преобладающие стратегии), то имеем:
длинный пароль, составленный из короткого алфавита (33 символа)
Короткий пароль из большого алфавита.
Насколько большого? Ну, каждую букву мы можем представить в виде разных регистров (и, И), транслитерации (i, I) и замены по клавиатуре (b, B). Некоторые можем заменить на цифру( при желании можно и все). Итого имеем 11 * 6 = 66+ бит энтропии (это без учёта цифрового кодирования). Как видите, больше чем просто длинный пароль. Если ошибся - поправьте. И это я не говорю о других способах усложнения пароля (да хотя бы вставке). Правда пользователю придётся запоминать слово + паттерн преобразования, что действительно не так просто.
Из конструктива:
Лучшая стратегия, безусловно, - быть не таким, как все. Правда 8 млрд человек не могут быть уникальными, так что это недостижимо впринципе.
Что-то есть в подходе, когда у пользователя есть выбор: короткий сложный пароль или длинный попроще. Кому что проще запоминать, получается.
Wesha
25.05.2023 19:41Проблема не в том, что "сложно придумать сложный пароль", а в том, чтобы "запомнить сложный пароль". Приснопамятный "верно батарея лошадь скрепка" запоминается гораздо легче, протому что оно элементарно визуализируется как ситуация, в отличие от "jWm8a&1X7".
izh-vii
25.05.2023 19:41Из тех, которыми приходиться пользоваться, самый раздражающий - Ситилинк. Конкретное правило не опишу, но каждый раз, когда приходится сталкиваться с восстановлением вырывается много нецензурных слов и клятвы никогда больше не покупать у них ничего.
aleksandy
25.05.2023 19:41+3Самую мякотку-то и не рассказали. Не уверен, что до сих пор актуально, но у Interbase/Firebird пароль мог быть любой длины, но использовались только первые 8 символов. В связи с чем даже дефолтовый пароль "masterkey" был не совсем верным, т.к. достаточно было "masterke".
Wesha
25.05.2023 19:41Я уже выше написал, что в один прекрасный день эта хохма меня до чёртиков напугала.
ogost
25.05.2023 19:41Много лет назад столкнулся с этим, причём для доступа из консоли "masterkey" не подходил. Думал сменили дефолтный, пока на просторах интернета случайно не наткнулся на ограничение в 8 символов.
K0styan
25.05.2023 19:41+2Аська той же ерундой страдала. Это, к слову, сильно упрощало брутфорс и угон "шестизнаков".
Tippy-Tip
25.05.2023 19:41С 3 версии есть выбор: либо оставить старый формат с максимальной длиной пароля в 8 символов, либо перейти на новый, в котором максимальная длина пароля ограничена 20 символами. Если сервер установлен на Windows, можно использовать Windows-авторизацию. Ну и для каждой базы можно определить свои методы аутенификации: одной оставить старый формат, для другой – использовать Windows-авторизацию...
drath
25.05.2023 19:41Поэтому существуют более эффективные техники вскрытия парольных хэшей, в том числе атаки по словарю, по радужным таблицам, а в последнее время — с применением генетических алгоритмов и нейросетей
Насколько это вообще актуально про радужные таблицы? Баловался перебором лет 15 назад, уже тогда это казалось глупостью забивать диск хламом когда видеокарты перебирают миллиарды хэшей в секунду, а с тех пор так только ленивые и совсем злоумышленники не обновили еще алгоритмы или хотя-бы не засолили хэши. Да и вроде как 12 лет уж как все используют стратегию словарь+замены которая выявляет 95%+ паролей.
Darkholme
25.05.2023 19:41Хотел выразить несогласие, но по ходу написания понял что и нечего выражать. Для md5 со скоростью перебора в 50 миллиардов комбинаций вряд ли нужны радужные таблицы, а у тех кто использует что-то более новое скорее всего хэши солёные. Но подозреваю что могут быть кейсы, когда используется несолёный SHA2-512 или что-то еще круче.
2fidel
25.05.2023 19:41Пару лет назад мы запускали на кикстартере похожий проект. Делали пластиковык карточки и стикеры с сеткой символов. Получилось неплохо. Я до сих пор пользуюсь
drath
25.05.2023 19:41Вы кажется веткой ошиблись, товарищ ???? Радужные таблицы это про то чтобы заранее обсчитывать хэши, а у вас про... генерацию случайных?
Germanjon
25.05.2023 19:41+4Пароль должен значительно отличаться от предыдущих паролей пользователя
Получается, система хранит предыдущие пароли в открытом виде, чтобы сравнить "значительность"?
titbit
25.05.2023 19:41Я думаю "значительно" - это просто рекомендация. А для поиска полных совпадений со старыми паролями можно хранить соленые хеши всех паролей (надеюсь что хранят именно хеши, а не сами пароли).
Ndochp
25.05.2023 19:41Ну один предыдущий обычно запрашивают плейнтекстом вместе с 2 раза введенным новым в момент смены.
tba
25.05.2023 19:41+7Из классики:
Ваш пароль используется уже более 30 дней, необходимо выбрать новый!
- Розы.
- Извините, в вашем новом пароле слишком мало символов!
- Розовые розы.
- Извините, пароль должен содержать хотя бы одну цифру!
- 1 розовая роза.
- Извините, не допускается использование пробелов в пароле!
- 1розоваяроза.
- Извините, необходимо использовать, как минимум, 10 различных символов в пароле!
- 1гребанаярозоваяроза.
- Извините, необходимо использовать, как минимум, одну заглавную букву в пароле!
- 1ГРЕБАНАЯрозоваяроза.
- Извините, не допускается использовать несколько заглавных букв, следующих подряд!
- 1ГребанаяРозоваяРоза.
- Извините, пароль должен состоять более чем из 20 символов!
- 1ГребанаяРозоваяРозаБудетТорчатьИзТвоейЗадницыЕслиТыНе ДашьМнеДоступПрямо**дьСейчас!
- Извините, но этот пароль уже занят!Kriminalist
25.05.2023 19:41Последняя строчка должна быть - Ваш пароль используется уже более 30 дней, необходимо выбрать новый!
emusic
25.05.2023 19:41Некоторые требуют вводить пароль только мышкой
У французов это, судя по всему, возведено на уровень национальной идеи. Не удивлюсь, если окажется, что какие-нибудь "эксперты" когда-то протолкнули "заключение", официально принятое в качестве рекомендации.
Еще у них все интернет-провайдеры устанавливают пароли в 16-20 символов на маршрутизаторах, передаваемых клиенту при подключении. И по барабану, что те почти поголовно сразу же меняют их на гораздо более простые.
выбирая шесть из десяти цифр
И при этом наивно считают эти цифровые пароли "безопасными". Что характерно, больше всего это любят французские банки.
Kahelman
25.05.2023 19:41Пароль должен значительно отличаться от предыдущих паролей пользователя
И как это можно контролировать если хранить хеш?
affinity
25.05.2023 19:41как вариант — хранить десяток/другой хешей по частям пароля. И при совпадении скажем половины — ругать за "похожий" пароль. Ну и общий хеш для сравнения само собой остается.
Hlad
25.05.2023 19:41А хеши к таким половинкам пароля подбирать не проще будет?
affinity
25.05.2023 19:41а где их взять и зачем это делать? Если слили базу? Да, вероятно это могло бы помочь, не спорю. Хотя вы изначально не знаете их порядрок, так что врядли поможет сильно… Да и если слили базу — то всеравно пароль рекомендуется менять
Andrey_Epifantsev
25.05.2023 19:41Можно по быстрому провести перебор паролей похожих на новый пароль и если хэш одного из них совпадёт с хэшем старого пароля - значит пароли похожи.
PsihXMak
25.05.2023 19:41Помню после регистрации на одном сайте, мне мой введённый пароль на почту прислали. Вот весело было. К сожалению, через поддержку так и не достучался.
Wesha
25.05.2023 19:41Помню после регистрации на одном сайте, мне мой введённый пароль на почту прислали.
На одном??? "Да их тут тысячи!!!" (c)
belch84
25.05.2023 19:41Вот как нужно:
openssl rand -base64 64
GvdSQ/9N8UY8fecl0si6LnsJWmuPA1U4ryjI/MEyZHF25s74e6uDkYBMotikGfCO
YRpUVG21RbRnVQZt5ahZMA==
bbc_69
25.05.2023 19:41+1Лично меня больше всего бесит необходимости периодической смены пароля в купе с проверкой на схожеть старого и нового паролей. Через три итерпции напрочь забываешь, а какой пароль у тебя должен быть здесь...
На счёт похожести с предыдущим паролем верно заметили - а как хранить-то.
Wesha
25.05.2023 19:41Решение давно найдено: меняем пароль на "старыйпароль1", тут же на "старыйпароль2", потом на "старыйпароль3" и так далее, и в конце обратно на "старыйпароль"
Наиболее упёртые сайты сдавались итерации так на восьмой.
Nialpe
25.05.2023 19:41"Меня зовут О и Капитан Смек молодец а кто не согласен тот пумп1"
И в конце единичка...
MountainGoat
Пароль Aa1!Aa1!Aa1! удовлетворяет любым самым дурным правилам, и чем дурнее правила, тем больше людей будут пользоваться именно им. Особенно хорош при принудительной частой смене, на следующий месяц будет Bb2@Bb2@Bb2@ и так далее
white-wild
И тут вводят правило: не более двух одинаковых символов в пароле...
Wesha
Нет препятствий патриотам!
AaBbСсDd1!2@3#4$
Didimus
Откуда у вас мой пароль? (с) космобольцы
izh-vii
Хороший пароль, спасибо, буду использовать.
Если будут ограничения на одинаковые символы, можно модифицировать до Aa1Bb2Cc3
fedorro
Нельзя использовать одинаковые символы без учета регистра
Треть символов должна быть буквенными, треть спецсимволами, треть числовыми.
...
...
Извините такой пароль уже используется пользователем admin ????