Чтиво Шифрованный тоннель для общения через VK

Тема в разделе "Компьютеры, Интернет, IT-новости", создана пользователем Luk14, 2 апр 2014.

  1. Luk14

    Luk14 Свой

    Регистрация:
    7 май 2013
    Сообщения:
    327
    Симпатии:
    106
    Шифрованный тоннель для общения через VK (RSA + GreaseMonkey)

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

    447ef4b3af59ac5f7c32e88506efe763.png

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

    Для просмотра ссылок зарегистрируйтесь или авторизуйтесь на сайте.

    :

    • Большинство знакомых пользуется именно ВКонтакте;
    • Довольно просто объяснить процесс разворачивания моего скрипта.
    Немного общеизвестных технических данных

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

    Для просмотра ссылок зарегистрируйтесь или авторизуйтесь на сайте.

    (спасибо

    Для просмотра ссылок зарегистрируйтесь или авторизуйтесь на сайте.

    за эту ссылку).

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

    • Собеседники обмениваются открытыми ключами. Этот процесс автоматизируется нашим скриптом.
    • Один из собеседников отправляет сообщение. Это сообщение шифруется публичным (открытым) ключом напарника.
    • Другой из них получает это сообщение. Это сообщение расшифровывается его приватным (закрытым) ключом.
    Процесс в картинке:

    66375850dc9eb8c18ad316dea891051e.jpg

    Для реализации алгоритма RSA я использовал его JS-имплементацию, написанную

    Для просмотра ссылок зарегистрируйтесь или авторизуйтесь на сайте.

    . Она была одной из первых, что попались на глаза, и отлично оправдала все мои ожидания, поэтому я использовал именно её.

    Ближе к делу

    Итак, что делает скрипт?
    • Внедряет себя в страницу ВК при её открытии, и патчит документ, добавляя ивент на нажатие CTRL+SHIFT+V;
    • По нажатию последней комбинации добавляет кнопки отправки зашифрованных сообщений и генерации публичного ключа для напарника;
    • Реагирует на сообщения вида "%n:открытый_ключ_напарника" и"%m:зашифрованное_сообщение", заменяя их нотификациями про факт получения публичного ключа от напарника либо расшифрованным текстом.
    • Патчит элементы DOM своими атрибутами с префиксом «vksl-» для сохранения своего состояния.
    Краткая инструкция

    При открытии страницы с чатом в верхнем правом углу должно появиться сообщение «VKSL loaded» (возможно, придется нажать F5, если вы перешли с другой страницы). Нажав CTRL+SHIFT+V на странице с чатом, опять таки получим сообщение об успешной (или же неудачной) инъекции шифратора в код страницы.
    После этого каждый из собеседников должен нажать на линк «GENERATE KEYS NOW». Через несколько (возможно, десятков) секунд появится сообщение, что ключ сгенерирован и отправлен. Следовательно, собеседник на другом конце будет тоже уведомлен об этом.
    Теперь можно приступать к общению. Для отправки обычного сообщения пользуемся стандартной кнопкой, для отправки шифрованного — нажимаем на «SEND ENCRYPTED». Скрипт на другом конце сам поймёт, что нужно делать, если получено зашифрованное сообщение.

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

    • Скрипт не работает в конференциях, а рассчитан лишь на двустороннее общение.
    • Максимальная длина сообщения на данный момент лишь 32 байта — нужно шифровать, разбивая текст на блоки, а не так, как там сейчас.
    • По нажатию на «Enter» вызывается нативная отправка. Нужно немного больше порыться в коде, чтобы заменить и этот ивент.
    • Аттачменты не шифруются, поскольку они фактически не являются частью сообщения.
    Установить скрипт можно отсюда:

    Для просмотра ссылок зарегистрируйтесь или авторизуйтесь на сайте.


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

    EDIT: Приношу извинения за множество орфографических ошибок, на которые читатели любезно обратили моё внимание. Кажется, всё исправил.

    Для просмотра ссылок зарегистрируйтесь или авторизуйтесь на сайте.

     
    Последнее редактирование модератором: 2 апр 2014
    wagamata, Qim и one нравится это.