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

'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 носит скорее теоретический характер, по крайней мере, свою программу они не выложили в открытый доступ в каком-либо приемлемом виде. Тем не менее, смысл работы понятен: вместо эвристических правил проверки паролей веб-сайтам желательно внедрить проверку на энтропию.

Комментарии (25)



  1. ploop
    25.10.2015 19:44
    +17

    Оффтоп:

    Для этого устанавливают базовые правила, которые требуют обычно указать хотя бы одну прописную букву, одну строчную букву, одну цифру и так далее
    Гореть им в аду. Сайт может подсказать пользователю, что пароль плохой/хороший, но никак не заставлять его использовать тот или иной. Исключение — ограничение на минимальную длину в критичных сервисах, типа онлайн-банков.


    1. splatt
      26.10.2015 00:04
      +7

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

      Первая мысль — «они там нормальные вообще?».


      1. ankh1989
        26.10.2015 02:35
        +4

        Иначе им сложно будет подобрать ваш пароль.


      1. KivApple
        26.10.2015 03:11
        +1

        Я, кстати, вообще не понимаю зачем нужны ограничения на максимальную длину пароля. Ведь в любом случае пароль хешируется (если не хешируется, то о чём вообще можно говорить с такими людьми) перед попаданием в базу, а длина хеша не зависит от длины пароля.


        1. Wernisag
          27.10.2015 09:04

          Что бы сложнее было подглядеть и в случае чего запомнить пароль. Даже если пользователь очень медленно печатает, то запомнить 12 случайных символов не обращающих какое-либо слово очень сложно.


          1. ploop
            27.10.2015 10:32

            Ограничение на максимальную длину.


      1. ploop
        26.10.2015 08:31

        Весело :)
        А не пробовали написать в поддержку с вопросом, типа, wtf? Интересно, что ответят.

        Я сталкивался на ограничения по максимальной длине, но они были как правило достаточные, 20-25 символов (да, у меня бывают пароли больше 30). Возможно это защита от копипаста, так как в буфере пользователя может оказаться что угодно.


      1. wormball
        26.10.2015 11:30

        В vnc вообще используются только первые 8 символов пароля.


      1. PingWin
        26.10.2015 18:11

        Дайте угадаю — ВТБ24? Это имхо единственный инет-банк, где я увидел ограничение на максимальную длину пароля :)


    1. ankh1989
      26.10.2015 02:35
      +1

      Для таких нужен ад в котором для доступа к еде нужно каждый раз вводить пароль минимум 32 символа и который надо менять раз в неделю, а при выборе нового пароля требуется пройти самую упоротую проверку на сложность пароля, а также не менее упоротую проверку на непохожесть на прежние пароли.


  1. KvanTTT
    25.10.2015 21:24
    +1

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


    1. urix
      26.10.2015 15:53

      Не пройдет.
      Длинный пароль, состоящий из 6 слов с повторяющимися буквами, сожмётся очень хорошо. Но будет криптостойким


  1. KvanTTT
    25.10.2015 21:29

    Для очень больших паролей этот сервис все же будет писать, что на перебор уйдет бесконечное количество лет.


    1. Vlad_IT
      26.10.2015 00:21
      +1

      На 308 нулей пишет «792 quadrillion nonagintillion years»


  1. Jeditobe
    25.10.2015 23:16
    +4

    Угу, идея сайта, собирающего новый словарик паролей.


    1. Liumee
      26.10.2015 03:13
      +1

      Тоже посетила такая параноидальная мысль. Но посмотрел в инспекторе — ничего не передается. А ведь до этого вебдванольного бума с переносом какой только можно логики на сторону клиента, вполне возможно что такие сайты отправляли бы данные на сервер.


      1. ankh1989
        26.10.2015 12:23
        +1

        Оно может передаться потом. Скажем когда вы пароль вводите, он посылается в невидимый iframe в localStorage на каком нибудь домене, а потом вы заходите неделю спустя на какой то другой сайт, тот грузит этот же iframe и берет из него пароль.


  1. zomby
    26.10.2015 02:58

    http://www.trypap.com/


  1. iptester
    26.10.2015 04:14
    +1

    Отличная штука по сбору паролей


  1. ov7a
    26.10.2015 09:21

    Очень свежая идея, ага. xkcd.com/936


  1. magic4x
    26.10.2015 10:09

    Кто-нибудь уже выяснил почему многие запрещают спецсимволы? Тинькофф банк, например, их не разрешает.


    1. ov7a
      26.10.2015 11:40

      Могу предположить, что так пытались запретить использовать не ASCII символы в пароле, чтобы избежать проблем с кодировками. Ну а получилось как всегда: [A-Za-z0-9]


      1. magic4x
        26.10.2015 11:57

        Т.е. в тинькоффе не могут написать регулярку со спец. символами? Ну ок )


      1. ankh1989
        26.10.2015 12:25

        [A-Za-z0-9]{4,10}