Сквозное шифрование переписки в социальной сети «ВКонтакте»

Авторы: Д.В. Кубашевский, А.В. Чернышова
Источник: I Международная научно-практическая конференция "Программная инженерия: методы и технологии разработки информационно-вычислительных систем (ПИИВС–2016)" / Сборник научных трудов I научно-практической конференции (студенческая секция). — Донецк, ДонНТУ — 2016, с. 44-47.

Аннотация

В данной работе выполнен анализ мессенджеров, использующих сквозное шифрование переписки, и представлен новый механизм сквозного шифрования на базе системы мгновенного обмена сообщениями в социальной сети «ВКонтакте».

Введение

Общение является основной частью нашей жизни. С появлением систем мгновенного обмена сообщениями (англ. Instant messaging, IM) коммуникация между людьми приобрела новый характер [1]. Стало возможным «живое» общение с собеседником, который находится в противоположной точке земного шара.

Современные клиенты систем мгновенного обмена сообщениями, которые называются мессенджерами, использует свой центральный сервер, на котором хранится вся история переписки каждого из пользователей. Таким образом, лица, имеющие доступ к данным сервера, могут изучить содержимое переписки. Иногда возникает необходимости в полной конфиденциальности беседы и в этом случае приходится использовать сквозное шифрование (End-to-End Encryption, E2EE) — способ передачи данных, когда доступ к сообщениям имеют исключительно пользователи, задействованные в общении [2].

Шифрование в популярных мессенджерах

Facebook Messenger — официальный мессенджер от разработчиков крупнейшей в мире социальной сети Facebook. Существуют версии для персональных компьютеров и мобильных устройств. Приложение интегрировано с системой обмена сообщениями на основном сайте Facebook (Facebook Chat) и построено на базе открытого протокола MQTT [3]. Данный мессенджер позволяет обмениваться файлами и фотографиями. К текстовым сообщениям можно добавлять смайлики и стикеры. Мобильная версия мессенджера предоставляет голосовую и видеосвязь, а также возможность передавать геометки.

С июля 2016 года Facebook на своём новостном портале сообщил о запуске тестирования сквозного (End-to-End) шифрования с секретными чатами. Теперь появилась возможность создавать секретный диалог, содержимое которого доступно исключительно для создателя диалога и его собеседника — пользователя, приглашённого в секретный чат. Также доступна возможность задавать таймер — после истечения заданного времени сообщения удаляются из беседы. Сквозное шифрование в секретных чатах основано на базе протокола Signal, разработанного некоммерческой организацией разработчиков открытого программного обеспечения «Open Whisper Systems» [4].

WhatsApp — бесплатный частный коммерческий кроссплатформенный мессенджер с поддержкой голосовой связи. Позволяет пересылать текстовые сообщения, изображения, видео и аудио. Также существуют версии для персональных компьютеров под управлением ОС Windows и мобильных устройств под управлением ОС Android, iOS, Windows Phone, BlackBerry, Nokia Symbian. WhatsApp использует модифицированный протокол Extensible Messaging and Presence Protocol (XMPP, ранее известный как Jabber).

С апреля 2016 года с выходом обновления версии 2.16.12 в WhatsApp появилось сквозное шифрование (End-to-End) на базе протокола Signal. Шифрование распространяется на все типы сообщений: текст, фото, видео и голосовые сообщения. Шифрование также доступно в групповых чатах. В реализации используются алгоритмы ECDH на Curve25519, AES-256, AES-GCM, HMAC-SHA256, HDKF [5].

Viber — один из популярнейших мессенджеров, поддерживающих голосовую и видеосвязь. Работает на платформах Android, BlackBerry, iOS, Symbian, Windows Phone, Bada и компьютерах под управлением Windows, OS X и Ubuntu. Позволяет отправлять текстовые сообщения со стикерами, а также нарисованные прямо в приложении картинки. Также в мессенджере есть групповые и публичные тематические чаты [6].

Начиная с версии 6.0, разработчики Viber внедрили в свой сервис сквозное шифрование. Таким образом, все сообщения, фотографии, видео, телефонные и видеовызовы будут зашифрованы с момента отправки с одного устройства до момента их получения адресатом. Как заявляют разработчики, ключ, необходимый для расшифровки данных, доступен только на устройстве, используемом для отправки сообщения, и на устройстве, используемом для приёма сообщения. Таким образом, никто другой не может расшифровать передаваемые данные. Групповые чаты также шифруются при условии, что все участники чата имеют версию мессенджера 6.0 или старше [7].

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

Для мессенджера был создан протокол MTProto, предполагающий использование нескольких протоколов шифрования. При авторизации и аутентификации используются алгоритмы RSA-2048, DH-2048 для шифрования, при передаче сообщений протокола в сеть они шифруются AES с ключом, известным клиенту и серверу. Также применяются криптографические хеш-алгоритмы SHA-1 и MD5 [8].

