Мы на каждом шагу сталкиваемся с напоминаниями, что нужно делать пароли посложнее, причём для каждого сайта и сервиса пароль должен быть уникален. Здравый смысл в этих советах определённо есть. Но кем надо быть, чтобы запомнить несколько десятков паролей ко всевозможным почтам, форумам, личным кабинетам, мессенджерами и прочим сервисам? Да ещё и длинные, с цифрами, буквами в разных регистрах, а в идеале — с дополнительными символами. Добавьте к этому совет регулярно менять пароли, и задача запоминания станет просто нерешаемой. Люди ленивы от природы, и потому мы либо делаем пароли простыми, либо используем небольшое количество паролей, либо вообще один. И зачастую их ещё куда-нибудь записываем. Вобщем, одна сплошная дыра в безопасности. Однако есть одна методика, с помощью которой можно вообще не запоминать пароли. Всё дело в алгоритме, который нужно вызубрить как Отче наш, и этого будет достаточно, чтобы сразу же восстановить свой уникальный (!) пароль для любого ресурса.
Считается, что каждый из нас оперирует в среднем 19 паролями. Естественно, чтобы их было легче помнить, мы стремимся сделать пароли проще, тем самым существенно ослабляя их устойчивость. Ещё больше ухудшает ситуацию использование одного пароля на нескольких ресурсах.
Мануэль Блюм, профессор вычислительных наук из Университета Карнеги Меллона, лауреат Премии Тьюринга 1995 года, предложил метод «вычисляемых человеком» паролей. Его преимущества в том, что пароли получаются довольно сложными, но самое главное — их не нужно запоминать. Если вы сможете запомнить сам алгоритм вычисления паролей и заранее выбранный единый ключ, то потом по адресу сайта сможете самостоятельно быстро генерировать и воссоздавать пароли.
Суть метода в том, что с помощью алгоритма и ключа каждой букве адреса сайта сопоставляется другая буква или цифра. Их комбинация и представляет собой пароль.
Например: возьмём ключ в виде матрицы 6х6, заполненной 26 буквами (английский алфавит) и 10 цифрами. Допустим, первая строка содержит буквы E, T, A, O, I, N; а остальные строки заполнены в соответствии с ETAOIN SHRDLU + цифры от 0 до 9.
Теперь нужно выбрать алгоритм, в соответствии с которым буквы адреса будут заменяться символами из матрицы. Для данного примера возьмём предложенный Блюмом алгоритм, основанный на «следовании по сторонам света».
Придумаем пароль для сайта Geektimes. находим букву G в матрице и переходим на одну клетку на «север». Буква F становится заменой буквы G. Далее находим букву Е и заменяем её на символ, находящийся на «востоке» — Т. Следующий символ берётся с «юга», то есть вторая буква Е заменяется уже не на Т, а на S. Буква К заменяется на «западный» символ — G. И так далее, последовательно проходя все стороны света по часовой стрелке: север, восток, юг, запад. Если символ, которому ищется замена, находится на краю матрицы и у него нет нужной «стороны света», то берётся тот символ, что находится ближе всего по часовой стрелке. Например, если для J нужно взять символ с «востока», то берётся 4, поскольку «юг» идёт после востока в данном алгоритме.
Получился такой пароль:
Как вы понимаете, можно использовать и множество других алгоритмов для подбора замен. Можно модифицировать алгоритм, добавляя в каждый пароль заранее выбранную комбинацию спецсимволов, например, %^&.
Конечно, этот способ не слишком удобен для случаев, когда вам нужно часто вводить пароль на каком-то ресурсе. Но, с другой стороны, скоро вы его просто запомните. Зато можно забыть про генераторы паролей, запоминание комбинаций, опасения, что кто-то узнает ваш часто используемый пароль. Главное — держать в голове алгоритм и ключ под рукой.
Любители глубокого погружения в математику могут изучить авторскую работу, в которой и был предложен данный метод.
Комментарии (46)
ploop
01.10.2015 09:52+20Ох, сколько уж этих методик и алгоритмов было придумано… Бестолку всё это.
Частые пароли запомнятся, для редких алгоритм забудется, для всех учёток надо менять пароли (часть забудешь поменять, потом надо всё равно искать/вспоминать старый), есть масса конфиденциальных данных, не являющихся паролями (номер кредитки), есть масса паролей, которые нельзя поменять (выданы администратором например, криво, но существует такая практика), есть сервисы, используемые совместно с другими людьми, есть доступ по сертификатам или файлам-ключам.
Пока решение только одно: менеджер паролей. При базовых знаниях о безопасности минусы этого решения ничтожно малы по сравнению с плюсами.semlanik
01.10.2015 09:56Мой диплом как раз заключался в проектировании библиотек/приложении(инженерная специальность), которое я написал для десктопа и андроида. Оно копировало пароль в буфер обмена(заведомо предполагая, что к буферу обмена система просто так доступ не дает) и после чего например в браузере вы можете вставить его в поле ввода паролей. В случае с менеджером паролей злоумышленнику надо знать только пароль от самого менеджера. Со схемой которая описана выше, ему надо знать методику по которой вы «именуете» ресурсы на которых планируете вводить пароль.
zuborg
01.10.2015 10:17Генерирую пароли с помощью md5. Сомневаюсь, что кто-то сможет забрутфорсить соль, которая добавляется к логину и имени сайта.
Есть недостаток, да, — нужна консоль под рукой и уверенность, что нет логгера.semlanik
01.10.2015 10:28у md5 есть недостаток — отсутствие, например, спецсимволов и верхнего регистра, которые зачастую являются обязательным условием для регистрации в ресурсе.
zuborg
01.10.2015 10:35+1Ну, тут всегда возможны вариации, типа добавлять спецсимвол в конце, и свои инициалы большими буквами в начале.
А к самому md5 ещё base64 навесить…
Криптостойкость получившегося пароля (128 бит) это не ухудшит.semlanik
01.10.2015 10:41-1Не понимаю причем тут 128 бит, если это на деле 32 ASCII символа -> 256 бит или вы запихиваете сайту бинарные данные?:) Только вот если при брутфорсе знать про md5 то словарь сокращается до 16 слов, что далеко не прибавляет ему криптостойкости. Впрочем как и при раскрытии матрицы в методе описанном в статье.
Ogra
01.10.2015 13:36md5 — это 128 битный хэш. Его можно записать 32 ASCII символами в шестнадцатеричной системе, 16 символами в восьмеричной, или даже 128 ASCII символами в двоичной системе. Но криптостойкость пароля в 128 бит от этих перестановок не изменится!
Ogra
01.10.2015 13:42md5 можно записать в base64, а не в банальном хексе, тогда все будет. Наверное =)
Скажем, md5 хэш от строки «habrahabr», записанный в base64 выглядит так: «j/2scFKMvaCZ0aFMb+iplw==». Два знака равенства на конце будут всегда.
Aclz
01.10.2015 11:40Сомневаюсь, что кто-то сможет забрутфорсить соль, которая добавляется к логину и имени сайта.
Брутфорсить не надо, достаточно спалить один-единственный пароль и ваша схема становится кристально прозрачной для всех остальных сайтов.zuborg
01.10.2015 14:13Верно. А при каких условиях его спалить проще, чем взломать остальные схемы с генерацией паролей или менеджером оных?
Не скажу что схема идеальна, но для меня она проста, md5 обычно под рукой, и уж всяко лучше использования одного и того же пароля на разных сайтах.
P.S. на самом деле, для особо важных сайтов используются просто уникальные секретные фразы.Aclz
01.10.2015 15:24А при каких условиях его спалить проще, чем взломать остальные схемы с генерацией паролей или менеджером оных?
В менеджере вы спалите только текущие содержащиеся в менеджере пароли. Зная схему, палятся в т.ч. и будущие пароли.
Kain_Haart
01.10.2015 13:57Что делаете, когда сайт ограничивает максимальную длину пароля?
zuborg
01.10.2015 14:09Ничего оригинального — использую первые N символов, сколько разрешается.
amarao
01.10.2015 15:44А как вы вспоминаете, сколько символов надо вводить?
zuborg
01.10.2015 16:00Каюсь — вместо меня помнит (и вводит) браузер. Не критические пароли (которые генерируются по этой схеме) я разрешаю ему запоминать.
amarao
01.10.2015 16:28То есть password manager. Ну и о чём тогда разговор? Я половину своих паролей в жизни в глаза не видел. gen, copy, paste. Плюс синк файла паролей между устройствами.
zuborg
01.10.2015 16:54Разница все же есть.
Пароли не хранятся в файле, только в браузере. Хотя и из браузера их тоже можно своровать, но все же сложнее…
Если мне понадобится, то я смогу восстановить нужный пароль по схеме, а Вы без файла паролей — не сможете.amarao
01.10.2015 17:42А браузер не файле хранит пароли?
… именнно потому у меня этот файл относится к тщательно бэкаплимуемым. Вместе с ssh и gpg-ключами.
SunX
02.10.2015 13:30Из браузера стырить пароль гораздо проще, чем из менеджера паролей. Файл менеджера паролей надо еще найти и расшифровать, а где лежит файл с паролями любого популярного браузера всем, кому надо, известно. ну и мастер-пароль мало кто ставит в браузере. Пробовал ставить — оказалось слишком уж неудобная штука.
uterr
01.10.2015 10:45+2Вот только возникает проблема — у многих сайтов есть требования к сложности пароля — обязательная большая буква, служебный символ, цифра. Что, если название сайта, по нашей табличке, не дает такой последовательности? Создавать новую табличку? Придумывать для сайта «соль»-«отступ», чтоб попали и большая буква и цифра и символ?
Боюсь, это несколько ограничивает применение… и снова приходится использоваться кучу разных не вычисляемых человеком паролей :)sheknitrtch
01.10.2015 11:57+5Указанный в статье алгоритм предполагает, что у одного сайта может быть только один пароль, так как пароль генерируется из имени домена. А что, если сайт подвергся взлому, и вам приходит официальное письмо от администрации: «пожалуйста, поменяйте пароль». И что делать?
karabanov
02.10.2015 08:11Пришел написать похожий комментарий, а вы уже написали. Да, на ряде сайтов, в пароле либо запрещено использовать, некоторые символы (сайт налоговой службы — нельзя использовать "=", например), либо наоборот, сайт считает пароль простым если ты эти символы не добавишь… У меня тоже есь некий алгоритм генерации пароля, и он благополучно обламывается вот от такого креатива разработчика.
В общем мы предполагаем, а владелец сайта располагает.
semlanik
01.10.2015 10:55Схема(матрица) не обязательно должна содержать заглавные буквы. Это основное и главное преимущество такого подхода.
zirus
01.10.2015 11:19+4Сейчас браузеры запоминают мой пароль так, что не мне приходится его каждый раз вручную вводить. На каждый сайт keepass мне придумал сложнейший пароль. Запоминать мне его не надо, вводить вручную почти никогда не надо, пароль гарантированно отвечает признакам сложности(а некоторые сайты отказываются принимать такие длинные пароли). Если надо где-то ввести пароль, он всегда доступен со смартфона(синхронизация базы паролей через облачный диск + защита базы паролей при помощи ключа).
А данный метод мне напоминает Security through obscurity. Если алгоритм станет известным и часто используемым, ничего не стоит его ввести в алгоритмы перебора паролей.semlanik
01.10.2015 11:30+1«Сейчас браузеры запоминают мой пароль так, что не мне приходится его каждый раз вручную вводить.» компрометация устройства/браузера приводит к доступу ко всем вашим учетным записям. Просто подумайте сколько времени после обнаружения компрометации вам понадобится чтобы поменять все пароли? С данным подходом компрометация приложения/устройства максимум дает выигрыш в переборе. Но перебор не происходит моментально и с учетом защиты самих сайтов времязатратен — больше времени на смену паролей.
Открытость алгоритма тут не дает никакого выигрыша вообще. Открытость схемы(матрицы) же дает колоссальный выигрыш при переборе, но схему еще надо получить, например из зашифрованного ключом хранилища.
ЗЫ: А уж автозаполнение форм паролями полученными таким путем сделать не проблема в эпоху браузеров с плагинами.Iv38
01.10.2015 13:52Я так понимаю, речь идет о хранителях паролей, которые через плагины подставляют пароли в браузер. В таком случае нужна компрометация ключа. И в этом алгоритме компрометация ключа приведет к тем же печальным последствиям.
FuzzyWorm
01.10.2015 11:35+8Извините, навеяло:Швейк между тем разглядывал номер винтовки и вдруг воскликнул:
— Четыре тысячи двести шестьдесят восемь! Такой номер был у одного паровоза в Печках. Этот паровоз стоял на шестнадцатом пути. Его собирались увести на ремонт в депо Лысую-на-Лабе, но не так-то это оказалось просто, господин фельдфебель, потому что у старшего машиниста, которому поручили его туда перегнать, была прескверная память на числа. Тогда начальник дистанции позвал его в свою канцелярию и говорит: «На шестнадцатом пути стоит паровоз номер четыре тысячи двести шестьдесят восемь. Я знаю, у вас плохая память на цифры, а если вам записать номер на бумаге, то вы бумагу эту также потеряете. Если у вас такая плохая память на цифры, послушайте меня повнимательней. Я вам докажу, что очень легко запомнить какой угодно номер. Так слушайте: номер паровоза, который нужно увести в депо в Лысую-на-Лабе, — четыре тысячи двести шестьдесят восемь. Слушайте внимательно. Первая цифра — четыре, вторая — два. Теперь вы уже помните сорок два, то есть дважды два — четыре, это первая цифра, которая, разделённая на два, равняется двум, и рядом получается четыре и два. Теперь не пугайтесь! Сколько будет дважды четыре? Восемь, так ведь? Так запомните, что восьмёрка в номере четыре тысячи двести шестьдесят восемь будет по порядку последней. После того как вы запомнили, что первая цифра — четыре, вторая — два, четвёртая — восемь, нужно ухитриться и запомнить эту самую шестёрку, которая стоит перед восьмёркой, а это очень просто. Первая цифра — четыре, вторая — два, а четыре плюс два — шесть. Теперь вы уже точно знаете, что вторая цифра от конца — шесть; и теперь у вас этот порядок цифр никогда не вылетит из головы. У вас в памяти засел номер четыре тысячи двести шестьдесят восемь. Но вы можете прийти к этому же результату ещё проще…
Фельдфебель перестал курить, вытаращил на Швейка глаза и только пролепетал:
— Карре аb!
Швейк продолжал вполне серьёзно:
— Тут он начал объяснять более простой способ запоминания номера паровоза четыре тысячи двести шестьдесят восемь. «Восемь без двух — шесть. Теперь вы уже знаете шестьдесят восемь, а шесть минус два — четыре, теперь вы уже знаете четыре и шестьдесят восемь, и если вставить эту двойку, то всё это составит четыре — два — шесть — восемь. Не очень трудно сделать это иначе, при помощи умножения и деления. Результат будет тот же самый. Запомните, — сказал начальник дистанции, — что два раза сорок два равняется восьмидесяти четырём. В году двенадцать месяцев. Вычтите теперь двенадцать из восьмидесяти четырёх, и останется семьдесят два, вычтите из этого числа ещё двенадцать месяцев, останется шестьдесят. Итак, у нас определённая шестёрка, а ноль зачеркнём. Теперь уже у нас сорок два, шестьдесят восемь, четыре. Зачеркнём ноль, зачеркнём и четвёрку сзади, и мы преспокойно опять получили четыре тысячи двести шестьдесят восемь, то есть номер паровоза, который следует отправить в депо в Лысую-на-Лабе. И с помощью деления, как я уже говорил, это также очень легко. Вычисляем коэффициент, согласно таможенному тарифу…» Вам дурно, господин фельдфебель? Если хотите, я начну, например, с «General de charge! Fertig! Hoch an! Feuer!» Чёрт подери! Господину капитану не следовало посылать вас на солнце. Побегу за носилками.
Пришёл доктор и констатировал, что налицо либо солнечный удар, либо острое воспаление мозговых оболочек.
Когда фельдфебель пришёл в себя, около него стоял Швейк и говорил:
— Чтобы докончить… Вы думаете, господин фельдфебель, этот машинист запомнил? Он перепутал и всё помножил на три, так как вспомнил святую троицу. Паровоза он не нашёл. Так он и до сих пор стоит на шестнадцатом пути.i360u
01.10.2015 11:48+1Думаю до описываемого метода любой, кто знает слово «криптография» уже самостоятельно догадался.
Curious_Vik
01.10.2015 12:02+4Я правильно понял, что вместо десятка паролей предлагается запомнить матрицу 6х6, хаотично заполненную буквами и цифрами?
Kolegg
01.10.2015 14:38+5А не проще ли смотреть на квертиклавиатуру? там тоже вполне себе неплохая матрица 4х10…
zv347
01.10.2015 16:27Присоединяюсь у товарищу выше про кверти-клавиатуру. У меня это получилось практически случайно. Вот моя история.
Когда-то давно, в несознательном возрасте, у меня был один пароль для всего, состоящий из примерно 10 цифр. Цифры эти, кстати, соответствовали кнопкам на телефоне, которые надо нажимать, чтобы набрать в Т9 одно особое слово. Потом я стал пользоваться ноутбуком без цифрового блока, елозить рукой по цифровому ряду мне не понравилось, и я стал использовать пароли из букв, расположенных по тому же паттерну (т.е. взаимному расположению кнопок), что и мои цифры на цифровом блоке — благо цифры за несколько лет научился вводить вслепую за секунду. Таким образом, теперь я использую довольно сложные несловарные пароли, легко вспоминаемые по адресу сайта и определенному правилу, связанному с рядами клавиатуры.asm0dey
02.10.2015 07:51ПРосто так шифрблокнот у всех почти одинаковый получается, а это не совсем тру.
semlanik
Кусок моего диплома 2011 года, 1 в 1 :) Криптоустойчивость таких паролей очень низкая, а при раскрытии матрицы дает очень плачевный доступ к быстрому брутфорсу. Но преимуществом является машинонезависимость при наличии схемы(матрицы) и понимания алгоритма, и «генерация» паролей с заданной сложностью(наличие спецсимволов/цифр/букв, длина, уникальность)
semlanik
Надо еще конечно почитать оригинал, но помимо «признака» я примешивал стандартный пароль в качестве «соли», это дает чуть большую степень защиты при несанкционированном доступа к самим схемам(матрицам).