image

Нормальный стойкий пароль фиг запомнишь. Почти аксиома. Еще и безопасники радостно подбрасывают дровишек в этот костер ужаса, заставляя раз в месяц учить чудовищный фарш из мешанины символов. Параноидальные меры безопасности в лучших традициях «Хакера в столовой» приводят лишь к тому, что пользователи заботливо царапают пароли на мониторе или складывают под клавиатуру. Нет, серьезно, ну кто из обычных пользователей в здравом уме будет соблюдать требования к паролю в духе:

  1. Длиннее 8 символов,
  2. Содержит прописные, строчные буквы, числа и специальные символы,
  3. Не повторяет ни один из предыдущих,
  4. Меняется ежемесячно.

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

Энтропия


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

  1. Админ сайта упоротый криптопараноик, который открывает дверь в туалет вживленной RFID меткой.
  2. Админ немного переживает о том, что текущее железо очень быстро перемалывает утекшие базы, и неплохо бы хоть немного от этого защититься. Можно даже хеши посолить.
  3. Админ окончил трехмесячные курсы для продвинутых пользователей, поднял дефолтный Wordpress и понятия не имеет, что там у него за требования.

Два основных направления атаки — перебор по словарю или брутфорс в надежде на низкую длину и энтропию пароля. Пароли вида iloveyou и password заведомо ущербны, пароли с низкой энтропией уязвимы для простого брутфорса.

Сложность пароля в компьютерной индустрии обычно оценивают в терминах информационной энтропии (понятие из теории информации), измеряемой в битах. Вместо количества попыток, которые необходимо предпринять для угадывания пароля, вычисляется логарифм по основанию 2 от этого числа, и полученное число называется количеством «битов энтропии» в пароле. Пароль со, скажем, 42-битной сложностью, посчитанной таким способом, будет соответствовать случайно сгенерированному паролю длиной в 42 бита. Другими словами, чтобы методом полного перебора найти пароль с 42-битной сложностью, необходимо создать 242 паролей и попытаться использовать их; один из 242 паролей окажется правильным. Согласно формуле при увеличении длины пароля на один бит количество возможных паролей удвоится, что сделает задачу атакующего в два раза сложнее. В среднем атакующий должен будет проверить половину из всех возможных паролей до того, как найдет правильный.
Википедия

Оценить количество энтропии на символ можно в таблице ниже.
Набор символов Количество символов, N Энтропия на один символ, H, биты
Арабские цифры (0-9) 10 3,3219
Цифры шестнадцатеричной системы счисления (0-9, A-F) 16 4,0000
Строчные буквы латинского алфавита (a-z) 26 4,7004
Арабские цифры и строчные буквы латинского алфавита (a-z, 0-9) 36 5,1699
Строчные и заглавные буквы латинского алфавита (a-z, A-Z) 52 5,7004
Арабские цифры, строчные и заглавные буквы латинского алфавита (a-z, A-Z, 0-9) 62 5,9542
Все печатные символы ASCII 95 6,5699

Скрепки в лошадях


Складывается стойкое ощущение, что идеальный пароль должен содержать весь возможный набор символов, включая санскрит и улыбающийся pile of poo. Шесть с половиной бит на символ все-таки! Но тут мы сталкиваемся с проблемой применимости. Очень невесело пытаться достучаться до своего сервера, если на старом телефоне где-то в командировке нет возможности ввести арабские символы или иероглифы. Ок, думаем мы и двигаемся на строчку попроще — a-z, A-Z, 0-9. Почти 6 бит на символ. Но вот беда — запомнить фарш в духе Vh8GkCnbqbQDRv крайне трудно. Особенно, если учитывать нежелательность использования одного и того же ключа в разных местах. Да, для аккаунта в Digital Ocean или у доменного регистратора можно и нужно использовать пароли вида gZsa<(Dw}a+*5p. Но такие ключи требуют хранения в синхронизируемой зашифрованной базе вроде KeePassX, иначе на двадцатом таком ключе может потечь мозг.

image

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