С 8 октября 2013 года добавлена функциональность секретных чатов, в которых реализуется сквозное шифрование с применением алгоритма AES-256 в режиме IGE для пересылаемых сообщений [8]. В отличие от Viber, в Telegram секретные чаты доступны для двух пользователей. Как и в Facebook Messenger, в секретном чате Telegram есть возможность задания таймера. Спустя указанное время прочитанное сообщение будет удалено на устройстве пользователя.

qTox — свободный кроссплатформенный мессенджер, реализованный на базе протокола Tox [9]. Позволяет осуществлять текстовую, голосовую, видеосвязь и передачу файлов. Доступен режим конференции (группы). Данный мессенджер отличается от ранее рассмотренных тем, что регистрация пользователей на основном сервере не требуется. После установки qTox автоматически создаётся пара ключей — публичный и секретный. Публичный ключ служит как уникальный идентификатор для поиска собеседника. Секретный ключ хранится только у владельца и подтверждает его подлинность, не раскрывая персональные данные. Поиск собеседников происходит через DHT [10]. Изначально вся переписка в qTox защищена с использованием сквозного шифрования.

Kate Mobile — неофициальный мобильный клиент социальной сети «ВКонтакте» [11]. Предоставляет все возможности веб-версии ВКонтакте для ведения переписки — обмен текстовой информацией со смайликами и стикерами, голосовыми сообщениями и другим медиаконтентом, включая файлы допустимых форматов. Kate Mobile является тонким клиентом, использующим открытое API, которое предоставляется разработчиками ВКонтакте.

В социальной сети «ВКонтакте» отсутствует шифрование переписки, поэтому она хранится на серверах сети в открытом виде и доступна для прочтения третьим лицам, имеющим доступ к серверам.

Механизм сквозного шифрования в социальной сети «ВКонтакте»

Реализуемый механизм сквозного шифрования переписки в социальной сети «ВКонтакте» основан на использовании симметричного и ассиметричного алгоритмов шифрования, алгоритма хеширования и ассиметричного алгоритма для создания электронной цифровой подписи (ЭЦП).

В качестве симметричного алгоритма используется Rijndael — симметричный алгоритм блочного шифрования [12]. С помощью Rijndael будет шифроваться информация перед отправкой собеседнику (на сервер ВКонтакте). Ключ шифрования генерируется случайным образом и будет действителен до тех пор, пока пользователем не будет запрошен новый ключ.

Для предотвращения компрометации ключа симметричного шифрования используется криптографический алгоритм ассиметричного шифрования RSA [13]. Данный алгоритм позволит безопасно передать ключ симметричного шифрования собеседнику по открытому каналу таким образом, что никто другой не сможет получить ключ и расшифровать передаваемые сообщения.

Для подтверждения личности автора передаваемых сообщений и обеспечения гарантии их целостности в данном механизме сквозного шифрования используется электронная цифровая подпись, которая создаётся с помощью ассиметричного криптографического алгоритма DSA [14] и алгоритма хеширования SHA-1 [15].

API ВКонтакте позволяет выполнять передачу текстовых сообщений, что является достаточным условием для передачи любых данных с помощью метода кодирования Base64 [16]. Стоит отметить, что зашифрованные сообщения будут видны на веб-странице ВКонтакте. С другой стороны, мессенджер, который будет использовать реализацию описываемого механизма сквозного шифрования, также будет получать все новые сообщения, отправленные через веб-страницу в незашифрованном виде (обычные сообщения пользователя). Поэтому, с целью фильтрации зашифрованных сообщений каждое сообщение, отправленное с использованием данного механизма, будет содержать служебный заголовок «=== VKMessenger ===», состоящий из 19 символов: трёх символов «равно», одного пробела, последовательности символов «VKMessenger», одного пробела и трёх символов «равно». После данного заголовка будет следовать символ конца строки. Затем следует содержимое служебного сообщения, закодированное методом Base64. Первым байтом содержимого является код сообщения, который описывает тип служебного сообщения. Затем в зависимости от типа служебного сообщения будет следовать определённый набор данных. Далее будет описан протокол передачи сообщений с использованием сквозного шифрования.

При первом использовании описываемого механизма собеседники должны обменяться публичными ключами, с помощью которых будет осуществляться шифрование ключей для шифрования сообщений. Данный этап называется этапом «рукопожатия». Пусть собеседник А собирается отправить сообщение собеседнику Б. Тогда собеседник А отправляет служебное сообщение с кодом «1» и пустым набором данных. Данное служебное сообщение означает запрос публичного ключа. Собеседник Б должен ответить служебным сообщением с кодом «2» и публичным ключом RSA размером 256 байт (2048 бит).

