Поскольку значительная часть моих знакомых — это люди, не имеющие достаточных знаний в сфере IT, то приходится изощрятся, чтобы заставить их пользоватся непривычными им сервисами либо утилитами, которые я считаю безопасными.
Предлагаю относительно простой способ установки безопасного канала для текстового общения через всеми известную сеть ВКонтакте. Для этого не нужно никакого дополнительного софта либо обширных знаний в сфере информационной безопасности. Всё, что вам нужно иметь — это web-браузер и аддон GreaseMonkey
Общая информация
Мотив данного метода — создать канал, управляемый собеседниками без посредника, т.е. не давать возможность серверу видеть незашифрованный текст сообщений. Конечно, типичная man-in-the-middle атака посредством подмены открытого ключа вполне возможна, но очень маловероятна, так как мы опасаемся не прослушки в режиме реального времени, апотенциальной опасности компрометации текста сообщений в ближайшем будущем, например, по запросу спецслужб.
Как я уже говорил выше, была идея создать собственный месенджер (ну вы поняли, с чем). Почему? Из пары причин:
Я и мои друзья можем доверять моему продукту;
Я могу сделать его таким, как хочу;
Это — весело!
Но через некоторые трудности, среди каких — как разработка продукта, так и его внедрение среди непрограммистов. Поэтому в качестве субъекта сих извращений был однозначно выбран ВКонтакте, а платформой для внедрения конечного продукта стал аддон GreaseMonkey:
Большинство знакомых пользуется именно ВКонтакте;
Довольно просто объяснить процесс разворачивания моего скрипта.
Немного общеизвестных технических данных
Исходя из того, на какую аудиторию рассчитана эта статья, я не буду объяснять процесс установки GreaseMonkey и моего скрипта. Если же вы не знаете, как это сделать — читайте мануал, например, тут (спасибо google за эту ссылку).
В качестве механизма шифрования выбран, конечно же, неповторимый RSA в стандартной имплементации. Объяснять этот механизм тоже нет смысла, так как статья не о нем, а о автоматизации сего процесса, но, на всякий случай, двустороннее асиметрическое шифрование выглядит так:
Собеседники обмениваются открытыми ключами. Этот процесс автоматизируется нашим скриптом.
Один из собеседников отправляет сообщение. Это сообщение шифруется публичным (открытым) ключём напарника.
Другой из них получает это сообщение. Это сообщение расшифровывается его приватным (закрытым) ключём.
Шифрованный тоннель для общения через VK
Для реализации алгоритма RSA я использовал его JS-имплементацию, написанную парнями из Стэнфорда. Она была одной из первых, что попались на глаза, и отлично оправдала все мои ожидания, поэтому я использовал именно её.
Ближе к делу
Итак, что делает скрипт?
Внедряет себя в страницу ВК при её открытии, и патчит документ, добавляя ивент на нажатие CTRL+SHIFT+V;
По нажатию последней комбинации добавляет кнопки отправки зашифрованных сообщений и генерации публичного ключа для напарника;
Реагирует на сообщения вида "%n:открытый_ключ_напарника" и "%m:зашифрованное,сообщение", заменяя их нотификациями про факт получения публичного ключа от напарника либо расшифрованным текстом.
Патчит элементы DOM своими атрибутами с префиксом «vksl-» для сохранения своего состояния.
Краткая инструкция
При открытии страницы с чатом в верхнем правом углу должно появится сообщение «VKSL loaded» (возможно, придется нажать F5, если вы перешли с другой страницы). Нажав CTRL+SHIFT+V на странице с чатом, опять таки получим сообщение об успешной (или же неудачной) инъекцией шифратора в код страницы.
После этого каждый из собеседников должен нажать на линк «GENERATE KEYS NOW». Через несколько (возможно, десятков) секунд появится сообщение, что ключ сгенерирован и отправлен. Следовательно, собеседник на другом конце будет тоже уведомлен об этом.
Теперь можно приступать к общению. Для отправки обычного сообщения пользуемся стандартной кнопкой, для отправки шифрованного — нажимаем на «SEND ENCRYPTED». Скрипт на другом конце сам поймёт, что нужно делать, если получено зашифрованное сообщение.
Проблеммы, которые до сих пор было лень устранить (а следовало бы)
Скрипт не работает в конференциях, а рассчитан лишь на двустороннее общение.
Максимальная длина сообщения на данный момент лишь 32 байта — нужно шифровать, разбивая текст на блоки, а не так, как там сейчас.
По нажатию на «Enter» вызывается нативная отправка. Нужно немного больше порыться в коде, чтобы заменить и этот ивент.
Аттачменты не шифруются, поскольку они фактически не являются частью сообщения.
Установить скрипт можна отсюда: http://userscripts.org/scripts/show/396094
Спасибо за ваше внимание!
Теги: Шифровка, В Контакте, Скачать Секреты, Диалог, Сообщение