Менеджер паролей, который не хранит пароли — конкурс пет-проектов
Написал свой удобный и безопасный менеджер паролей, который могут протестировать все.
2К открытий6К показов
Всем привет! Меня зовут Артем (Nelkor) и я всем сердцем увлечён программированием. Занимаюсь этим на работе и время от времени создаю пет-проекты.
Вступление
Все мы пользуемся паролями. Мы хотим, чтобы наши пароли были сложными, уникальными для каждого аккаунта и не хотим хранить их на бумажке. Однако, помнить десятки разных и сложных паролей попросту невозможно, и мы идём на компромисс. Например, пароли начинают повторяться. Мы понимаем, что это уязвимость, но как иначе удержать свои доступы в голове?
В начале этого года я решил — хватит! Я перейду на один из менеджеров паролей. Все крутые парни пользуются менеджерами паролей. И я стал изучать их.
Неочевидная проблема заключается в том, что менеджеры паролей… хранят пароли. Как правило, это зашифрованный файл на устройстве. Если доступ к этому файлу будет утерян, мы потеряем доступ ко всем своим аккаунтам. Если мы купили новое устройство, на нём этого файла нет. Если мы завели новый аккаунт на одном устройстве, а войти хотим с другого, на нём этого пароля нет. Файл необходимо синхронизировать и следить за его версиями.
В критически важный момент мы можем не получить доступ к своему аккаунту.
Эту проблему, якобы решает облачное хранение. Но облачное хранилище — это всегда чей-то сервис. Мы не можем быть уверены, что этот сервис не сломается или не откажет нам в доступе по любой причине.
Идея
Ни один из популярных менеджеров паролей не предоставляет той функциональности, которая мне нужна. И я решил сделать свой.
Принцип простой — придумать и запомнить один надёжный пароль не так уж трудно. Этот пароль может играть роль источника энтропии для криптографической функции, которая вычисляет пароль для конкретного аккаунта. Все данные аккаунтов можно безопасно сохранять на устройстве для удобства пользователя.
Зная свой исходный пароль, мы можем получить доступ к любому своему аккаунту откуда угодно, хоть с совершенно нового устройства. Чистая функция вычислит оба раза одинаковый результат, если передавать ей на вход одинаковые данные.
В качестве варианта реализации я выбрал PWA. Во-первых, PWA — это, прежде всего, веб-сайт. То есть получить доступ к нему максимально просто. Во-вторых, PWA — это приложение, которое можно установить на любое устройство. Буквально одни плюсы и нет минусов.
В начале года как раз узнал про методологию Feature-sliced design и решил распробовать её на своём новом пет-проекте. В качестве реактивной библиотеки выбрал свою любимую третью Vue. Итак, дамы и господа, встречайте…
Passcryptum
Исходный пароль обрабатывается функцией PBKDF2 SHA-512 262144 итераций. Это серьёзное препятствие на пути у тех, кто захочет получить доступ к нашим аккаунтам путём перебора исходного пароля.
Приложение не хранит пароли, но хранит список сервисов и логинов в зашифрованном виде. Без нашего исходного пароля никто не сможет прочитать даже список сервисов, которыми мы пользуемся. В свою очередь мы, заходя в Passcryptum, сразу видим свои сервисы и можем сразу скопировать логин/пароль.
Список сервисов можно безопасно хранить где угодно и передавать на другие устройства. Даже если у нас новое устройство, а список сервисов потерян — ничего страшного, можно просто ввести свои сервисы и логины заново и получить свои пароли.
Если есть нужда сменить пароль на аккаунте — у каждого логина есть версия. Инкрементируем версию и получаем новый совершенно уникальный пароль.
Чтобы не вводить каждый раз свой суперсекретный исходный пароль (мало ли где кто подсмотрит), существует возможность задать PIN. Хеш исходного пароля шифруется значением PIN, а также отпечатком системы устройства. PIN можно сколько угодно раз забыть, удалить и установить новый. Главное — помнить свой исходный пароль и вводить его исключительно осторожно.
Заключение
Passcryptum решил мою проблему и я с радостью готов поделиться со всем миром этим инструментом. В Passcryptum нет ничего платного и весь код открыт.
Помимо README.md, я добавил несколько полезных инструкций:
Для инструкций выбрал английский язык как международный. Надеюсь, это никому не помешает прочитать, ведь средства автоматизированного перевода сейчас уже на очень высоком уровне.
Спасибо за внимание! Каждому человеку, который пользуется паролями (ну то есть просто каждому), искренне советую попробовать Passcryptum.
2К открытий6К показов