Для отправки пользовательских сообщений используются служебные сообщения с кодом «3». Протоколом поддерживается передача двух типов пользовательских сообщений: текста и файла с указанием его имени. После кода сообщения идёт код типа пользовательского сообщения (1 байт), зашифрованный ключ симметричного шифрования (256 байт или 2048 бит) и зашифрованное подписанное электронной цифровой подписью содержимое пользовательского сообщения.

Формат пользовательских сообщений перед их шифровкой зависит от типа пользовательского сообщения. В случае текстового типа (код «1») исходный текст пользовательского сообщения представляется последовательностью байт в кодировке «UTF-8» [17]. В случае файлового типа (код «2») первый байт содержит длину имени файла. Затем следует указанное число байт, которые представляют собой имя файла в кодировке «ASCII» [18]. Стоит отметить, что для отправки файлов с именем, которое содержит символы отличные от латинских, мессенджер должен позаботиться о транслитерации имени файла для его корректного отображения у получателя сообщения. Далее следуют четыре байта, которые расположены в сетевом порядке байт (big-endian) и определяют размер файла в байтах [19]. Затем следуют байты содержимого файла.

Содержимое пользовательского сообщения подписывается с помощью алгоритма DSA. Подписанное пользовательское сообщение в начале содержит электронную цифровую подпись (40 байт) и публичный ключ (444 байт), который позволит получателю проверить целостность данных с помощью этой подписи. Далее подписанное пользовательское сообщение шифруется с помощью случайно сгенерированного ключа симметричного шифрования длиной 32 байт (256 бит). После получения описанного служебного сообщения с кодом «3» получатель сможет определить тип пользовательского сообщения, расшифровать содержимое пользовательского сообщения с помощью своего приватного ключа и проверить подпись, удостоверившись в целостности и корректности полученного пользовательского сообщения.

Таким образом, описанного набора служебных сообщений достаточно для реализации механизма сквозного шифрования в переписке социальной сети «ВКонтакте».

Выводы

В ходе выполнения данной работы были рассмотрены существующие реализации механизма сквозного шифрования переписки на примере мессенджеров для систем мгновенного обмена сообщениями, а также предложен механизм сквозного шифрования (End-to-End) переписки в социальной сети «ВКонтакте», реализация которого позволит дополнить существующую функциональность социальной сети и обеспечить безопасность и строгую конфиденциальность переписки.

Основным преимуществом описанного механизма является тот факт, что до сих пор не существует аналогов реализации механизма сквозного шифрования для переписки в социальной сети «ВКонтакте».

Литература

  1. Система мгновенного обмена сообщениями // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/Система_мгновенного_обмена_сообщениями
  2. ProtonMail: Сквозное шифрование: описание и принцип работы метода // Computer Security Software Russia. [Электронный ресурс]. – Режим доступа: http://www.comss.ru/page.php?id=2468
  3. Facebook Messenger // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/Facebook_Messenger
  4. Messenger Starts Testing End-to-End Encryption with Secret Conversations // Facebook. [Электронный ресурс]. – Режим доступа: https://newsroom.fb.com/news/2016/07/messenger-starts-testing-end-to-end-encryption-with-secret-conversations/
  5. WhatsApp // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/WhatsApp
  6. Мессенджеры 2016: самые интересные приложения для мгновенного обмена сообщениями // ITC.ua. [Электронный ресурс]. – Режим доступа: http://itc.ua/articles/messendzheryi-2016-samyie-interesnyie-prilozheniya-dlya-mgnovennogo-obmena-soobshheniyami/
  7. Вопросы и ответы по безопасности Viber // Viber. [Электронный ресурс]. – Режим доступа: https://support.viber.com/customer/ru/portal/articles/2017401-Вопросы-и-ответы-по-безопасности-viber
  8. Telegram (мессенджер) // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/Telegram_(мессенджер)
  9. Clients - Tox // Tox. [Электронный ресурс]. – Режим доступа: https://tox.chat/clients.html#qtox
  10. Tox // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/Tox
  11. Kate Mobile Lite // Google Play. [Электронный ресурс]. – Режим доступа: https://play.google.com/store/apps/details?id=com.perm.kate_new_6
  12. Advanced Encryption Standard // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/Advanced_Encryption_Standard
  13. RSA // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/RSA
  14. DSA // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/DSA
  15. SHA-1 // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/SHA-1
  16. Base64 // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/Base64
  17. UTF-8 // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/UTF-8
  18. ASCII // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/ASCII
  19. Порядок байтов // Википедия — свободная энциклопедия. [Электронный ресурс]. – Режим доступа: https://ru.wikipedia.org/wiki/Порядок_байтов