Pull to refresh

Онлайн менеджер паролей

Reading time5 min
Views5.2K
Рад представить онлайн менеджер паролей – KeyMemo.com.

Сразу спешу ответить на вопрос – «Как можно хранить свои пароли на каком-то сайте?»
Все очень просто, все пароли шифруются на стороне клиента, в браузере, с помощью алгоритмов AES256 и Blowfish реализованных на JavaScript. Только после шифрования ваши данные передаются по протоколу https на сервер. Ключи шифрования для алгоритмов разные и не передаются на сервер. Все поля каждого пароля (название, теги, примечание и пр. ) шифруются, логин пользователя тоже шифруется. В результате на сервере хранится только анонимный «мусор», ломать ради него сервер бессмысленно.

image




Вопрос – зачем?

Я прошел полный путь хранения паролей:
бумажка -> блокнотик с собой –> файлик -> менеджер паролей -> портейбл менеджер паролей -> онлайн менеджер паролей –> свой менеджер паролей.

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

Я админю две конторы и за день успеваю поработать минимум за 3 компами, поэтому у офлайн менеджера паролей возникает проблема синхронизации данных между компами.

Портейбл менеджер паролей требует носить с собой флешку. Но флешка может потеряться или выйти из строя. Флешка должна подключаться ко всем компам. А сам менеджер должен запускаться на всех ОС.

Есть менеджеры, которые сам файл паролей синхронизирую через ftp сервер, но это не снимает проблем кроссплатформенности, и необходимости установки клиента на машины за которыми я в первый и последний раз в этом году.

Достоинства онлайн менеджера очевидны: работает на всех платформах, не требует установки, не требует подключения фешки, все данные синхронизированы через сервер, все автоматически бекапится.

Поэтому некоторое время я сидел на онлайн менеджере clipperz.com, но через некоторое время он достал меня своими тормозами. Иногда нужно быстренько подсмотреть забытый пароль, пока clipperz.com загрузится, уже забыл, что хотел вспомнить. Была и еще одна проблема, которая меня заботила. Бекап своих паролей с clipperz.com нужно было не забывать скачивать вручную. Человек не забывает что-то делать регулярно только первые три дня.

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

После каждого добавления нового пароля в KeyMemo.com, через 10 минут сервер рассылает на несколько ваших почтовых ящиков html файл, в котором ваши зашифрованные пароли и алгоритмы расшифровки. Если KeyMemo.com однажды пропадет или у вас пропадет Интернет, достаточно найти последнее письмо от KeyMemo.com открыть приложенный файл браузером и ввести свой мастер-пароль. Файл в архиве zip весит всего 35 кб (для сравнения у clipperz бэкап весит 500 кб). В качестве ящиков для рассылки полезно указывать ящики, которые проверяются офлайн почтовыми программами на рабочем, домашнем компьютере или ноутбуке. Письма вам понадобятся только в том случае, если KeyMemo.com будет не доступен.

Больше не надо думать о подключении флешки, установке клиента, о совместимости его с ОС и пр. Достаточно записать свой пароль на KeyMemo.com и через 10 минут он будет во всех ваших почтовых программах. У вас просто не получится потерять свои пароли. Даже если вы захотите от них избавится, вам придется чистить все почтовые ящики, бесплатные почтовые сервисы и бекапы почтовых серверов, а этого вам не дадут сделать админы этих серверов. Конечно БД KeyMemo.com тоже бекапится автоматически.

Такую систему бэкапов считаю отличительной фишкой своего сервиса.
Второй фишкой считаю легковесность, быстроту и простоту своего сервиса.

В планах следующая версия с заточкой под HTML5, с хранением данных на клиенте и возможности их просмотра офлайн.

Как это работает?

Для объяснения работы системы «на пальцах» покажу, как каждый может себе сделать надежную систему хранения паролей, которая позволит все шифровать, автоматически бекапить, и дать доступ из любого места.

Пишите все пароли в обыкновенный текстовый файл. Архивируете его с паролем (длинным и сложным паролем), Архив засылаете на специальный (возможно бесплатный) почтовый ящик. В этом ящике должно быть настроено пересылка на несколько других ваших почтовых ящиков (домашний, рабочий, бесплатный). Архиватор можно использовать портейбл и хранить его тоже в бесплатном почтовом ящике. В результате все надежно, прозрачно, только неудобно.