Пароль @Vy[o8!B может быть довольно легко забыт, хотя и содержит 8*6,5699=52 бита энтропии. Более компромиссный вариант eastrightcloudexplore куда более криптостойкий при легкости запоминания: 21*4.7004 = 99 бит энтропии.

Существует даже ресурс для генерации паролей по этому алгоритму с говорящим названием correcthorsebatterystaple.net. Хотя, конечно, онлайн генераторы паролей — крайне плохая идея. Сразу вспоминается старая притча:
Сисадмин желал подобрать себе стойкий пароль для централизованной авторизации через radius-сервер. Он обратился за советом к Инь Фу Во.

– Как вы думаете, Учитель, пароль "???????" стойкий?
Нет, – ответил мастер Инь, – это словарный пароль.
– Но такого слова нет в словарях…
– «Словарный» означает, что это сочетание символов есть в wordlists, то есть «словарях» для перебора, которые подключаются к программам криптоанализа. Эти словари составляются из всех сочетаний символов, которые когда-либо встречались в Сети.
– А пароль «Pft,bcm» подойдёт?
– Вряд ли. Он тоже словарный.
– Но как же? Это же…
– Введи это сочетание в Гугле – и сам увидишь.
Сисадмин защёлкал клавишами.
– О, да. Вы правы, Учитель.
Через некоторое время Сисадмин воскликнул:
– Учитель, я подобрал хороший пароль, которого не может быть в словарях.
Инь Фу Во кивнул.
– Я ввёл его в Гугле, – продолжал Сисадмин, – и убедился, что в Сети такого сочетания нет.
– Теперь есть.

Оффлайн генераторы паролей


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

xkcdpass


Для начала можно обратить внимание на xkcdpass, который работает на уже озвученном выше принципе. Установка для Debian-based дистрибутивов вполне привычная:

sudo apt-get install xkcdpass

Также можно вытащить исходники на python на Github: github.com/redacted/XKCD-password-generator. Можно также использовать pip install. Попадаются даже порты на iOS:

image
Основная фишка этого генератора — создание мнемонических последовательностей-акронимов. Для этого используется ключ --acrostic.


meklon@meklon-desktop:~$ xkcdpass --count=5 --acrostic='habr' --delimiter='|' --min=9 --max=9 --valid_chars='[a-z]'
holograph|archetype|brutishly|refutable
hemstitch|allotropy|balalaika|revivable
hardboard|ampleness|boundless|refurnish
hypertext|adiabatic|backwards|replicate
halfpence|arrowhead|blackbird|recommend

Вариант с balalaika меня особенно порадовал) Главный недостаток такого метода — уродские сервисы с ограничениями по длине пароля. Никогда не понимал, что именно они при этом экономят. Тем более, что хранить им все равно только соленый хеш от ключа пользователя.

pwgen


Классический вариант. Может генерировать как удобные для запоминания ключи, так и истинно случайные последовательности. Установка:

sudo apt-get install pwgen

Синтаксис простой — pwgen [ключи] [длина_пароля] [количество_паролей]. Ключами можно как усложнить, так и упростить получаемые пароли. По умолчанию используются цифры и заглавные/строчные буквы.

meklon@RegenLab-LinuxDesktop-1:~$ pwgen 8 4
eesohy9E Ohqu3che Mo7aijeu ieb1Quie 

Можно немного снизить энтропию и улучшить читаемость, выбросив цифры. Заодно давайте удлиним до 12 символов, чтобы это компенсировать (12*5.7004=68 бит энтропии).

meklon@meklon-desktop:~$ pwgen 12 4 --no-numerals
Eipohliemiwi WoLooJeemeir laishaisaTho oquaibahYori

Добавление опции --secure делает пароли нечитаемыми, но полностью случайными:


meklon@meklon-desktop:~$ pwgen 12 4 --secure
YFSb5lqAfSLV nMa5GKJhMmw2 VczwRho2xuwG PPAc6SByedfh 

gpw


Еще один отличный генератор. При построении паролей он использует принцип комбинирования наиболее распространенных триграмм. Результат — крайне приятные для произношения ключи:


meklon@meklon-desktop:~$ gpw 4 12
oventryllyna
slytersiderm
raboalsollic
testrisheocu

APG


Advanced Password Generator. Куча опций и возможностей. В дефолтном варианте очень удобно дробит пароль на фрагменты:


meklon@meklon-desktop:~$ apg

Please enter some random data (only first 16 are significant)
(eg. your old password):>
BidKasJuink6 (Bid-Kas-Ju-ink-SIX)
ontEjsed6 (ont-Ej-sed-SIX)
rordOWren4 (rord-O-Wren-FOUR)
yalIkatEac0 (yal-Ik-at-Eac-ZERO)
WruAdNevav1 (Wru-Ad-Nev-av-ONE)
tipBevJieb8 (tip-Bev-Jieb-EIGHT)

Здесь должен быть вывод, но автор устал


Удачной генерации)

UPD


Решил добавить утилиту для проверки криптостойкости пароля. Небесполезная штука, ковыряет ключ по словарям и оценивает стойкость.

sudo apt install libcrack2 

Используется довольно просто. Можно скармливать что-то последовательно скриптом или просто забросить на вход пароль через echo. Проверим генераторы из поста:

meklon@RegenLab-LinuxDesktop-1:~$ echo "abc123456" | cracklib-check
abc123456: слишком простой
meklon@RegenLab-LinuxDesktop-1:~$ echo "WruAdNevav1" | cracklib-check
WruAdNevav1: OK
meklon@RegenLab-LinuxDesktop-1:~$ echo "testrisheocu" | cracklib-check
testrisheocu: OK
meklon@RegenLab-LinuxDesktop-1:~$ echo "WoLooJeemeir" | cracklib-check
WoLooJeemeir: OK

На xkcdpass утилита смотрит подозрительно, но длинные пароли из смеси словарных слов признает валидными:

