Библиотека ДонНТУ Портал магистров

Вязмин В.И. Голосовые мессенджеры. Обзор существующих протоколов / В.И. Вязмин, А.В. Чернышова // Программная инженерия: методы и технологии разработки информационно-вычислительных систем (ПИИВС–2018): сборник научных трудов II научно-практической конференции (студенческая секция), том 2 / Донец. национал. техн. ун-т; — Донецк, 2018. — С. 33-37 [Ссылка на сборник].

УДК 004.4

Голосовые мессенджеры. Обзор существующих протоколов

Вязмин В.И., Чернышова А.В.

Донецкий национальный технический университет

testerreality@gmail.com, chernyshova.alla@rambler.ru

Вязмин В.И., Чернышова А.В. Голосовые мессенджеры. Обзор существующих протоколов. В статье рассмотрены популярные на данный момент времени голосовые мессенджеры. Произведен обзор существующих протоколов передачи аудиоданных. Подробно рассмотрен протокол XMPP и его возможность передачи аудиоданных. Определены слабые и подчеркнуты сильные стороны протокола XMPP.

Ключевые слова: XMPP, аудиоданные, шифрование, XML, мессенджеры.

Обзор голосовых мессенджеров

Голосовые мессенджеры [1] приобрели свою популярность совсем недавно. Развитие данной отрасли берет своё начало в момент, когда средняя скорость интернета по всему миру стала достаточно комфортной для использования данных приложений даже на смартфонах. Мессенджер – это программа, мобильное приложение или веб-сервис для мгновенного обмена сообщениями, в данном случае, голосовыми. Данная отрасль начала развиваться достаточно бурно и эффективно, что привело к созданию по меньшей мере сотен, а то и тысячи мессенджеров. Однако, на рынке программных продуктов такого типа смогли показать своё превосходство лишь единицы. Одним из наиболее популярных голосовых мессенджеров в настоящее время является WhatsApp [2].

WhatsApp – бесплатная система мгновенного обмена сообщениями (текстовыми, голосовыми и видео) для мобильных и иных платформ. Позволяет пересылать текстовые сообщения, изображения, видео и аудио через Интернет. Для передачи данных, WhatsApp использует модифицированный протокол Extensible Messaging and Presence Protocol (XMPP, ранее известный как Jabber) [3]. Мультимедиа-сообщения отправляются путём загрузки изображения, звука или видео на HTTP-сервер [4] и передачей гиперссылки на объект вместе с закодированным в Base64 [5] уменьшенным вариантом изображения. В данный момент WhatsApp использует сквозное шифрование (end-to-end) [6]. Данное шифрование относится ко всем типам пересылаемых данных, будь то текстовое, фото, видео или голосовое сообщение. Произвести расшифровку данных сообщений может только получатель, содержимое недоступно даже серверам WhatsApp. В реализации используются алгоритмы ECDH [7] на Curve25519 [8], AES-256 [9], AES-GCM [10]. Два пользователя имеют возможность сверить ключи шифрования путём сканирования QR кода или сравнения 60-значного числа, что позволит исключить атаки класса man-in-the-middle.

Следующим, не менее известным мессенджером является Skype [11].

Skype – бесплатное проприетарное программное обеспечение с закрытым исходным кодом, которое обеспечивает текстовую, голосовую и видеосвязь через интернет между компьютерами (IP-телефония). Опционально приложение использует технологии пириновых сетей. Главной отличительной чертой среди других подобных программ являлось то, что для передачи данных Skype изначально использовал децентрализованную P2P-архитектуру [12]. Каталог пользователей Skype был распределён по компьютерам пользователей сети Skype, что давало возможность легко масштабироваться до чрезвычайно больших размеров без затрат на расширение серверной части. Протокол Skype является закрытым и недокументированным, используется только оригинальным ПО Skype. С июня 2014 года оригинальный протокол объявлен устаревшим, вместо него Skype использует протокол MSNP24 [13]; с августа 2014 года оригинальный протокол был отключен на серверах. Пользователь может разговаривать как с одним, так и с несколькими пользователями одновременно. Skype использует кодеки (алгоритмы сжатия данных) SILK, G.729 и G.711 [14], и при достаточной скорости интернет-соединения (30–60 кбит/с) ничем не уступает привычным телефонным разговорам. При установке соединения между ПК аудиоданные шифровались при помощи алгоритма AES-256, для передачи ключа которого, в свою очередь, использовался 1024-битный ключ алгоритма RSA [15]. Открытые ключи пользователей сертифицируются центральным сервером Skype при входе в систему с использованием 1536- или 2048-битных сертификатов RSA. Не смотря на все отличия данного мессенджера, в последние годы он стал терять свою популярность, и большинство пользователей предпочитают другие мессенджеры, например, такие, как Discord [16].

