...

суббота, 22 февраля 2014 г.

Шифрованный тоннель для общения через VK (RSA + GreaseMonkey)

В связи с развитием событий в мире последним временем пользователи сети всё чаще задумываются о своей безопасности: кто-то отказывается пользоваться рядом web-сервисов, кто-то удаляет личную информацию, фото и другие данные с социальных сетей, а кто-то и вовсе «блокирует» свои учётные записи. Но вот только большинство этих данных удаляются лишь визуально, что, в принципе, общеизвестный факт.

image



Поскольку значительная часть моих знакомых — это люди, не имеющие достаточных знаний в сфере IT, то приходится изощрятся, чтобы заставить их пользоватся непривычными им сервисами либо утилитами, которые я считаю безопасными.

Предлагаю относительно простой способ установки безопасного канала для текстового общения через всеми известную сеть ВКонтакте. Для этого не нужно никакого дополнительного софта либо обширных знаний в сфере информационной безопасности. Всё, что вам нужно иметь — это web-браузер и аддон GreaseMonkey.



Общая информация




Мотив данного метода — создать канал, управляемый собеседниками без посредника, т.е. не давать возможность серверу видеть незашифрованный текст сообщений. Конечно, типичная man-in-the-middle атака посредством подмены открытого ключа вполне возможна, но очень маловероятна, так как мы опасаемся не прослушки в режиме реального времени, а потенциальной опасности компрометации текста сообщений в ближайшем будущем, например, по запросу спецслужб.

Как я уже говорил выше, была идея создать собственный месенджер (ну вы поняли, с чем). Почему? Из пары причин:


  • Я и мои друзья можем доверять моему продукту;

  • Я могу сделать его таким, как хочу;

  • Это — весело!




Но через некоторые трудности, среди каких — как разработка продукта, так и его внедрение среди непрограммистов. Поэтому в качестве субъекта сих извращений был однозначно выбран ВКонтакте, а платформой для внедрения конечного продукта стал аддон GreaseMonkey:


  • Большинство знакомых пользуется именно ВКонтакте;

  • Довольно просто объяснить процесс разворачивания моего скрипта.


Немного общеизвестных технических данных




Исходя из того, на какую аудиторию рассчитана эта статья, я не буду объяснять процесс установки GreaseMonkey и моего скрипта. Если же вы не знаете, как это сделать — читайте мануал, например, тут (спасибо google за эту ссылку).

В качестве механизма шифрования выбран, конечно же, неповторимый RSA в стандартной имплементации. Объяснять этот механизм тоже нет смысла, так как статья не о нем, а о автоматизации сего процесса, но, на всякий случай, двустороннее асиметрическое шифрование выглядит так:



  • Собеседники обмениваются открытыми ключами. Этот процесс автоматизируется нашим скриптом.

  • Один из собеседников отправляет сообщение. Это сообщение шифруется публичным ключём напарника.

  • Другой из них получает это сообщение. Это сообщение расшифровывается его публичным ключём.


Процесс в картинке:

image


Для реализации алгоритма RSA я использовал его JS-имплементацию, написанную парнями из Стэнфорда. Она была одной из первых, что попались на глаза, и отлично оправдала все мои ожидания, поэтому я использовал именно её.


Ближе к делу




Итак, что делает скрипт?


  • Внедряет себя в страницу ВК при её открытии, и патчит документ, добавляя ивент на нажатие CTRL+SHIFT+V;

  • По нажатию последней комбинации добавляет кнопки отправки зашифрованных сообщений и генерации публичного ключа для напарника;

  • Реагирует на сообщения вида "%n:открытый_ключ_напарника" и "%m:зашифрованное,сообщение", заменяя их нотификациями про факт получения публичного ключа от напарника либо расшифрованным текстом.

  • Патчит элементы DOM своими атрибутами с префиксом «vksl-» для сохранения своего состояния.


Краткая инструкция




При открытии страницы с чатом в верхнем правом углу должно появится сообщение «VKSL loaded» (возможно, придется нажать F5, если вы перешли с другой страницы). Нажав CTRL+SHIFT+V на странице с чатом, опять таки получим сообщение об успешной (или же неудачной) инъекцией шифратора в код страницы.

После этого каждый из собеседников должен нажать на линк «GENERATE KEYS NOW». Через несколько (возможно, десятков) секунд появится сообщение, что ключ сгенерирован и отправлен. Следовательно, собеседние на другом конце будет тоже уведомлен об этом.

Теперь можно приступать к общению. Для отправки обычного сообщения пользуемся стандартной кнопкой, для отправки шифрованного — нажимаем на «SEND ENCRYPTED». Скрипт на другом конце сам поймёт, что нужно делать, если получено зашифрованное сообщение.

Проблеммы, которые до сих пор было лень устранить (а следовало бы)





  • Скрипт не работает в конференциях, а рассчитан лишь на двустороннее общение.

  • Максимальная длина сообщения на данный момент лишь 32 байта — нужно шифровать, разбивая текст на блоки, а не так, как там сейчас.

  • По нажатию на «Enter» вызывается нативная отправка. Нужно немного больше порыться в коде, чтобы заменить и этот ивент.

  • Аттачменты не шифруются, поскольку они фактически не являются частью сообщения.


Установить скрипт можна отсюда: http://ift.tt/1jW3End

Желающие потестить: можете писать мне сюда.

Спасибо за ваше внимание!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий