На Хабре и Гиктаймсе уже было много написано слов про пароли. В интернете можно встретить много программ и плагинов/аддонов для паролей. Браузеры умеют сохранять пароли. Казалось бы всё уже есть. Но нет, мне не хватало своего велосипеда, потому что все старые велосипеды имеют свои недостатки. Главный недостаток всех программ — это их база данных, которая может легко убиться. И я через это прошел. Самая известная программа KeePass (точнее её форк KeePassX) у меня дважды убивала сама свой файл. Не знаю как сейчас, но два года назад она не умела делать резервную копию базы и если место заканчивалось или падала, или ещё что — файл базы легко становился размером в 0 байт. Единственная программа, которая мне нравилась — это Password Commander, она сама делала резервную копию, но, к сожалению, проект умер и был он только под Масдай.
Люди делятся на тех, кто не делает бэкапы и тех кто уже делает.
2-3 года назад у меня родилась и развилась идея своего велосипеда — генератора паролей. Разумеется идея не новая и её вариации имелись у многих и много раз обсуждались. На Хабре, в статье "Генерация xkcd паролей на PHP" я высказал свою идею ещё в 2014 году и после этого, не спеша начал её реализовать и обкатывать. И вот в середине 2015 у меня появился плагин для браузеров ¡No PASSarán, о котором я и хотел бы рассказать в этом материале.
Кому лень читать путь к успеху моего молодого, динамично развивающегося проекта — можете сразу перейти на онлайн версию ¡No PASSarán или перейти на GitHub/Bitbucket
Кроме выше описываемого недостатка — смерть базы данных, все менеджеры паролей обладают ещё рядом недостатков (перечислю с оправданиями):
- Невозможность всегда и везде носить с собой базу. Конечно в век интернета и облаков — это не серьезный недостаток и, в принципе, всегда можно иметь копию на телефоне или в облаке;
- Это множество паролей, это надо искать по базе, то есть медленный доступ к данным. Конечно многие менеджеры уже научились встраиваться в браузеры и в приложения и автоматом вбивать данные;
- Например у браузеров надежность хранилища не очень хорошая. Разумеется можно поставить мастер-пароль, но и его можно перехватить кейлоггером.
- Ни в одном менеджере нельзя восстановить пароль.
Если не пользоваться менеджером, то запоминать сотни паролей не вариант и поэтому люди используют, в лучшем случае, пару паролей. Либо хранить в файлике, который в лучшем случае под поролем.
Я попытался избежать всех этих недостатков в своём велосипеде. Некоторые конечно пока не полностью решены, а некоторые ещё в планах. Но об этом ближе к концу статьи.
В настоящее время существует два популярных варианта «генерации» паролей и/или запоминания. Оба эти варианта описаны на популярной в сети картинке:
Второй вариант вроде бы взламывается дольше судя по статье (см. ссылку выше) и комментариям к статье. Но мне кажется, если он будет один и везде, что многие и делают (везде используют один пароль), то украв его однажды — можно взломать и угнать множество аккаунтов. А по моим наблюдения (не претендую на истину) и взломать можно проще, ибо можно собрать базу часто используемых слов (особенно в языках без суффиксов и окончаний) и подобрать их пары, ведь большинство будут использовать от 2 до 4 слов, это примерно как брутить 2-4 символьные пароли, но только по чуть большей базе, ведь со спец.символами количество «слов» тоже немаленькое. А сюда ещё можно добавить ограничение сервисов — некоторые сервисы разрешают только ограниченное число символов, что ещё больше сокращает перебор. А для пользователя очередная трудность — надо запоминать или придумывать новый пароль, или использовать везде более короткую версию. И в данном случае не принимая во внимание, что другие сервисы просят как минимум 1 цифру или спец.символ.
В своём велосипеде я попытался объединить и улучшить, взять лучшее от этих вариантов. От второго варианта то, что надо иметь 3 слова (я их назвал соль, алгоритм и мастер пароль), а от первого — финальная версия пароля получается в MD5, а ведь именно часто в MD5 хранится пароль на сервере.
Изначально я придумал и использовал простенький алгоритм для сайтов, типа такого:
- Был мастер пароль, допустим quaka42eqava
- Далее брал сайт, например example.com, и получал из него другие части, например: example, 7, com, moc, 3; думаю понятно что из чего следует?
- Третьим шагом получал новый пароль moc3quaka42eqava7example
Данный вариант лёгок в запоминание, не надо с собой таскать базу и удовлетворяет обоим требованиям, которые описаны на картинке. Но у него есть узкие места:
- например я попал бы на сайт злоумышленника и ввёл там свой пароль, созданный для его сайта сайтзлоумышленника.рф => фр2quaka42eqava18сайтзлоумышленника. Посмотрев на пароль — он мог бы понять его алгоритм и угнать часть моих аккаунтов
- постоянно разбивать домен и считать символы надоедает
Из-за чего я усовершенствовал алгоритм. Так как все пароли хранятся на серверах в зашифрованном виде, а именно часто в MD5 (с солью), то решено было пойти по тому же пути и добавить шифрование к этому алгоритму. Но это вызывало ещё одну сложность — постоянно открывать консоль или MD5 генератор и вбивать туда данные, поэтому я начал записывать пароли в файлик, что отбросило мою идею в каменный век, вернув её к самому узкому месту — базе данных паролей, который могут украсть или файл может повредиться и с собой его не возьмешь (только если специально). Разумеется если от кражи можно защититься ещё одним паролем, которым закрыть базу данных, то от порчи файла, которая может достаточно легко произойти на шифрованном файле — никто не застрахован. И я решился, точнее добрался до откладываемого проекта.
Итак, представьте, что свой личный проект забросили (извините, конечно же отложили, чтобы вернуться, когда будет время!)
Dreddik
(в статье и где-то в комментариях на Хабрахабре)
Как пользоваться
Допустим вы придумали три части, для примера: Мастер пароль, как и раньше quaka42eqava, соль — имя домашнего питомца «Кузя» и алгоритм — свой номер телефона (Пароль — чувствителен к регистру, а соль и алгоритм нечувствительны к регистру). Вбиваем соль и пароль в настройки плагина и они сохранятся там. Затем переходим на интересующий нас сайт, где хотим зарегистрироваться/авторизироваться, ставим курсор на поле с паролем и нажимаем кнопочку плагина на панели браузера, после чего в появившемся окне вбиваем мастер пароль и жмём кнопку OK или Enter. Пароль будет автоматически сгененрирован и вставлен в поле, где был курсор.
Данный плагин и онлайн версию можно использовать не только для сайтов. Если вам необходим пароль для сторонней программы, то необходимо в онлайн версии или в гостевом режиме плагина поставить галочку на «Забыть про домен».
Дополнительно доступны 4 кнопки (в онлайн версии 3):
Кнопки-иконки ¡No PASSarán
- Копировать пароль в буфер обмена
- Показать сгенерированный пароль
- Расширенные настройки генерации пароля
- Гостевой режим (не доступно в онлайн версии, потому что онлайн версия изначально и воспроизводит гостевой режим)
Алгоритмы генерации
Алгоритмы строятся следующим образом. Например мы указали телефон 88005555555, соль Кузя и мастер пароль quaka42eqava, для сайта example.com. Далее будет три этапа автоматической генерации исходя из алгоритма:
- Получаем все части (не буду дублировать части):
- 8 — Первая половина мастер пароля — это quaka4
- 0 — Доменное имя целиком — это example
- 5 — Количества символов в зоне — это зона COM, а следовательно 3
- Полученное складывается в строку, но в начале обязательно добавляется мастер пароль, это дополнительная предосторожность: quaka42eqavaquaka4quaka4exampleexample3333333. Неплохой длины получается пароль, да? Кто сможет прикинуть сколько лет надо на подбор?
- Последним шагом уменьшаем число лет на подбор, а именно перегоняем эту строку в MD5 => md5(quaka42eqavaquaka4quaka4exampleexample3333333) => f837bab2e4d20a53e884a42e9473708a
Алгоритмы возможно строить двумя способами — базовым и расширенным.
Базовые способ построения алгоритма
Для базового алгоритма доступны все буквы (русские и английские) и цифры, их надо указывать единым «словом».
- 0 — Доменное имя целиком (alias: a, k, u, а, й, у, э)
- 1 — Доменная зона целиком (alias: b, l, v, б, к, ф, ю)
- 2 — Первая половина домена (alias: c, m, w, в, л, х, я)
- 3 — Вторая половина домена (alias: d, n, x, г, м, ц)
- 4 — Количества символов в домене (alias: e, o, y, д, н, ч)
- 5 — Количества символов в зоне (alias: f, p, z, е, о, ш)
- 6 — Соль целиком (alias: g, q, ё, п, щ)
- 7 — Мастер пароль целиком (alias: h, r, ж, р, ъ)
- 8 — Первая половина мастер пароля (alias: i, s, з, с, ы)
- 9 — Вторая половина мастер пароля (alias: j, t, и, т, ь)
Расширенные способ построения алгоритма
Разумеется их можно и нужно использовать с цифрами из базового алгоритма.
Для расширенного способа обязательно использовать цифры разделённые любым символом, кроме цифр и букв. Данные алгоритмы будут дополняться.
- 10 — Перевернутое доменое имя целиком
- 11 — Перевернутая доменая зона целиком
- 12 — Перевернутая первая половина домена
- 13 — Перевернутая вторая половина домена
- 14 — нет
- 15 — нет
- 16 — Перевернутая соль целиком
- 17 — Перевернутый мастер пароль целиком
- 18 — Перевернутая первая половина мастер пароля
- 19 — Перевернутая вторая половина мастер пароля
- 160 — Первая половина соли
- 161 — Вторая половина соли
- 162 — Перевернутая первая половина соли
- 163 — Перевернутая вторая половина соли
То есть например 8-8-0-0-163-10-13
Рекомендуется обязательно использовать элемент алгоритма с доменом — 0, 2, 3 и т.д.
Расширенные настройки
На некоторых сайтах, например Яндексе, требуется установить пароль один на все поддомены. Для этого необходимо активировать настройку «Отключить поддомены», после этого при генерации будут игнорироваться поддомены и использоваться только домен. Внимание! Если вы уже создали пароль на поддомене, то он больше не подойдет, необходимо будет снимать галочку на том поддомене.
Есть сайты, которые запрещают использовать более определённого числа символов в пароле. На таких сайтах можно включить настройку обрезания. В ¡No PASSarán используется стандартная javascript функция substr, поэтому подробности, как обрезать строку можно посмотреть в документации к этой функции. Пример использования:
Предположим у нас будет сгенерирована строка «абвгдеёжзи», то вбив в поле «Обрезать» числа, у нас будет следующее
-3, 2 => жз
-3 => жзи
1 => бвгдеёжзи
-20, 2 => аб
Все эти настройки хранятся в браузере. В следующих версиях появится возможность сохранять расширенные настройки в файл, для переноса между браузерами и компьютерами.
Преимущества и недостатки
Теперь не надо хранить сотни паролей ни на компьютере, ни в голове, ни в блокнотике. Все пароли уникальные и взломать или украсть их почти невозможно. Пароль состоят из двух частей (трех элементов): Мастер пароль и алгоритм с солью, которые отделены друг от друга. Алгоритм и соль хранятся в браузере и их могут украсть, завладев вашим компьютером, но злоумышленники всё равно не смогут получить пароли ваши. Если же будет украден мастер-пароль, например с помощью кейлоггера, то не зная алгоритм и соль — они не смогут получить доступ к паролям.
Исключение: онлайн версия, которую рекомендуется использовать только в крайнем случае и когда вы уверены, что на компьютере нет кейлоггеров и прочей живности. В таком случае вообще паролями лучше не пользоваться, какими бы надёжными они не были.
Данные пароли сложно поддаются социальной инженерии.
Пароли можно передавать по незащищённому (http) соединению. Даже если пароль будет перехвачен для текущего сайта, пароли от других сайтов останутся в безопасности.
Из недостатков:
- Необходимо помнить три ключевых «слова». Хотя соль и алгоритм можно не запоминать, а написать на листочке и спрятать в сейф, чтобы когда нибудь восстановить, если вдруг потребуется, но тогда не будет доступна онлайн версия, если вы забудете.
- Необходимо иметь под рукой компьютер с плагином или зайти на онлайн версию.
- На данный момент нет спецсимволов, но они запланированы
Ещё немного о ¡No PASSarán
В последней версии добавлена возможно генерировать пароль в режиме гостя. Благодаря этому можно на одном сайте иметь несколько аккаунтов с разными сгенерированными паролями. Для этого можно, например, в поле «Соль» прописать текущий логин и используя эту соль-логин будет сгенерирован уникальный пароль. Зная очередной логин — не надо будет вспоминать пароль, ведь всё остальное (алгоритм и мастер-пароль) используется как и прежде.
Я этим плагином пользуюсь с апреля 2015 года. Всю красоту и удобство испытал на себе. Приглашаю и вас воспользоваться данным плагином абсолютно бесплатно, без регистраций и СМС.
Ссылки и установка
Онлайн версия на зеркалах GitHub'а:
Онлайн ¡No PASSarán. Зеркало 1
Онлайн ¡No PASSarán. Зеркало 2
Онлайн ¡No PASSarán. Зеркало 3
Репозитории
Расширения для браузеров:
Для Хрома и подобных ему браузеров
- Стабильная ветка в Google WebStore, стабильная версия 1.3
- Бета ветка Google WebStore, последняя версия 1.4.0 (beta версия)
Для Firefox
- На сайте AMO (addons.mozilla.org) можно ознакомиться со стабильной и бета версиями
PS Не ругайтесь сильно на код.
Автор: BaNru