Discord – бесплатный мессенджер с поддержкой VoIP и видеоконференций, изначально ориентированный для пользователей компьютерных игр. Discord использует звуковой кодек Opus [17], который имеет низкую задержку и предназначен для сжатия речи. Для передачи данных, Discord использует модифицированный протокол User Datagram Protocol (UDP) [18]. Отправленные голосовые дынные должны быть закодированы с помощью Opus, используя два канала и частоту дискретизации 48 кГц. Голосовые данные отправляются с использованием заголовка RTP [19], за которым следуют зашифрованные звуковые данные Opus. Голосовое шифрование использует ключ, который является кодом операции на сервере с 24-байтным заголовком (используется как однократно используемое число, с добавлением 12 нулевых байтов), алгоритм шифрования неизвестен, предположительно AES.

Аудиоданные в протоколе XMPP

XMPP (Extensible Messaging and Presence Protocol) – основанный на XML, открытый протокол для мгновенного обмена сообщениями, который поддерживает передачу голоса, видео и файлов. XMPP является децентрализованной и расширяемой системой. XMPP напоминает другие протоколы прикладного уровня, например, SMTP [20]. В данной архитектуре каждый клиент обладает уникальным именем и обменивается информацией с другими клиентами через сервер. При этом клиенты включают реализации клиентской части протокола, в то время как сервер выполняет функции маршрутизатора. XMPP представляет собой относительно простой протокол для передачи сообщений через сокеты TCP [21]. Клиент и сервер взаимодействуют асинхронно путем передачи станс XML (XML stanzas) [22] внутри XML-потоков. XML-потоки выполняют функции контейнеров, инкапсулирующих обмен XML-данными между двумя объектами, в то время как стансы являются дискретными информационными единицами. В XMPP XML-стансы используются для передачи как пользовательских сообщений, так и информации о статусе присутствия. Пример взаимодействия двух клиентов представлен на рисунке 1. Следует отметить, что в переговорах должен принимать участие как минимум один сервер. На рисунке 1 левый клиент – это инициирующая сторона (является инициатором XMPP-обмена). Данный XML-поток использует атрибут to для распознавания получающего домена (а также для определения пространства имен XML). Принимающий клиент справа получает XML-поток и отвечает также XML-потоком (используя атрибут from). Данный этап позволяет проводить ряд различных переговоров, в частности, об аутентификации и шифровании.

Пример (упрощенный) обмена XMPP-сообщениями

Рисунок 1 – Пример (упрощенный) обмена XMPP-сообщениями

Для передачи аудиоданных протоколу XMPP необходимо дополнение. Данное дополнение получило имя Jingle [23]. Jingle – это дополнение к протоколу XMPP, позволяющее передавать между двумя клиентами аудио- и видеоданные, поддерживает только P2P [24] соединения. Он был разработан компанией Google и XMPP Standards Foundation. Официальное название стандарта – XEP-0166. Поддержка сервера не требуется для Jingle, поскольку клиенты напрямую взаимодействуют и используют только протокол XMPP для ведения переговоров. Следующим необходимым шагом является наличие STUN [25]. STUN – протокол, позволяющий обходить ограничения, связанные с работой за NAT [26] (от англ. Network Address Translation – преобразование сетевых адресов). STUN нужен для работы Jingle, когда собеседники находятся за NAT и не имеют прямого IP-адреса. В ряде случаев чтобы работала передача файлов, а также общение голосом и видео нужно указывать STUN-сервер. Передача аудиоданных происходит по протоколу RTP (Real-time Transport Protocol). Схематическое представление передачи аудиоданных представлено на рисунке 2.

