17 August 2009

Мой парольный менеджер с шахматами и поэтессами. И синхронизацией

Information Security
Привет!

Хочу рассказать о своем небольшом проекте, который втихаря делал последние пару месяцев.

Предыстория


Когда-то давно, примерно год назад, мне понадобилось как-то запомнить или записать довольно большой объем конфиденциальной информации: логины, пароли, всякие ключи и прочее. Из имеющихся решений меня более-менее удовлетворят keepass, но у него был один большой минус — он не может синхронизировать базы между установками. А мне требовалась возможность скидывать пароли на телефон и смотреть их уже оттуда.
В итоге все пришло просто к текстовому файлу с паролями :)
Но можно ведь сделать что-то и свое…

Начнем


И тут мне пришла идея программы с возможностью синхронизации с сервером. Не мудрствуя лукаво, я поизучал интернет на предмет возможности параноидального шифрования всего и вся идентичным образом для linux, windows и windows mobile (как минимум) и в итоге выбрал.
Паролер использует:
  • Qt в качестве базового инструментария. Какой версии минимум — понятия не имею, т.к. компилировал только при помощи Qt-4.5
  • OpenSSL в качестве основного инструмента для шифрования.
  • QCA в качестве прослойки для шифрования.
  • wcecompat для возможности компиляции openssl и qca-ossl под windows mobile


Синхронизация


А теперь мы дошли до, надеюсь, самой интересной фичи, ради которой, собственно, все и затевалось — синхронизация.
Синхронизация локальной БД с удаленной происходит по https, что дает шифрование траффика, который и так зашифрован. Имея саму базу и не зная пароль (не будем брать брутфорс в расчет, т.к. ответственность за пароль лежит на пользователе) можно узнать лишь структуру, все остальное: названия, комментарии, логины, пароли, данные, иконки — все зашифровано.
Т.е. я не пытаюсь украсть ваши пароли — они все равно зашифрованы в базе :)
Также реализован алгоритм синхронизации, позволяющий именно синхронизировать, а не просто скачивать базу с удаленного сервера: все изменения, произведенные на одной машине будут внесены в БД, лишь после чего скачаны изменения, произведенные из другого места. Сразу скажу — о коллизиях я думал и их быть не должно, т.к. идентификаторы генерируются довольно уникальные.

Технические детали


Как уже было сказано, Паролер сделан на Qt, что дает кроссплатформенность. В качестве инструмента для шифрования используется openssl, соответственно, и все реализованные там шифры. А именно:

Т.к. используется модульный QCA для шифрования, то, теоретически, можно будет добавить еще шифры.
Сама база сделана на sqlite, т.к. он дает и приемлимую производительность, и удобство SQL-запросов.
Паролер распространяется по лицензии GNU GPL v2.
Для синхронизации должны совпасть следующие свойства:
  • Алгоритм, т.к. пока отличить один алгоритм от другого не получается, это сделано, чтобы путаницы не было.
  • Пароль для шифрования — это подобно алгоритму, чтобы путаницы не было.
  • Логин к синхронизации, чтобы никто не получил доступа к вашим зашифрованным данным :)
  • Пароль к синхронизации


Скриншоты


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

Для Windows-версии


Image and video hosting by TinyPic
Image and video hosting by TinyPic
Image and video hosting by TinyPic

Для сравнения — Linux-версия


Image and video hosting by TinyPic

И версия для Windows Mobile


Image and video hosting by TinyPic
Image and video hosting by TinyPic
Image and video hosting by TinyPic
Еще раз хочу отметить, что эта версия — не окончательная, в ней еще достаточно много багов и время от времени она падает из-за не совсем хорошей реализации MVC. Версия под Windows Mobile вообще работает через раз, т.к. помимо моих ошибок, там много багов в самом Qt.

Аккаунты


Очевидно, что нельзя просто дать возможность синхронизировать всем и вся в одну базу, поэтому сделано разделение на аккаунты. Но ввиду того, что Паролер пока не отлажен нормально (эта версия не более, чем бета) и я небольшой спец в безопасности веб-приложений, создание аккаунтов пока будет идти вручную.
Чтобы получить аккаунт, напишите мне в личку или в джаббер и там уже договоримся.

Если кто хочет просто потестировать, то вот свойства для демо-аккаунта:
  • Алгоритм — aes192
  • Пароль — demo
  • Логин к синхронизации — demo
  • Пароль к синхронизации — demo


Собственно, ссылки:
Сайт Паролера — главный сайт Паролера, пока что-то вроде не совсем пустой заглушки.
Паролер для win32
Паролер для Windows Mobile (собран для версии WM5.0).
Исходники Паролера выложены на всеобщее обозрение, чтобы не быть голословным в вопросе безопасности ваших данных.
Tags:паролипаролерpasswordсинхронизация
Hubs: Information Security
+34
2.3k 19
Comments 63