meklon@RegenLab-LinuxDesktop-1:~$ echo "holograph|archetype|brutishly|refutable" | cracklib-check                
holograph|archetype|brutishly|refutable: OK                                                                      
meklon@RegenLab-LinuxDesktop-1:~$ echo "holograph" | cracklib-check                
holograph: основан на слове из словаря                                                                           
meklon@RegenLab-LinuxDesktop-1:~$ echo "archetype" | cracklib-check                
archetype: основан на слове из словаря                                                                           
meklon@RegenLab-LinuxDesktop-1:~$ echo "holograph|archetype" | cracklib-check                
holograph|archetype: OK                                                            


За редактуру спасибо in_green_shoes

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


  1. Meklon Автор
    30.08.2017 11:45

    Если есть еще варианты интересных генераторов — пишите)


    1. Meklon Автор
      30.08.2017 11:53
      +1

      Натыкался на вот такую забавную штуку:
      <1n255s4 Lisa's first newt zooms Fife's fifth shrewd four.
      t6pnjsnv Tony's sixth padlock nags John's spectacular number vainly.
      fqyumdc8 Fiona's quadrilateral yucca understands Murray's dormant calculating eight.
      ee6pk3cm Eve's egocentric six ponders Ken's third cagey magazine.
      q1giwn?n Quentin's first galaxy improves Wyn's nondescript question mark nastily.

      Aberystwyth University разрабатывал. Но кажется прикрыл. А мнемоника реально адская получалась.


      1. Kirhgoff
        31.08.2017 08:36
        +1

        Я натыкался на подобный алгоритм генерации паролей у знакомых админов, что то вроде такого (на ходу сочиняю):
        Шла Саша по шоссе и сосала сушки => SHSpshiss => SHSpsh1ss => SHSpsh1$$
        Ехал грека через реку видит грека в реке рак => Egchrvgvrr => 3gchrvgvrr => 3gchr^g^rr


  1. shurupkirov
    30.08.2017 11:53

    Большую часть паролей кодирую по 5 основаниям (код, набор цифр, текст1, текст2, спецсимволы) так хотя бы, даже если забыл (есть сервисы, на которые раз в квартал захожу), то быстро можно перебрать по степени нужности сервиса


  1. norlin
    30.08.2017 11:56

    Некоторое время назад пошёл скучным путём – стал пользоваться 1Password.
    До этого – у меня было 3 относительно коротких рандомных пароля (до 10 символов каждый) в нескольких вариациях каждый, которые я помнил наизусть и использовал уже несколько лет.


    И вообще, "Сорок тысяч обезьян..."


    1. Meklon Автор
      30.08.2017 12:00
      +2

      Лукьяненко прекрасен, да)


      1. norlin
        30.08.2017 12:07
        +10

        К сожалению, только в контексте его книг. Да и то, лишь более-менее ранних...


        1. Meklon Автор
          30.08.2017 12:23
          +3

          Сам он довольно мерзкий, да. И насчет позднего творчества согласен.


    1. Meklon Автор
      30.08.2017 12:06
      +4

      Чтобы не было как в анекдоте про Сережу, все же процитирую оригинал)

      Фальшивые зеркала
      Я молчу. Это мой общий ключ. Теперь придется переупаковывать все базы данных. Темный Дайвер подносит трубку к Чингизу. Тот почему-то смотрит на меня почти с таким же негодованием, как и на Темного Дайвера. Но голос сохраняет спокойным:
      — Открыл первый шифр? Хорошо. Теперь набирай ключ… он простой… ламерский…
      Вот оно в чем дело!
      — Это фраза, первая буква строчная, все остальные прописные. Пробелы значимы. В конце должна стоять точка. Набирай… и повторяй по буквам.
      Чего он тянет…
      Чингиз выдыхает и ледяным голосом произносит:
      — Сорок тысяч обезьян в жопу сунули банан.
      Темный Дайвер сгибается от беззвучного хохота. Трубка в его руке пляшет у лица Чингиза. Падла издает хрюкающий звук, пытается скосить глаза на Чингиза, потом смотрит на меня.
      Я держусь. С трудом, но держусь.
      — Что? — Чингиза вдруг покидает самообладание. — Какой еще «абезьян»? Ты в зоопарк ходишь на «абезьян» посмотреть?
      Я не выдерживаю. Мы проиграли. Мы капитулировали перед Темным Дайвером. И неясно еще, оставит ли он нас в живых, получив файл. Но сейчас я валяюсь, парализованный, одновременно и в глубине, и в своей квартире. И веселюсь даже не столько от выбранного Чингизом пароля, сколько от нагоняя, который он сейчас устраивает.
      — Да! Банан!
      — Один на всех? — спрашивает Падла и заходится мелким, хихикающим смехом.
      — Все… теперь Тоха свой ключ скажет. Двоечник…


      1. Azlentor
        31.08.2017 21:18

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

        Заголовок спойлера
        40nsczxvelfrjd'njjxtymgkj[j*


  1. LoadRunner
    30.08.2017 11:59

    Нашёл половину своих паролей в статье. Похоже, они словарные.

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

    Так что только своим умом и эрудицией стоит генерировать.


    1. Meklon Автор
      30.08.2017 12:04

      Все эти утилиты позволяют использовать любые словари. При добавлении пары цифр можно уже только застрелиться со словарным перебором, имхо. То есть последовательность слово-слово-слово-слово брутится легко, если есть предположение, что генерировалось по методу коней со скрепками. Но уже слово-слово-!;$-слово-слово тупо никак не брутится. Опять же генераторы в духе WruAdNevav1 (Wru-Ad-Nev-av-ONE) тоже должны давать хорошую энтропию. Тут нет словаря, только отбрасываются неблагозвучные варианты.


    1. Livid
      30.08.2017 15:40
      +1

      Атаке перебором подвержены абсолютно все пароли. Вопрос исключительно в количестве возможных вариантов (и цене перебора). Злоумышленникам ничего совершенно не мешает. Но, скажем, взяв набор 8000 наиболее употребимых существительных в английском языке и сгенерив на его основе пароль из пяти слов, получим ~3.3?10?? вариантов или ~65 бит энтропии. Что не офигеть как круто, но терпимо. Примерно соответствует полностью случайному паролю из 10 латинских символов смешанного регистра, цифр и пунктуации. Или, кстати, предложенному выше WruAdNevav1. Конечно, на суперкомпьютере в оффлайне подобный пароль подбирается в среднем дня за четыре. Но четыре дня на суперкомпьютере — это довольно дорого.


    1. akirsanov
      30.08.2017 21:41

      От того, что вы знаете весь набор слов в словаре, это не отменяет сложность в 10000?5(1e20) для пароля из 5 слов для словаря в 10000 слов.
      Точно так же, как и то, что используя 8-символьный пароль из всего набора ascii, будет известное число вариантов перебора 255?8(1.78e19).
      Уже не в первый раз натыкаюсь на это странное убеждение, что при известном словаре очень просто взять и подобрать пароль, состоящий из слов в этом словаре.
      В конце концов, ascii всем известна, и вариантов перебора там существенно меньше, чем в среднем словаре тех же английских слов.


    1. bopoh13
      30.08.2017 22:59

      Анекдот статье был не просто так. Гугл знает мою фразу — основной пароль. Энтропия 75 бит. Но в фразе присутствуют ошибки (не l33t, и не грамматические), — подобрать по словарю маловероятно.


  1. navion
    30.08.2017 12:43

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

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


    1. Meklon Автор
      30.08.2017 13:05

      Ключи созданные на основе триграмм или других вариантов благозвучных будут уникальны. Кажется, вероятность совпадения на 10+ символах стремится к нулю.


  1. ProLimit
    30.08.2017 12:45
    +2

    «Более компромиссный вариант eastrightcloudexplore куда более криптостойкий при легкости запоминания: 21*4.7004 = 99 бит энтропии.» — не согласен. Энтропии тут гораздо меньше чем 21*4.7, если перебирать распространеные слова, помноженные на их количество. Такой подсчет энтропии не учитывает зависимость между символами. В любом мнемоническом пароле она существенно снижается.


    1. Meklon Автор
      30.08.2017 13:02

      Как оценить это? В целом согласен. Но тут нужно ещё оценить атакующего. Он не сможет применить знания о возможной взаимосвязи между символами. Он даже длины ключа не знает. Какова может быть тактика?


      1. Livid
        30.08.2017 14:46
        +1

        Да бросьте, давно уже перебирают не брутфорсом, а по словарям с мутаторами (замена o на 0, и тп). Сделать алгоритм который перебирает заодно комбинации слов — никакая не проблема. Все слова в Вашем пароле входят в топ-2000 наиболее часто употребимых. Несложный расчет дает ~ 44 бита энтропии (да-да, прямо как в xkcd, потому что там взяты 4 слова из топ-2048), а совсем никаких не 99. Можете добавить еще чуть-чуть на разные разделители, получите ну может быть еще 2-3 бита.


        1. Meklon Автор
          30.08.2017 14:50

          Принято) Тогда остаются длинные бессмысленные пароли с хорошей фонетикой. Криптостойкие все равно почти никто не будет использовать. Дни рождения — наше все, увы.


          1. Livid
            30.08.2017 15:53
            +1

            На самом деле нет, не совсем так. При выборе достаточно длинного вордлиста, количество энтропии в одном слове — вполне вменяемо. Я в другой ветке уже сказал, но повторюсь, что скажем взяв словарь из 8192 слов получим ~13 бит энтропии на слово (на самом деле поменьше, но не сильно). Пять слов (случайно выбранных!) дают уже 65 бит энтропии, что вполне на сегодняшний день терпимо. Шесть дают уже 78, что совсем даже неплохо. Семь даст 91, что будет вполне хорошо ближайшие лет 20, если конечно вдруг не окажется, что P=NP и криптография не работает. Так что не так все страшно.


            1. K0styan
              01.09.2017 12:35
              +1

              Так может лучше уходить в нетиповые слова? Жаргонизмы, имена-фамилии знакомых вам людей? Это и запоминаемость может повысить, если фразу выбрать вас лично чем-то цепляющую. Ну что-то типа «Васечкина не дает скатать домашку» — явно лучше, чем абстрактные батарейки со скрепками.


              1. Livid
                03.09.2017 23:17

                Увы нет, не лучше. Имена-фамилии такие же словарные, как и всё остальное. Жаргонизмы, может быть, не настолько (редко употребимы), но их много меньше, поэтому, если сильно уходить в них, энтропия только упадет. Не думаю, что Вы наскребёте хотя бы пару тысяч жаргонизмов даже в своей пассивной лексике. Абстрактные батарейки со скрепками заведомо случайны, в отличие от грамматически корректных предложений, рождённых Вашей фантазией — а значит имеют заведомо бoльшую энтропию, и мне кажется весьма значительно (но я не считал). Использовать "лично Вас чем-то цепляющую" фразу — заведомо плохо, потому что от целевой атаки такая парольная фраза спасает чуть лучше, чем никак. А вообще, при абстрактном анализе, оценивается только пространство возможных для данного алгоритма построения парольной фразы вариантов — молчаливо предполагается, что атакующему этот алгоритм известен, и словари у него те же, что и у Вас. Полагать иначе — это security through obscurity, что, как известно, не работает. На практике же, всё равно оказывается, что менеджер паролей наше всё, потому что какие бы легко запоминающиеся пароли ни были, держать в голове 4-5 сотен их и не путаться при этом редко кому под силу.


        1. LoadRunner
          30.08.2017 15:52

          А если не слово целиком, а только часть? И злоумышленник не знает заранее, где целая часть, где корень, где окончание взято. И разбавлено цифрами, например.


          1. Meklon Автор
            30.08.2017 15:53

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


            1. LoadRunner
              30.08.2017 15:58

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


              1. Meklon Автор
                30.08.2017 16:02

                Смотри — максимум энтропии в варианте, когда каждый символ абсолютно независим от другого. Но для благозвучных паролей у нас выброшены комбинации вроде jzK. Что сужает общее количество вариантов.


                1. LoadRunner
                  30.08.2017 16:11

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


          1. Livid
            30.08.2017 15:55

            То вы получаете труднозапоминаемое месиво, которое собственно и имеем сейчас, Вам не кажется?


            1. LoadRunner
              30.08.2017 16:01
              +1

              Ну почему же. Вот например, пароль: «какойчудесныйдень». Состоит из трёх целых слов, которые наверняка все в словаре популярных слов.
              А если взять пароль «как1чуд2день3»? Вряд ли стало сильно сложнее запомнить — мешанины нет, читается легко, словарь для перебора нужен побогаче и алгоритм посложнее.


              1. Livid
                30.08.2017 16:16

                Именно в таком варианте выигрыш совсем небольшой. При анализе криптостойкости мы всегда исходим из того, что у атакующего достаточно умный алгоритм, потому что считать иначе это security through obscurity. "как", "день" несомненно словарные, "чуд" вероятно тоже. Комбинаторные алгоритмы на основе словарей есть. Цифры подряд, в восходящем порядке, на границах слов — алгоритмы, которые это учитывают, тоже уже есть. Так что выигрыш довольно сомнительный по сравнению с "какойчудесныйдень". Более рандомизированное распределение цифр поможет, но оно будет несомненно более сложным для запоминания.


                1. LoadRunner
                  30.08.2017 16:19

                  Я лишь пример общей концепции привёл. Цифры можно любые, хоть дату рождения, хоть пин-код от банковской карточки. Можно не на границе каждого слова, можно в середине, да где угодно и не по одной цифре за раз. Лишь бы хорошо запоминалось.
                  Алгоритмы есть, никто не спорит. Но количество вариантов возрастает очень сильно.


                  1. Livid
                    30.08.2017 16:31

                    Я пытался донести, что в подавляющем большинстве случаев "легко запоминается" = "содержит тривиально формализуемые паттерны", а это уже представляет некоторую проблему. Самый простой способ сделать пароль более криптостойким — это сделать его более длинным. Идея с корректными лошадьми хороша тем, что редко кто думает символами, и запомнить 5-7 случайных слов ощутимо легче, чем 12-16 случайных символов. С этой точки зрения, делать фарш из слов и цифр (а может еще и пунктуации?) гораздо менее практично.


                    1. LoadRunner
                      30.08.2017 17:00

                      Возможно. Тут уже кто как способен запоминать.


    1. Darkhon
      31.08.2017 21:19

      1. Meklon Автор
        31.08.2017 21:19

        О, спасибо.


  1. remzalp
    30.08.2017 13:30

    Забыли бесплатный VipNet Password Generator. Вполне себе независимый продукт от всей остальной инфраструктуры.


    скриншот

    image


  1. iSergios
    30.08.2017 13:41
    +1

    Спасибо большое за статью! Однако же, боюсь, все это не поможет вспомнить пароль, который был установлен, скажем, год назад. Еще лет 9 назад я написал для себя генератор паролей, где на входе надо подать какую-нибудь набившую оскомину фразу, а на выходе можно получить хэш из первых/последних/средних n символов каждого слова. Мне казалось это достаточно надежным для запоминания, но однажды, доверив такой пароль браузеру, я, спустя два или три года, как ни старался, фразу вспомнить не смог. Все-таки фраз много, и через года три все это будет в голове перемешано, забыто, дополнено чем-то фантомным и пр.

    Даже не могу вспомнить, когда я впервые столкнулся с необходимостью научить людей, далеких от IT, составлять сложные в подборе, но легко запоминающиеся пароли. Я пытался по-разному, удалось не все и не со всеми, но кое-что реально получилось. По началу держал этот способ исключительно для родителей, девушек, друзей/знакомых/клиентов/и т.д., но теперь вовсю грешу им и сам. Так, на службу уникальности и стойкости пароля был поставлен великий могучий, а именно всеобщая любоффь каверкадь слова (особая заслуга в этом принадлежит уже сильно сдавшему свои позиции «падонкаффскому языку»). Удивительно, но мои родители (и не только они) до сих пор помнят все свои пароли, а подобрать их, не зная логики построения и гарантированно присутствующих элементов, за разумное время не выйдет. Кроме того, такие пароли легко вводить, в т.ч. человеку без особых навыков быстрой печати, а быстрый ввод всегда сильно снижает вероятность того, что кто-то этот пароль успеет подсмотреть.

    Как это происходит:
    1) Берем слово. Скажем, был у Вас в детстве песик, звали его Тузик, Вы его никогда не забудете (это только пример! В боевых условиях возьмите что-нибудь из своего профессионального словаря или оболтанное в узком кругу друзей слово, лишь бы оно твердо сидело в голове и с ним была прочная эмоциональная связь — ассоциации, события, не важно). Ну пёс это коротко, пусть будет Собака. Просто, словарно, малобукв — плохо. Вспомним язык падонкафф и наша Собака теперь Сцобако. Добавим букву — Сцобакен. Ну Тузик пусть для скорости сразу станет Тузегом. Это будет основа.
    2) Придумываем опциональный(ые) элемент(ы). Они помогут разнообразить пароль при условно неизменной базе. Если Вы забыли пароль, добавьте-уберите эти элементы, и подберете тот, что надо. Пусть это будет слово Ваще.
    3) Берем ресурсозависимый элемент. Скажем, часть имени сайта. Любую. Хоть весь (но не рекомендуется). Давайте условно для себя решим, что это всегда будут последние три символа доменного имени (от второго уровня) habrahabr это будет abr, ну то есть абр. Куда их ставить — дело Ваше.
    4) Цифры-спецсимволы — возьмем опять же известный мем про 146%. Хватит.
    5) Это последний пункт. Мы безобразно переводим все русские символы в английские простым переключением раскладки. И наш ТузегабрВащеСцобакен146% превратится в страшные Neptuf,hDfotCwj,frty146%, ну или NeptuDfotCwj,frty146%. Вот так вот, без стороннего софта для генерации или хранения пароля.

    Забыв сам пароль, но помня базу, Вы наверняка сможете его подобрать. Вы ведь как-то придумывали остальные элементы? :)

    Да, компрометация «базовой» части пароля может быть опасна, особенно в условиях использования этой базы для создания немного разных паролей для разных ресурсов. Здесь дополнительной защитой пароля будет Ваше воображение. Опциональные элементы могут быть разной длины и в разных местах. Для большинства случаев такой защиты может быть достаточно (если только не копают конкретно под Вас).

    P.S.
    Для реально серьезных ресурсов (aka платежные системы, к которым привязаны банковские карты) я все-таки использую старые добрые хардкорные пароли в 26+ символов.


    1. vconst
      30.08.2017 13:48
      +2

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


      1. iSergios
        30.08.2017 13:58

        Согласен, с этим бороться сложно. Хотя и можно, банально нагуглив картинку/фото русской клавиатуры. Но это будет сложно, да.


        1. vconst
          30.08.2017 14:02

          Потому, пароли надо придумывать в самой распространенной раскладке. Я не теоретизирую — ибо сам попал с такую ситуацию с делал выводы.


    1. kilgur
      30.08.2017 16:12

      Аналогично, только использую первые буквы довольно длинной фразы. На примере из «зеркал»:
      1. дтовжсб или на латинице dtovzsb
      2. заменяем буквы на цифры/спецсимволы и меняем регистр либо по порядку (например, всегда второй символ и последний или по смыслу во фразе): дТ0в№сБ, dT0v#sB
      там, где впервые читал про такой способ генерации паролей, рекомендовалось во фразе иметь матерные и непристойные слова для облегчения запоминания.


    1. teecat
      31.08.2017 12:08
      +1

      Собственно о чем и рекомендует NIST SP 800-63 Digital Identity Guidelines. Использование парольных фраз.
      Интересно, что по рекомендациям пароли должны включать печатные символы (ASCII [RFC 20]), включая символ пробела, а также желательно символы Unicode [ISO / ISC 10646] — включая эмодзи


      1. iSergios
        31.08.2017 15:53

        Ну эмодзи это отдельная тема. Их просто так не напечатаешь. А вот пробелы в качестве опциональных элементов очень даже.


        1. teecat
          31.08.2017 16:02

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


  1. vconst
    30.08.2017 13:46
    -1

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



  1. Xeli
    30.08.2017 14:53

    А нынче кто-то брутфорсит пароли? Хм. Может это и возможно в локальных условиях (когда сломали айфон например), но в условиях удаленного доступа школьники-брутфорсеры режутся банальным ограничением попыток авторизации.
    По сабжу — самый простой способ запомнить все пароли это запомнить один мастер-пароль и прибавлять к нему определенную комбинацию из букв и цифр связанную с целевым сайтом или программой. Проверить на устойчивость очень просто — генерерируешь хеш пароля, а затем пытаешься инвертировать его по базам хешей в интернете. Воруют хеши с сервера, а потом их пытаются инвертировать это одна из возможностей. Ни один вменяемый программист не будет хранить в базе данных пароли в открытом виде, хранят их хеши. К слову и десятизначный пароль может быть инвертирован, если его до этого подбирали и он попал в базу хешей, с такой точки зрения безопасности супер-пупер пароль из стапятисот символов может быть дырявым как бюджет России, а сравнительно простенький пароль из 6-8 символов устойчивым. Ну и конечно большинство взломов происходит не брутфорсом, а через уязвимости в системе и по глупости самих пользователей которые попадаются на банальный фишинг и не обновляют свои операционки.


    1. Meklon Автор
      30.08.2017 14:54

      Базы утекают цельным куском. Вот их и молотят оффлайн.


  1. SirEdvin
    30.08.2017 15:06
    -1

    Вариант с balalaika меня особенно порадовал) Главный недостаток такого метода — уродские сервисы с ограничениями по длине пароля. Никогда не понимал, что именно они при этом экономят. Тем более, что хранить им все равно только соленый хеш от ключа пользователя.

    Мне всегда казалось, что дело в ограничение хеша. Они хранят только определенную длину хеша и вводить пароли длиннее не видят смысла, так как сложность хеширования растет, а шанс коллизии больше.


    1. Meklon Автор
      30.08.2017 15:18

      А она значимо растёт в районе 10-100 символов? Мне всегда казалось, что это какие-то микросекунды. Просто одна видеокарта — это тысячи мегахешей в секунду, нет?


      1. SirEdvin
        30.08.2017 15:20

        Вроде особо не должно, но миллисекунды в целом тоже бывают важны. Но мне кажется, основное ограничение в количестве хранимых символов. Если пароли выше 8 символов будут с вероятностью больше 50% иметь коллизию с паролем меньшей длинны, зачем их разрешать?


        1. Meklon Автор
          30.08.2017 15:41

          Коллизии явно редчайшее явление.

          SHA-256(«The quick brown fox jumps over the lazy dog»)
          = D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592

          64 символа. Один регистр букв и цифры. 36 вариантов на символ (26 букв и 10 цифр). Значит, количество вариантов 3664. А именно 4011991914547630480065053387702443812690402487741812225955731622655455723258857248542161222254985216. Это почти половина гугола (10100), что офигеть как много. Мне кажется возможность случайной коллизии здесь можно вообще не учитывать. Это заведомо больше. чем число атомов во всей вселенной.


          1. blacknoize
            30.08.2017 22:01

            Вы немного ошиблись, на выходе SHA-256 дает 10 цифр и 6 символов (A-F), соответственно, только 16^64 вариантов, на 33 порядка меньше.


          1. python273
            30.08.2017 22:01

            64 символа. Один регистр букв и цифры. 36 вариантов на символ (26 букв и 10 цифр). Значит, количество вариантов 3664.

            Это HEX, так что 6 букв всего. Вообще гадать не нужно, SHA256 — 256 bit — 2^256


            1. Meklon Автор
              30.08.2017 22:02

              Черт, да)


  1. AmberSP
    30.08.2017 16:00
    +3

    Годный пароль на базу KeePass, а он уже хранит зубодробительные комбинации для разных сервисов.
    Что характерно, менять пароль раз в 3 месяца требует только один из них. Причём тот, которым я пользуюсь раз в месяц, но до сих пор не могу придумать, как доступ постороннего к этому сервису может мне навредить. Всё, что он позволяет — узнать график платежей по кредиту :D Никаких расходных операций банк через веб не умеет.


    1. Meklon Автор
      30.08.2017 16:04

      Я тоже так делаю для важных вещей. Для всякой фигни попроще неплохо использовать что-то удобоваримое. Получать доступ с чужого устройства непонятно откуда к своей базе иногда нетривиально. Несмотря на все синхронизации.


      1. AmberSP
        30.08.2017 17:10
        +1

        У KeePass есть клиент под андроид. База в дропбоксе, локальная копия на всех ПК и на мобиле.
        «доступ с чужого устройства непонятно откуда к своей базе» становится практически невероятной ситуацией.
        А «Для всякой фигни попроще» пароль помнит браузер


        1. Pilat
          31.08.2017 02:11

          Под андроидом использование паролей, которые ни прочитать с экрана, ни набрать с клавиатуры, пользы не приносит. А такие пароли и есть целевая аудитория.


  1. tgz
    30.08.2017 17:38
    +1

    sudo apt install pass


  1. bano-notit
    30.08.2017 18:16

    А я где-то видел подобный текст. У меня даже послего его прочтения где-то полгода назад остался установленный pwgen)


  1. imwode
    30.08.2017 18:36
    +1

    Да, но
    *пост читать лень, а камменты еще ленивее*
    Один фиг надо менеджером паролей пользоваться, чтобы уникальные пароли для сервисов хранить — это раз
    И, самое главное. При смене пароля наступает самый трындец. Вот сменил ты пароль. Запомнил его. Пользуешься им ну, например, месяц. А потом едешь в отпуск на неделю, качественно отдыхаешь. Возвращаешься, вбиваешь пароль — а он не подходит! Через некоторое время до тебя доходит, что ты вбиваешь тот — старый — пароль! А новый — просто выбило отдыхом из мозга напрочь. Наглухо. И все, сидишь, сосешь палец.


  1. Pilat
    30.08.2017 20:10
    +1

    Один из способов.
    Пишем простенькое стихотворение, или просто кусочек текста. берём первые две буквы каждого слова — получается пароль. В такой текст можно и цифры и спецсимволы добавлять, чтобы учесть требования к паролям. Так как в основе слова, можно считать что набор включает 1000 символов. Из них строим 10-ти символьное слово (каждый символ — две первые буквы или цифры) записанное латиницей для совместимости.
    Итого энтропия 100.


  1. outZoNe
    30.08.2017 20:22

    Ещё можно включить английскую раскладку. И вводить что нибудь смысловое по русской раскладке


    1. Meklon Автор
      30.08.2017 20:23

      Как писали выше — плохо заканчивается на нестандартных клавиатурах. Банально на телефоне не дублируются символы.


  1. mokhin-denis
    31.08.2017 07:38

    Использую Password Safe. А файл с паролями храню на флешке, что может подключаться и к компьютеру и к смартфону


  1. helgisbox
    31.08.2017 12:23

    Можно писать свою любимую фразу с одинаковыми гласными, заменив родные: «pasasawarada», например ;) энтропия 56.


  1. Pycz
    31.08.2017 13:23

    Главный недостаток такого метода — уродские сервисы с ограничениями по длине пароля. Никогда не понимал, что именно они при этом экономят.

    Вообще, хоть какое-то ограничение на длину пароля оправдано, достаточно вспомнить баг в питоновском фреймворке Django: ссылка.
    Django does not impose any maximum on the length of the plaintext password, meaning that an attacker can simply submit arbitrarily large — and guaranteed-to-fail — passwords, forcing a server running Django to perform the resulting expensive hash computation in an attempt to check the password. A password one megabyte in size, for example, will require roughly one minute of computation to check when using the PBKDF2 hasher.

    То есть надежные хэши считаются медленно, и отправление заведомо неверного, но большого количества информации может привести к подвисанию сервиса. Сейчас ограничение на пароль в Django 4 КБ по умолчанию.
    Конечно, ограничивать пароль слишком сильно не стоит, но некоторые ограничения необходимы.


    1. Meklon Автор
      31.08.2017 13:24

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


  1. Xitsa
    31.08.2017 14:58

    Есть ещё любопытная утилита gnu-pw-mgr.
    А любопытна она тем, что делает безопаснее известный метод генерации паролей по имени сайта/пользователя и т. п.
    Метод включает в себя два компонента:


    • файл с ключом, который стоит защитить, но утеря не так опасна
    • секретный метод преобразования.

    Если я, например, хочу получить пароль для доступа на habrahabr.ru, то я ввожу в gnu-pw-mgr habra_SECRET_rbah.ru и получаю достаточно случайный пароль.


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


  1. oleg_gf
    31.08.2017 15:01

    Забытые пароли не такая уж проблема, хуже, когда не помнишь логин или сайт, от которого эти логин с паролем.

    И да, требования каждый месяц обновлять пароль реально бесят.


  1. Meklon Автор
    31.08.2017 21:40


    Прям очень в тему. Только зарегистрировался для участия в конгрессе) Здесь все прекрасно. http, создание учетной записи через него и ввод паролей. Скан паспорта тоже туда улетел. А в качестве «неплохого» пароля был принят password)))


  1. RealSaniok
    01.09.2017 09:23

    На одной площадке «парольная фраза» генерировалась подобным образом:
    zloi.kz/passgen


  1. cesare
    01.09.2017 09:23

    Как насчет такого пароля:
    "\x y -> sqrt (x*x) + (y*y)"

    Запомнить доволно легко