Рад представить онлайн менеджер паролей – KeyMemo.com.
Сразу спешу ответить на вопрос – «Как можно хранить свои пароли на каком-то сайте?»
Все очень просто, все пароли шифруются на стороне клиента, в браузере, с помощью алгоритмов AES256 и Blowfish реализованных на JavaScript. Только после шифрования ваши данные передаются по протоколу https на сервер. Ключи шифрования для алгоритмов разные и не передаются на сервер. Все поля каждого пароля (название, теги, примечание и пр. ) шифруются, логин пользователя тоже шифруется. В результате на сервере хранится только анонимный «мусор», ломать ради него сервер бессмысленно.
![image](https://habrastorage.org/getpro/habr/post_images/8ea/f6b/6f3/8eaf6b6f3a5ad7a25d763c3fc84b3186.gif)
Вопрос – зачем?
Я прошел полный путь хранения паролей:
бумажка -> блокнотик с собой –> файлик -> менеджер паролей -> портейбл менеджер паролей -> онлайн менеджер паролей –> свой менеджер паролей.
Первые два способа хранения даже обсуждать не буду, это бомба замедленного действия.
Я админю две конторы и за день успеваю поработать минимум за 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 ваших почтовых ящиков.
Подробности для любознательных
Приблизительно схема работы шифрования выглядит так: (несущественные подробности опущены)
Вы вводите два значения
Хеширование:
Все это повторяется 4 раза с разной солью и получается:
На практике эти значения выглядят примерно так:
Этот мусор расшифровывается сначала с помощью Blowfish:
Потом AES256:
Вы видите ваш ценный secret
Шифрование перед отправкой любой информации на сервер осуществляется в обратном порядке.
Обмен информации ведется по протоколу https и перед отправкой браузер все шифрует третий раз :-) Ведь я же параноик. Ну и конечно там ssl сертификат и пр., короче все по-взрослому.
Из этого следует:
А правильно ли реализованы алгоритмы на 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. Не пинайте сильно за дизайн. Я не дизайнер.
Сразу спешу ответить на вопрос – «Как можно хранить свои пароли на каком-то сайте?»
Все очень просто, все пароли шифруются на стороне клиента, в браузере, с помощью алгоритмов AES256 и Blowfish реализованных на JavaScript. Только после шифрования ваши данные передаются по протоколу https на сервер. Ключи шифрования для алгоритмов разные и не передаются на сервер. Все поля каждого пароля (название, теги, примечание и пр. ) шифруются, логин пользователя тоже шифруется. В результате на сервере хранится только анонимный «мусор», ломать ради него сервер бессмысленно.
![image](https://habrastorage.org/getpro/habr/post_images/8ea/f6b/6f3/8eaf6b6f3a5ad7a25d763c3fc84b3186.gif)
Вопрос – зачем?
Я прошел полный путь хранения паролей:
бумажка -> блокнотик с собой –> файлик -> менеджер паролей -> портейбл менеджер паролей -> онлайн менеджер паролей –> свой менеджер паролей.
Первые два способа хранения даже обсуждать не буду, это бомба замедленного действия.
Я админю две конторы и за день успеваю поработать минимум за 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 сертификат и пр., короче все по-взрослому.
Из этого следует:
- Я даже не знаю ваши логины :-) и тем более все остальное.
- Забытый мастер-пароль напомнить невозможно. Он просто нигде не хранится.
- Все алгоритмы дублируются. Двойное хеширование, двойное шифрование. Это на случай если завтра какой-то алгоритм признают не стойким. Ведь я же параноик.
- Нельзя в браузере нажимать F5 иначе потеряются значения TargetValue3 и TargetValue4 а я их не храню ни на сервере, ни в куках, ни в URL.
- Для смены логина и/или пароля приходится закачивать все пароли на клиента, расшифровывать старым паролем, шифровать новым, и снова отправлять на сервер.
А правильно ли реализованы алгоритмы на 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. Не пинайте сильно за дизайн. Я не дизайнер.