Раз и навсегда решить проблему паролей меня побудила история со взломанным LinkedIn — очень неприятно было увидеть свой пароль в списке самых часто встречающихся. Паролей нынче нужно помнить все больше, требования к ним становятся все жёстче, а на OpenId что-то мало кто переходит.
Поиск решения начнем с анализа угроз паролям, и возможных методов противодействия.
Угроза №1 это сами сайты, на которые надо при регистрации отправить пароль. Администраторы и техподдержка этих сайтов будут иметь возможность увидеть ваш незашифрованный пароль, а значит смогут и попробовать использовать его на других сайтах, где вы, возможно, имеете аккаунты.
Угроза №2 это возможность перехвата вашего пароля в каналах передачи. Очень немногие сайты используют HTTPS, большинство же просто передает все данные из форм в открытом виде. Это значит, что если вы где-то в кофейне решили авторизоваться на форуме, то ваш пароль может увидеть любой, кто там сидит с ноутбуком и слушает сеть, и потом попробовать применить этот пароль где-то еще.
Для нейтрализации этих угроз необходимо обеспечить, чтобы пароли на разных сайтах были разные. Вопрос в том, как их все запомнить, или где хранить?
Один из методов формирования и запоминания разных паролей для разных сайтов был описан в статье «Простой метод хранения паролей в голове». При данном методе необходимо помнить один пароль-маску (например rtYG!), и придумать способ получать вариацию из имени сайта.
Например:
Сайт | Вариант пароля 1 | Вариант пароля 2 |
---|---|---|
Flickr | brtYG!3photo | brtYG!3Fr |
brtYG!3job | brtYG!3Ln | |
Sberbank | brtYG!3money | brtYG!3Sk |
Проблема этого метода, состоит в том, что общая стойкость метода определяется стойкостью вариационной части пароля. Администратор сайта Flickr может догаться, что «photo» или «Fr» — это вариация пароля для его сайта, и тогда ему не составит труда подобрать вариации для других сайтов. Кроме того, при таком способе формирования пароля возникает проблема с сайтами, которые требуют периодической смены пароля.
Поэтому крайне желательно, чтобы все пароли были абсолютно случайными и друг с другом никак не связанными. Но тогда сразу возникает вопрос: где же их хранить?
Скажу сразу, я не доверяю сервисам по хранению паролей так как я не знаю, как они работают. А в случае платного сервиса еще возникает опасность лишиться всех своих паролей изза пропущенного платежа. Поэтому было решено разработать собственное решение, которое удовлетворяло бы следующим требованиям:
- Решение должно быть бесплатное, и по возможности, вечное
- Решение должно исключать передачу паролей по сети в незашифрованном виде
- Не должно быть никакого обмена непонятным трафиком ни с кем
- Не должно быть никаких инсталляций дополнительного ПО, только браузер
- Решение должно быть кроссплатформенным
Такое решение удалось найти, оно состоит в следующем:
1. Пароли к сайтам переименовываем в токены. Токены генерирются случайным образом, они могут быть намного длиннее обычного пароля, и их невозможно запомнить увидев на экране монитора.
2. Придумываем и запоминаем один сложный мастер-пароль, его будем использовать для шифрования и дешифрования всех токенов.
3. Все токены храним в онлайн-хранилище (например в почте, или в Google Docs), или локально, в текстовом файле следующего вида:
Сайт | Пользователь | Зашифрованный токен |
---|---|---|
youtube.com | myytusername | U2FsdGVkX1/cCpnVmQ1sz13pqQXJYtQ3bTjcjw/HYak= |
livejournal.com | myljusername | U2FsdGVkX19HWMhtmjfdLagxpBfUcnJmFkezYgdnBrs= |
4. Шифрование и дешифрование производим по алгоритму AES-256 + Base64 средствами JavaScript-библиотеки GibberishAES. Все вычисления ведуться в браузере, никакие данные никуда не передаются.
Несколько замечаний по данному методу:
— Вся схема требует запоминания двух паролей: пароля от онлайн-хранилища и мастер-пароля для токенов. Эти пароли должны быть разные.
— При выборе онлайн-хранилища необходимо помнить, что без доступа к хранилищу вы не получите доступ к сайту, поэтому желательно, чтобы хранилище было максимально надёжным и с высоким аптаймом.
— Необходимо делать копии файла с зашифрованными токенами, так как при его утере восстановить пароли будет невозможно.
— Шифровать и дешифровать в браузере можно, например, на этой странице. Будучи параноиком я для себя сделал собственную минималистичную страницу AES-256 Online. Она состоит из 3-х файлов, которые можно сохранить и использовать локально.
— Шифровать или дешифровать токены из страницы при необходимости можно и в командной строке Unix:
openssl enc -a -aes-256-cbc (шифрование STDIN)
openssl enc -d -a -aes-256-cbc (дешифрование STDIN)
— Генерировать случайные токены можно в онлайне (например здесь), оффлайне (скачать index.html и 2 JavaScript файла здесь), или из командной строки Unix:
openssl rand -base64 12
Надеюсь данный способ управления паролями будет полезен читателям.
Автор: amaksr