Information Security
21 June 2012

Простой метод управления паролями для параноиков

From Sandbox
Раз и навсегда решить проблему паролей меня побудила история со взломанным LinkedIn — очень неприятно было увидеть свой пароль в списке самых часто встречающихся. Паролей нынче нужно помнить все больше, требования к ним становятся все жёстче, а на OpenId что-то мало кто переходит.

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

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

Угроза №2 это возможность перехвата вашего пароля в каналах передачи. Очень немногие сайты используют HTTPS, большинство же просто передает все данные из форм в открытом виде. Это значит, что если вы где-то в кофейне решили авторизоваться на форуме, то ваш пароль может увидеть любой, кто там сидит с ноутбуком и слушает сеть, и потом попробовать применить этот пароль где-то еще.

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

Один из методов формирования и запоминания разных паролей для разных сайтов был описан в статье «Простой метод хранения паролей в голове». При данном методе необходимо помнить один пароль-маску (например rtYG!), и придумать способ получать вариацию из имени сайта.
Например:

Сайт Вариант пароля 1 Вариант пароля 2
Flickr brtYG!3photo brtYG!3Fr
Linkedin 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

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

-12
7.4k 42
Comments 48