Схематическое представление передачи аудиоданных при помощи Jingle

Рисунок 2 – Схематическое представление передачи аудиоданных при помощи Jingle

После того, как клиент запустил Jingle-сеанс, XMPP сервер получает список пользователей для соединения. Затем каждый клиент получает общедоступный адрес при помощи STUN-сервера и просит XMPP сервер выдать ему ip-адрес клиента, с которым необходимо установить соединение. Если данная операция невозможна, скорее всего, пользователь не в сети. Всё это время сервер посылает запрос ECHO клиентам, чтобы убедиться, что они доступны. После того, как маршрут согласован, начинается P2P связь.

Достоинства и недостатки XMPP

К достоинствам протокола XMPP можно отнести децентрализацию, поскольку архитектура сети подобна электронной почте; кто угодно может запустить свой собственный XMPP-сервер, и нет какого-либо центрального сервера. Также, достоинством является и богатая история, которая позволила приобрести множество дополнений к стандартам XMPP. Следующим достоинством является безопасность. XMPP серверы могут быть изолированы от публичных сетей XMPP (например, во внутренней сети компании) и хорошо защищены встроенными в ядро XMPP спецификациями. Одним из важнейших достоинств данного протокола является гибкость. Настраиваемая функциональность может быть надстроена поверх XMPP.

Недостатками можно считать избыточность передаваемой информации: в большинстве случаев более 70% трафика между серверами XMPP составляют сообщения о присутствии, из которых 60% являются избыточными. XMPP на данный момент создаёт избыточный трафик при доставке сообщений о присутствии (то есть статус-сообщений) нескольким пользователям.

Шифрование XMPP

Для шифрования данных в протоколе XMPP можно использовать OTR [27]. OTR (Off-the-Record Messaging) является криптографическим протоколом для систем мгновенного обмена сообщениями. Протокол OTR разрабатывался для того, чтобы обеспечить приватность переговоров, аналогичную переговорам без использования средств телекоммуникаций. Для передачи сообщений участникам необходимо установить общий секретный ключ. Для этого используется протокол аутентифицированного распределения ключей, основанный на протоколе Диффи – Хеллмана [28]. Для шифрования сообщений используется алгоритм AES в режиме счётчика. Использование построенного таким образом поточного шифра обеспечивает спорное шифрование [29]. Иными словами, любой, кто перехватит сообщение, сможет изменить любые биты в сообщении на своё усмотрение. Если сообщение стало известно, его можно изменить на любое другое сообщение такой же длины. Поскольку присутствует спорное шифрование, участники протокола OTR могут утверждать, что любое из переданных сообщений было изменено третьей стороной. С точки зрения безопасности, это является не самым рациональным решением, однако, такое решение позволят скрыть источники, и позволяет отправителям отрицать свою причастность к отправленному сообщению.

Выводы

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

