Динамический пароль 2.0

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

    Итак, далее будет:
    • итоги на написанную ранее статью
    • еще идеи на её счет
    • расскажу о принципиально другом «динамическом пароле 2.0», лишенном недостатков первого.
    • а так же, скандалы, интриги, расследования идею как задать пароль:
      который вы сами не сможете набрать в состоянии алкогольного опьянения,
      который можно набрать на глазах у друга, и состоящий из символов «QQQQQ»
      и он не сможет его повторить...


    Прежде всего, предлагаю не относиться слишком критично к данной статье, оставьте в восприятии толику юмора, ведь это прежде всего идеи, брошенные в море облачного IT-интеллекта

    Итоги из статьи Динамический пароль


    Способ реализации — не жесткая последовательность, а конструктор динамического пароля, позволяющий вставить приведенные автором шаблоны в любых местах и в любых количествах в своем шаблоне пароля
    Сфера применения — не общественные системы для обычного потребителя. В первую очередь идея может быть использована в закрытых системах и организациях, которые хотят усложнить механизм обычного ввода пароля, но не задействовать доп железо (телефоны, токены, смарт-карты и тд)
    Недостатки — невозможность хранить на сервере в виде хеша, придется часть шаблона пароля оставлять в открытом виде. Сложность, надо потратить немного времени что бы подготовить пароль по известному вам шаблону и, как следствие, слабая применяемость «в народе».
    Преимущества — бесполезность идеи взлома пароля методом перебора (пока идет перебор паролей, сабж может стать тем, который уже был использован генератором ранее). Защита от «подглядываний» пароля (точный пароль, набранный через [1-N] минут может оказаться уже неактуальным)

    Идеи и пояснения


    Меня, как и некоторых других Хабра-юзеров, посещала идея динамического пароля еще несколько лет назад.
    Тогда, я сформулировал её для себя следующим образом:
    Есть шаблоны: MM, YY, DD и т.д. перечисляем сюда все шаблоны из форматера дат и указанные автором в парент-топике и еще кучу на свой вкус.
    Что бы задать пароль надо совместить статический текст пароля, с динамическим, что бы это сделать, выбираем обрамляющие символы которые будут указывать где начинается и оканчивается шаблон. Например можно использовать двойные квадратные скобки "[[....]]", по принципу наклонной черты в java "\\".
    Несколько примеров шаблонов пароля сформированные таким образом:
    • "qqq[[MM]]qqq" (верный пароль «qqq+2х-значная минута+qqq»)
    • "[[YYYY]] тысяч обезьян в [[USER]] сунули банан" ( :-) )
    • "2+2=[[M]]" (верный пароль — «2+2=первая цифра текущей минуты»)
    • "[[SS]][[SS]][[M]][[SS]][[SS]]" (пароль, завязанный на секунды, потребует предварительной его подготовки к определенной секунде и минуте в будущем)

    Можно даже предусмотреть вычисление внутри "[[...]]", например:
    • k1s$a[[MM]][[MM+1]][[MM+9]][[MM+7]][[MM+9]] (пароль, это «k1s$a»+ повторяющиеся 4 раза цифры текущей минуты, к которым прибавляем цифры вашего года рождения)
    • [[HH%2==0]] (пароль true или false, в зависимости четная минута или нет)
    • [[MM+-2]] (пароль, это текущая минута с погрешностью +- 2 минуты)
    • [[MM+-2]][[MM+-2]][[ MM+-2]][[MM+-2]][[MM+-2]] (развитие предыдущего пункта — пароль (например 1920222120) может состоять из разных цифр в пределах погрешности и никто не догадается что базовая цифра, это текущая минута — 20 в моем случае )

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

    Динамический пароль 2.0


    Вот и подошла очередь описать принципиально новый «Динамический пароль 2.0». Включаем юмор, и оставляем включенной логику
    Представьте ситуацию:
    Вы видите как ваш друг набирает в поле пароля банальный пароль «QQQQQ» или «11111» и входит, вы говорите ему, что он полный чайник, раз использует подобный пароль, а он в ответ, выходит из программы и предлагает ввести его вам. Вы пытаетесь ввести пароль 5 раз и вас не пускает, после этого вы вспоминаете что когда-то читали статью на хабре Динамический пароль и предполагаете что пароль просто перегенерился и, скорее всего, тогда на часах была или 11-я минута или что то еще… Но ваш приятель садится за комп и опять у вас на глазах начинает вводить «11111» и его пускает!
    В чем секрет?
    В фразе «Динамический пароль 2.0» основным словом является "динамический", но не в смысле «изменяемый», а в смысле «динамичный, танцевальный» ;)
    Помните реакцию винды на неправильный ввод пароля 3 раза подряд? Она не дает ничего вводить пару минут, что бы исключить подбор пароля, а потом, через пару минут снова дает 3 попытки.
    Что, если контролировать время между введенными символами и использовать его как еще один параметр при входе в систему?
    Не буду разжевывать то, что вы и так поняли, и сразу приведу шаблон пароля нашего «продвинутого» приятеля:
    Q[[T>500]]Q[[T>500]]Q[[T>500]]Q[[T>1000]]Q
    Где [[T>500]], говорит о том что между символами должно быть время в миллисекундах большее чем пол секунды, а между предпоследним и последним символами — больше секунды.
    Включаем фантазию и думаем какие еще правила можно придумать: минимальное/максимальное время ввода всего пароля, больше, меньше, погрешность в миллисекундах, динамическое время основанное на первом промежутке времени между вводом первого и второго символа пароля, и много чего еще…

    Сразу о преимуществах:
    • легкий набор
    • возможность хранить хеш самого пароля на сервере
    • возможность, при отменной реакции и чувстве такта, задать простейшую мелодию при «настукивании» пароля
    • невозможность подбора, так как время это тоже параметр
    • wow! вы можете рассчитать минимальное время набора пароля (скажем вы легко набираете его за 1.5 секунды), а в случае вашего измененного сознания опьянения, не сможете набрать его с такой же скоростью, так как время реакции сильно пострадало и база защищена вами от вас! ))


    Теперь о недостатках:
    • Сложное программирование, придется точно контролировать время между вводимыми символами, для реализации надо хорошенько подумать что сделать на клиенте, а что на сервере
    • возможно, сложное придумывание шаблона (если шаблон сложнее чем набрать 3 символа, подождать 3 секунды, набрать остальные символы пароля)
    • дополнительное нешифруемое поле в базе в нагрузку к Хешу пароля, для того что бы знать правила контроля времени между символами или общего времени набора


    Не забываем, всё это концепты, идеи для размышления, не надо сразу прикладывать идею к сайту «Одноклассники» и его хомячков обитателей ;)

    В общем, интересных проектов и удачи Всем!

    Update1: Коментарии в статье Третье измерение защиты паролей окончательно меня убедили, что пользователи Хабра мыслят одинаково. До написания своей статьи, я не читал «Третье измерение защиты паролей» и его каментов.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 19

      +3
      Я думаю стоит еще добавить идею, где каждый следующий пароль зависит от предыдущего. Например, ваш пароль Пупкин[51+3], значит при первом входе вы должны вписать пароль Пупкин51, при следующем входе Пупкин54, затем Пупкин57. Это несколько усложняет задачу, т.к. нужно помнить ваш последний пароль, но зато не привязывает к проблеме часовых поясов и т.п.
        +2
        Ждем когда дойдёт то такого варианта:

        "— Прошу прощения, но для проведения операции необходимо подтверждение права пользователя. Наберите личный код.

        Корн протянул руку и набрал несколько цифр, потом нажал ввод, отсчитал семь секунд, набрал еще две цифры и снова ввод. После чего переключил терминал на режим вода графической информации и нарисовал домик с горбатой крышей и одним окошком. Этот Иглисс Эйхайя, судя по коду, был большой оригинал. Впрочем, кому еще пришло бы в голову набить свой корабль золотыми слитками."

          +2
          © Роман Злотников, цикл «Вечный».
          Если не ошибаюсь, книга называется «Восставший из пепла» :)
            0
            Точно. В этой вселенной, кстати, к паролям довольно логичный подход. Если обобщить то, там везде где требуется авторизация используется PAM. И принято самим писать/настраивать эти модули.
          +1
            +1
            если вместе с передачей каждого нового символа передавать текущую миллисекунду из браузера клиента, то всю логику проверки можно реализовать на сервере, что сделает безуспешными все попытки добиться чего-либо отключением или изменением javascript
            +1
            Предложенная методика относится, строго говоря, к биометрии, и близка к распознаванию почерка. Вместо ручного задания шаблона лучше во время задания пароля попросить пользователя несколько раз его ввести, на основании чего уже вычислить индивидуальные особенности ввода.
            Можно пойти еще дальше: собрать статистику динамических характеристик печатания (средний темп, диапазон изменения темпа, типичные длительности нажатий/пауз для разных букв/комбинаций и т.д.), попросив пользователя набрать некоторый текст. Затем при аутентификации предлагать ввести указанную фразу, каждый раз разную, и сличать характеристики набора.
              0
              Отличная идея!
                0
                Вы опять сооружаете игрушку для программистов? Зачем это все?
                  +2
                  По поводу перехвата — защита будет только от любопытного друга. А для кейлоггера не проблема вместе с кодами клавиш записывать и точное время каждого нажатия. Некоторые логгеры уже так делают.
                    +2
                    Сложно будет вводить такой пароль с мобильных устройств с неполной клавиатурой
                      +1
                      Идея замечательная и приходило в голову наверное каждому программисту, который писал алгоритм аутентификации на сайте. Увы пользователи ей не возрадуются. Они не радуются просто авторизации или регистрации, а вспоминанию метода кодирования своего пароля уж точно не возрадуются.
                      Мне кажется Гугл поступил исчерпывающе, введя для повышения безопасности двойной логин. Он полностью избавляет от всех головных болей программистов и добавляет головную боль в степенной зависимости любому хакеру.

                      Я вот даже думал об авторизации при помощи веб-камеры. И даже начал реализовывать это, но вовремя опомнившись лишь создал приложения для обмена фотографиями.
                      Удачи Вам в Ваших начинаниях и размышлениях!
                        +5
                        Еще предлагаю шаблон [[*]], чтобы помимо значимых знаков пароля вбить любые другие знаки. Особенно наверное будет действенна в начале пароля как защита от подглядывающих.
                        Шаблон/пароль «о сколько нам открытий [[*]] чудных»
                        Вводимый пароль: «о сколько нам открытий хабрахабр чудных»
                          0
                          Второй раз прочитал статью и понял, что идея все-таки только идея. Даже не беря во внимание сложность реализации, сколько параметров у динамического пароля. Время, погода? А что если вы не можете узнать точное время, погоду, если от этого пароля вообще зависит выход в интернет. А что если вы в первый раз не угадали в динамической части, кейлогер запишет и второй пароль и весь механизм (динамическая часть) мгновенно будет раскрыт.

                          Давайте спустимся с небес и вернемся в школу. Маша хочет передать послание и получить ответ Пете через Цезаря, но чтобы Цезарь ничего не узнал. В нашем случае все уже упрощено, https соединение отражает все атаки в середине. Так что нам надо передать только пароль секретно. Как это сделать? Надо не вводить пароль вручную компьютер, а ввести хэш (возможно зависимый от времени), что нам понадобится? Ручка и листок бумаги. Проделываете нехитрые вычисления по вычислению хэша и готово.
                          Я конечно шучу :) Нам понадобится калькулятор, куда мы и введем пароль. Да это тот же самый токен, смарт карта, она может быть персональной (почему бы и нет с уже введеным паролем внутрь), она может конектиться как usb и каждую секунду отсылать пароли, она может быть маленькой, удобной, она может быть в телефоне. Все это уже придумано (правда для себя я еще идеального варианта не видел, все зависит от распространенности).

                          Ну если действительно 'калькулятора' нету, используйте одноразовые пароли, а при выходе задавайте следующий одноразовый. Система одноразовых также опасна как и динамические (система может быть распознана).
                            +1
                            Да не защищает это от перебора. Нужно просто перебирать не последовательно, а случайно (без запоминания, что было раньше). Это увеличивает требуемое количество попыток, но не слишком сильно.
                            Пусть у нас всего, например, M = 218340105584896 ( = 62^8, взято с потолка) возможных паролей. Тогда при статическом переборе за M*X попыток мы подберем пароль с вероятностью X. При случайном для достижения вероятности X нам понадобится log_{1 — 1/M} (1 — X) попыток, что в log_{1 — 1/M} (1 — X) / (M*X) раз больше.
                            Вот график зависимости этой величины от X:
                            Как видно, для практических целей мы получим замедление раз в 5. Что вряд ли интересно.
                              +1
                              Чингиз и Падла одобряют статью ;)
                                +2
                                А вот обезьяны подают коллективный иск за клевету.
                                0
                                Для параноиков лучше уже для каждого входа случайным образом генерировать новый пароль и высылать его на мобильный/почту или сообщать по телефону.
                                • НЛО прилетело и опубликовало эту надпись здесь

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое