Cypher десктопное приложение, написанное на основе платформы node-webkit

от автора

В статье пойдет речь о десктопном приложении, написаном на основе платформы node-webkit. На Хабре были статьи которые описывают платформу раз, два, три. Но реальных приложений которые используют эту платформу не так много. В начале я раскажу о приложении, о его задачах и функционале, дальше я перейду к техническим возможностям платформы node-webkit, которые были использованы в приложении. Статья не изобилует вставками кода, весь код выложен на github.
В конце статьи будут ссылки на все используемые источники информации.

Моей целью было создать полноценное приложение с использованием платформы node-webkit. Задача приложения защита онлайн переписки, осуществляемой через мессенджеры(skype, google talk, еtc.). Посылая по открытым каналам уже зашифрованную информацию, вы усложняете возможность третей стороне получить доступ к данным. Существует множество способов зашифровать сообщение, но проблема в том, что ключ для шифрования нужно сообщить вашему собеседнику. Допустим ваш канал прослушивают, и имеют доступ ко всему, что вы отправляете и получаете. Для решения этой задачи приложение использует алгоритм Дэнни-Хеллмана. Про этот алгоритм уже расказывали на Хабре вот ссылка. Но больше всего впечетляет видео которое наглядно описывает, как работает алгоритм youtube. Более подробно об этом алгоритме можно почитать на википедии.

И так процесс можно разделить на две части. Первая это создание общего секретного ключа и собественно шифрование информации. Создание секретного ключа для обоих партнеров состоит из четырех последовательных шагов. Весь процесс построен с минимальным участием пользователя, что бы секретный ключ случайным образом не получился а ля 12345678 или password. Первый шаг это создание приватного ключа. Для уменьшения вероятности прочтения его через скриншот экрана или прослушивания событий клавиатуры, все ключи генерирует скрипт и форма закрыта от пользователя. Второй шаг это создание публичного ключа. Этот ключ необходимо отослать своему партнеру по переписке.

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

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

Не много технических деталей.

Для создания визаульного представления я использовал web фреймворк bootmetro. По сути это bootstrap оформленный под стиль Metro от Windows. Думаю что для десктопного приложения этот стиль здесь как раз к месту.

Что бы сделать интерфейс более дружественным к пользователю и облегчить процесс копирования сложного ключа с формы, приложение использует объект clipboard который предоставляет платформа node-webkit. Этот объект работает кросплатформенно, проверял Linux(Ubuntu 12), Windows(Windows 7), но пока подерживает только один тип данных text.

Теперь к более сложному. Алгоритм Дэнни-Хеллмана акцентирует свое внимание на том, что чем больше число испозльзуется для создания публичного ключа тем меньше вероятность третей стороне разшифровать его за разумное время. На этапе реализации алгоритма я столкнулся с проблемой, что математические операции с большими числами javasсript не поддерживает. Поиск в гугле привел меня к библиотеке jsbn автор Tom Wu. Автор указывает что апи его библиотеки работает по тому же принципу, что и апи java.math.BigInteger в Java. Библиотека предоставила, не только, возможность совершать математические операции, но имела работающие примеры реализации алгоритма Денни-Хэллмана и rsa шифрования. Про тестировав живые примеры, сделал выбор: использовать jsbn для создания секретного ключа.

Одной из ключевых возможностей платформы node-webkit является использование модулей node.js. Для того что бы использовать эту возможность, я решил для шифрования информации использовать модуль crypto, а именно два класса Cipher и Dechiper. В интернете достаточно документации и живых примеров, так что примеры кода не привожу. Объект Cipher поддерживает разные алгоритмы шифрования, список зависит от установленого OpenSSL. Например, это может быть ‘aes192′,’blowfish’ и т.д. Зашифрованая инофмация может выводиться в виде ‘binary’, ‘base64’ или ‘hex’. В представленном приложении используется алгоритм ‘des-ede3-cbc’ и вывод информации осуществляется в виде ‘hex’. Так что если есть желание вы можете пересобрать для себя приложение из исходников использовав, тот метод, который вам ближе. Для этого вам понадобиться скачать и установить платформу node-webkit. В документации доступным способом описывается как собирать и упаковывать, приложения из исходников. Проблем с использованием модуля node.js в коде вобще не вызывало. Спасибо разработчкикам платформы node-webkit за предоставленную возможность испольовать серверный и клиентский javascript в одном потоке.

Плюсы приложения

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

Минусы приложения

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

Возможные сферы применения: передача важной информации по открытым каналам(ключи, пароли или описание местности где клад закопан).

Приложение тестировал на операционных системах Linux(Ubuntu 12), Windows(Windows 7). Для полноценного тестирования приложения вам необходимо два участника, если у вас нету такой возможности, тогда при формировании секретного ключа, вместо публичного ключа вашего партнера, вставьте свой же публичный ключ.

Сcылка на приложение

Linux
Windows

Источники информации:

Страница проэкта на github
Проэкт node-webkit
Алгоритм Денни-Хэллманна на википедии
Видео на youtube
Библиотека jsbn
Web фреймворк bootmetro

ссылка на оригинал статьи http://habrahabr.ru/post/167311/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *