Новый алгоритм для проверки надёжности паролей

    Многие сайты пытаются помочь пользователям установить более сложные пароли. Для этого устанавливают базовые правила, которые требуют обычно указать хотя бы одну прописную букву, одну строчную букву, одну цифру и так далее. Правила обычно примитивные вроде таких:

    'password' => [
        'required',
        'confirmed',
        'min:8',
        'regex:/^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$/',
    ];

    К сожалению, такие простые правила означают, что пароль Abcd1234 будет признан хорошим и качественным, так же как и Password1. С другой стороны, пароль mu-icac-of-jaz-doad не пройдёт валидацию.

    Некоторые специалисты говорят, что это не лучший вариант.

    В реальности Abcd1234 и Password1 — плохие пароли, а mu-icac-of-jaz-doad — хороший пароль. В этом несложно убедиться.

    Вот первые два пароля.





    А вот два пароля, которые не пройдут проверку на надёжность.





    Что же делать? Может, не стоит принуждать к использованию спецсимволов и внедрять всё новые правила, вроде запрета на повтор нескольких символов подряд, использование не одного, а двух-трёх спецсимволов и цифр, увеличение минимальной длины пароля и т д.

    Вместо всего этого достаточно сделать простую вещь — просто установить ограничение на минимальную энтропию пароля, и всё! Можно использовать для этого готовый оценщик zxcvbn.

    Есть и другие решения, кроме zxcvbn. Буквально на прошлой неделе на конференции по безопасности ACM Computer and Communications Security была представлена научная работа (pdf) специалистов по безопасности из научно-исследовательского подразделения Symantec Research и французского исследовательского института Eurecom. Они разработали новую программу для проверки надёжности паролей, которая оценивает примерное количество необходимых попыток брутфорса, используя метод Монте-Карло. Предлагаемый способ отличается тем, что требует минимальное количество вычислительных ресурсов на сервере, подходит для большого количества вероятностных моделей и в то же время довольно точный. Метод проверили на паролях из базы 10 млн паролей Xato, которые лежат в открытом доступе (копия на Archive.org) — он показал хороший результат. Правда, это исследование Symantec Research и Eurecom носит скорее теоретический характер, по крайней мере, свою программу они не выложили в открытый доступ в каком-либо приемлемом виде. Тем не менее, смысл работы понятен: вместо эвристических правил проверки паролей веб-сайтам желательно внедрить проверку на энтропию.
    Support the author
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 25

      +2
        +17
        Оффтоп:
        Для этого устанавливают базовые правила, которые требуют обычно указать хотя бы одну прописную букву, одну строчную букву, одну цифру и так далее
        Гореть им в аду. Сайт может подсказать пользователю, что пароль плохой/хороший, но никак не заставлять его использовать тот или иной. Исключение — ограничение на минимальную длину в критичных сервисах, типа онлайн-банков.
          +7
          Ха-ха. Недавно устанавливал пароль для оплаты через Visa Secure в одном банке. Обычно я требований к паролю не читаю т.к. в моих паролях есть и заглавные, и строчные, и цифры, итд и мои пароли как правило проходят все требования. А тут бац — подсвечивает красным поле, мол, неправильно ввел.
          Нажимаю на подсказку, и вижу единственное ограничение: «длина пароля не должна превышать 10 символов».

          Первая мысль — «они там нормальные вообще?».
            +4
            Иначе им сложно будет подобрать ваш пароль.
              +1
              Я, кстати, вообще не понимаю зачем нужны ограничения на максимальную длину пароля. Ведь в любом случае пароль хешируется (если не хешируется, то о чём вообще можно говорить с такими людьми) перед попаданием в базу, а длина хеша не зависит от длины пароля.
                0
                Что бы сложнее было подглядеть и в случае чего запомнить пароль. Даже если пользователь очень медленно печатает, то запомнить 12 случайных символов не обращающих какое-либо слово очень сложно.
                  0
                  Ограничение на максимальную длину.
                0
                Весело :)
                А не пробовали написать в поддержку с вопросом, типа, wtf? Интересно, что ответят.

                Я сталкивался на ограничения по максимальной длине, но они были как правило достаточные, 20-25 символов (да, у меня бывают пароли больше 30). Возможно это защита от копипаста, так как в буфере пользователя может оказаться что угодно.
                  0
                  В vnc вообще используются только первые 8 символов пароля.
                    0
                    Дайте угадаю — ВТБ24? Это имхо единственный инет-банк, где я увидел ограничение на максимальную длину пароля :)
                    +1
                    Для таких нужен ад в котором для доступа к еде нужно каждый раз вводить пароль минимум 32 символа и который надо менять раз в неделю, а при выборе нового пароля требуется пройти самую упоротую проверку на сложность пароля, а также не менее упоротую проверку на непохожесть на прежние пароли.
                    +1
                    Можно еще пробовать сжимать пароль и считать коэффициент сжатия. Или использовать алгоритмы анализа псевдослучайных последовательностей.
                      0
                      Не пройдет.
                      Длинный пароль, состоящий из 6 слов с повторяющимися буквами, сожмётся очень хорошо. Но будет криптостойким
                      0
                      Для очень больших паролей этот сервис все же будет писать, что на перебор уйдет бесконечное количество лет.

                        +1
                        На 308 нулей пишет «792 quadrillion nonagintillion years»
                        +4
                        Угу, идея сайта, собирающего новый словарик паролей.
                        • UFO just landed and posted this here
                            +1
                            Оно может передаться потом. Скажем когда вы пароль вводите, он посылается в невидимый iframe в localStorage на каком нибудь домене, а потом вы заходите неделю спустя на какой то другой сайт, тот грузит этот же iframe и берет из него пароль.
                          0
                          http://www.trypap.com/
                            +1
                            Отличная штука по сбору паролей
                              0
                              Очень свежая идея, ага. xkcd.com/936
                                0
                                Кто-нибудь уже выяснил почему многие запрещают спецсимволы? Тинькофф банк, например, их не разрешает.
                                  0
                                  Могу предположить, что так пытались запретить использовать не ASCII символы в пароле, чтобы избежать проблем с кодировками. Ну а получилось как всегда: [A-Za-z0-9]
                                    0
                                    Т.е. в тинькоффе не могут написать регулярку со спец. символами? Ну ок )
                                      0
                                      [A-Za-z0-9]{4,10}

                                  Only users with full accounts can post comments. Log in, please.