Литература

  1. Обзор мессенджеров. Лучшие и популярные интернет мессенджеры // VoIPOFfice [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: http://www.voipoffice.ru/tags/messendzhery. – Загл. с экрана.
  2. WhatsApp // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: http://wikipedia.green/WhatsApp. – Загл. с экрана.
  3. XMPP (Extensible Messaging and Presence Protocol) // Национальная библиотека им. Н. Э. Баумана [Электронный ресурс] – Электрон. дан. – 2017. – Режим доступа: https://ru.bmstu.wiki/XMPP_(Extensible_Messaging_and_Presence_Protocol). – Загл. с экрана.
  4. HTTP // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/HTTP. – Загл. с экрана.
  5. SGVsbG8gd29ybGQh или история base64 / AlexLeonov // habr [Электронный ресурс] – Электрон. дан. – 2010. – Режим доступа: https://habr.com/post/88077. – Загл. с экрана.
  6. Сквозное шифрование // Википедия [Электронный ресурс] – Электрон. дан. – 2010. – Режим доступа: https://ru.wikipedia.org/wiki/Сквозное_шифрование. – Загл. с экрана.
  7. Протокол Диффи – Хеллмана на эллиптических кривых // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/Протокол_Диффи_–_Хеллмана_на_эллиптических_кривых. – Загл. с экрана.
  8. Curve25519, EdDSA и Poly1305: Три обделенных вниманием криптопримитива / Scratch // habr [Электронный ресурс] – Электрон. дан. – 2015. – Режим доступа: https://habr.com/post/247873. – Загл. с экрана.
  9. Advanced Encryption Standard // Википедия [Электронный ресурс] – Электрон. дан. – 2014. – Режим доступа: https://ru.wikipedia.org/wiki/Advanced_Encryption_Standard. – Загл. с экрана.
  10. Galois/Counter Mode // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/Galois/Counter_Mode. – Загл. с экрана.
  11. Skype // Национальная библиотека им. Н. Э. Баумана [Электронный ресурс] – Электрон. дан. – 2017. – Режим доступа: https://ru.bmstu.wiki/Skype. – Загл. с экрана.
  12. Одноранговая сеть // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/Одноранговая_сеть
  13. Microsoft Notification Protocol // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/Microsoft_Notification_Protocol. – Загл. с экрана.
  14. Технология интернет-телефонии в программе Skype // Боровское исследовательское учреждение [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: http://bourabai.kz/mmt/skype.htm. – Загл. с экрана.
  15. RSA // Университет ИТМО [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://neerc.ifmo.ru/wiki/index.php?title=RSA. – Загл. с экрана.
  16. Discord // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/Discord. – Загл. с экрана.
  17. Основы кодирования аудио с потерями. Тестирование бета-версии Opus 1.3 / Zeben // habr [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://habr.com/post/346532. – Загл. с экрана.
  18. UDP // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/UDP. – Загл. с экрана.
  19. Протокол передачи видео- и аудиоинформации в реальном масштабе времени // Боровское исследовательское учреждение [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: http://bourabai.kz/mmt/rtp.htm. – Загл. с экрана.
  20. SMTP // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/SMTP. – Загл. с экрана.
  21. TCP протокол / Кунегин С. В. // kunegin [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: http://kunegin.com/ref1/net_prot/tcpprot.htm. – Загл. с экрана.
  22. Станс // Хранилище знаний о Jabber [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: http://wiki.jrudevels.org/Stanza. – Загл. с экрана.
  23. Jingle (протокол) // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/Jingle_(протокол). – Загл. с экрана.
  24. Одноранговая сеть // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/Одноранговая_сеть. – Загл. с экрана.
  25. STUN // Хранилище знаний о Jabber [Электронный ресурс] – Электрон. дан. – 2011. – Режим доступа: http://jawiki.ru/STUN. – Загл. с экрана.
  26. NAT // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/NAT. – Загл. с экрана.
  27. Off-the-Record Messaging // Википедия [Электронный ресурс] – Электрон. дан. – 2013. – Режим доступа: https://ru.wikipedia.org/wiki/Off-the-Record_Messaging. – Загл. с экрана.
  28. Протокол Диффи – Хеллмана // Википедия [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://ru.wikipedia.org/wiki/Протокол_Диффи_–_Хеллмана. – Загл. с экрана.
  29. Отрицаемое шифрование – оружие бесправного // Компьютерные вести [Электронный ресурс] – Электрон. дан. – 2018. – Режим доступа: https://www.kv.by/content/otritsaemoe-shifrovanie-oruzhie-bespravnogo. – Загл. с экрана.

Вязмин В.И., Чернышова А.В. Голосовые мессенджеры. Обзор существующих протоколов. В статье рассмотрены популярные на данный момент времени голосовые мессенджеры. Произведен обзор существующих протоколов передачи аудиоданных. Подробно рассмотрен протокол XMPP и его возможность передачи аудиоданных. Определены слабые и подчеркнуты сильные стороны протокола XMPP.

Ключевые слова: XMPP, аудиоданные, шифрование, XML, мессенджеры.

Vyazmin V., Chernyshova A. Voice messengers. Review of cases of protocols. The article describes the popular voice messengers, protocols that allow you to transfer audio data in real time. Certain weaknesses and strengths of the XMPP protocol.

Keywords: XMPP, audio, encryption, XML, messengers.