KeyMemo.com делает ровно тоже самое, только удобным способом. Вместо архиватора для шифрования используется JavaScript. Шифруются не все пароли одним файлом, а каждый пароль отдельно. Полученный «мусор» отправляется не на почту, а на сервер KeyMemo.com, а уже он рассылает их на 5 ваших почтовых ящиков.

Подробности для любознательных

Приблизительно схема работы шифрования выглядит так: (несущественные подробности опущены)

Вы вводите два значения login и masterkey.

Хеширование:
temp_val=MD5(login+salt1+ masterkey)+ MD5(login+salt2+ masterkey)
temp_key=MD5(login+salt3+ masterkey)+ MD5(login+salt4+ masterkey)
TargetValue1=AES256_Encode(temp_key, temp_val)


Все это повторяется 4 раза с разной солью и получается:
TargetValue1 – ключ для алгоритма AES256 (не передается по сети, не хранится на сервере)
TargetValue2 – ключ для алгоритма Blowfish (не передается по сети, не хранится на сервере)
TargetValue3 – логин для сервера (передается на сервер для авторизации)
TargetValue4 – пароль для сервера (передается на сервер для авторизации)

На практике эти значения выглядят примерно так:
TargetValue1=46592074424B97EDFEBEB259A1B20390343C282C2D0B2154D5FF7E10BD0B5065
TargetValue2=721A6DD94327E53079D340CB563D94C389319262FA2E8F293BAD4EE4D2031B7D
TargetValue3=277567FD786E432F9762B33FDA8808A31933149573D1C84A8C1795CAC0FE6178
TargetValue4=DC7AF573B283F97017E91480611D9B0EFBF44F33AF0A03C8D00FA97DD7E16B4C


login, masterkey, temp_val, temp_key затираются.

TargetValue3 и TargetValue4 отправляются на сервер, сервер возвращает wrong_login, или ваш комплект мусора.

trash_from_server=C0ED5E324AD7DD3959493F4EFFE056C59AC6EC120C6123EF2D78A8202BF0F3F5A90BE8E0FE393C63B13D9CC95ADAC1DF8582B867220F5E2CCF416A23FDC22CE05C1BD0F5A7DE35D3C21BF2D0E4243348….. (ну я же говорю, мусор!)

Этот мусор расшифровывается сначала с помощью Blowfish:
tmp=Blowfish_Decode(TargetValue2,trash_from_server);

Потом AES256:
secret=AES256_Decode(TargetValue1,tmp);
alert(secret); // show bla-bla-bla :-)

Вы видите ваш ценный secret

Шифрование перед отправкой любой информации на сервер осуществляется в обратном порядке.

Обмен информации ведется по протоколу https и перед отправкой браузер все шифрует третий раз :-) Ведь я же параноик. Ну и конечно там ssl сертификат и пр., короче все по-взрослому.

Из этого следует:
  1. Я даже не знаю ваши логины :-) и тем более все остальное.
  2. Забытый мастер-пароль напомнить невозможно. Он просто нигде не хранится.
  3. Все алгоритмы дублируются. Двойное хеширование, двойное шифрование. Это на случай если завтра какой-то алгоритм признают не стойким. Ведь я же параноик.
  4. Нельзя в браузере нажимать F5 иначе потеряются значения TargetValue3 и TargetValue4 а я их не храню ни на сервере, ни в куках, ни в URL.
  5. Для смены логина и/или пароля приходится закачивать все пароли на клиента, расшифровывать старым паролем, шифровать новым, и снова отправлять на сервер.

А правильно ли реализованы алгоритмы на JavaScript?

В этом стандарте с 27 страницы начинаются тестовые примеры.
http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf
Результаты работы AES применяемого в KeyMemo.com на этих тестовых примерах совпадают с указанными в стандарте.
MD5 проверить еще проще. Он есть в линуксах и в SQL, т.е. почти везде. Результаты тоже совпадают.
Blowfish не проверял. Понадеялся на авторов реализации Andre Mueller и Rainer Wollmann.

P.S. Не пинайте сильно за дизайн. Я не дизайнер.
Tags:
Hubs:
+84
Comments273

Articles