Session messenger
Session messenger — открытый децентрализованный мессенджер (бывший Loki Messenger) на базе экосистемы Oxen (бывший Loki blockchain), который поддерживает сквозное шифрование на основе протокола Signal, а также удаление некоторых метаданных. Данный мессенджер позволяет обмениваться сообщениями и различными файлами с минимальным количеством пользовательских метаданных[4].
Session messenger | |
---|---|
Тип | IM |
Разработчик | Loki Foundation |
Написана на | C++ |
Интерфейс | EGL |
Операционная система | Linux, Windows, Android, MacOS, IOS[1] |
Языки интерфейса | английский |
Первый выпуск | 4 февраля 2020[2] |
Последняя версия | 1.1.0 (17 апреля 2020) |
Лицензия | GPL v3[3] |
Сайт | getsession.org |
Session messenger не требует телефонный номер или email адрес для регистрации[5].
При создании аккаунта генерируется случайный уникальный ID вида: 05652245af9a8bfee4f5a8138fd5c…[6] После этого можно отправить этот идентификатор контактам, которым вы хотите, или считать и отправить QR-код.
История
Session messenger является преемником Loki messenger. Первая версия вышла 04 февраля 2020 г. в Google Play[2].
Начиная с версии 1.1.0 появился выбор между фоновой синхронизацией сообщений и push-уведомлениями[7]. На Андроиде синхронизация push-сообщений происходит через Firebase Cloud Messaging (FCM) от Google.
Основная информация
В данном мессенджере используется децентрализованная работа на базе блокчейна Oxen (предыдущее название – Loki), а также работа через луковую маршрутизацию. Используется рой из децентрализованных серверов, которые построены на базе Oxen blockchain — Oxen Service Node. В свою очередь работа Oxen blockchain основана на протоколе CryptoNote[8].
Другим основополагающим компонентом Session является протокол луковой маршрутизации и так называемые луковые запросы, которые позволяют клиентам Session скрывать свои IP-адреса путем создания случайного пути через 3 обслуживающих узла в сети[9]. Session также поддерживает асинхронный (offline) режим обмена сообщениями[10].
На схеме Алиса использует луковичные запросы для отправки слушающим узлам (Listening Nodes) Боба. Боб получает это сообщение, используя луковые запросы, затем посылает сообщение слушающим узлам (Listening Nodes) Алисы[11].
Протокол Signal позволяет клиентам поддерживать Perfect Forward Secrecy (PFS) и отказную аутентификацию (Deniable Authentication) с режимом обмена сообщениями в асинхронном режиме после первоначального установления сеанса с использованием долгосрочных ключей[11].
Сигнальный протокол выполняет PFS благодаря согласованию о ключах — тройному расширенному Диффи-Хеллману (Extended Triple Diffie-Hellman (X3DH)) и алгоритму двойного храповика (Double Ratchet Algorithm) для получения ключей сообщения[11]. Возвращение приватной информации происходит через специальную схему PIR (Private Information Retrieval). Эти протоколы позволяют пользователю искать в обслуживающих узлах информацию без знания самих узлов, какая информация была выбрана и передана пользователю[12]. В мессенджере также можно создавать групповые чаты с использованием сквозного шифрования[13].
Открытые группы можно создавать от 3-х до 500 участников. Ограничение в 500 участников введено потому, что при очень больших группах есть больша́я доля вероятности, что какой-то из участников может быть злоумышленником или участником с заражённым устройством. Закрытые группы со сквозным шифрованием можно создавать от 3-х до 10 участников[14].
Модификации в протоколе Signal
В дополнение к сигнальному протоколу были сделаны изменения, которые избегают использование центральных серверов, а также для совместного использования связки предварительных общих ключей (prekey bundles). Также к каждому сообщению добавляется служебная информация о необходимой маршрутизации и проверке на корректность создания сообщения[15].
Применяемые меры защиты в Session Messenger
- Анонимность отправителя: долгосрочный идентификационный ключ отправителя известен только участникам разговора и IP-адрес отправителя неизвестен другим сторонам, исключая первый прыжок (входная нода) в луковом запросе. Однако, входная нода не знает ни адреса назначения, ни содержание сообщения[16].
- Анонимность получателя: IP-адрес получателя неизвестен другим сторонам, исключая первый прыжок (входная нода) в луковом запросе. И также, входная нода не знает адреса назначения или содержание сообщения[16].
- Целостность данных: сообщения получаются нетронутыми и не модифицированными, а если сообщение было модифицировано в процессе передачи, оно помечается как испорченное и отбрасывается[16].
- Хранилище: зашифрованные сообщения временно хранятся в нодах и доступны в течение указанного времени Time To Live (TTL)[16].
- Сквозное шифрование: сообщения (за исключением запросов на добавление друзей) обладают свойствами Off the Record (OTR) протокола, называемые Perfect Forward Secrecy (PFS) и отказной аутентификации (Deniable authentication)[16].
Дополнительные возможности
Мульти-устройства
Session поддерживает мульти-устройства (multi-device). Таким образом можно использовать его и на компьютере, ноутбуке, телефоне, а также на других устройствах одновременно[17]. Для этого необходимо, чтобы была проведена синхронизация ключей между двумя устройствами. С точки зрения пользователя нужно, чтобы оба устройства имели одинаковую ключевую пару публичного и приватного ключа.
На схеме изображена пересылка информации с использованием нескольких устройств. Алиса посылает сообщение с её первичного устройства для Боба, у которого включено несколько устройств одновременно. Алиса отправляет сообщение для первичного и вторичного устройства Боба. Она также отправляет сообщение себе, для своего вторичного устройства для оставления своего сообщения на другом устройстве. (Для упрощения рисунка здесь не показаны луковые запросы, а также репликация сообщений через рой).
Передача вложений
Отправка файлов поддерживается до 10 МБ. Перед отправкой файл шифруется случайным AES ключом. После этого отправитель отправляет файл через луковые запросы (onion requests). В ответ файловый сервер передаёт ссылку на контент, возвращаемую тоже через луковые запросы. После этого отправитель отправляет сообщение получателю через существующую сессию. Это сообщение содержит ссылку на контент, его хэш и ключ расшифровки. Получатель использует луковые запросы для получения зашифрованного сообщения с файл-сервера, а затем расшифровывает его с помощью полученного ключа дешифровки от отправителя. Получатель также проверяет хэш вложения для проверки того, что файл не был модифицирован при передаче[18].
Другие возможности
В мессенджере есть возможность создавать исчезающие сообщения с периодом от 5 секунд до 1 недели. Для защиты от спама максимальное время хранения сообщений в рое перед их доставкой составляет 96 часов[19]. Это время можно выбрать в настройках приложения в пределах 12 часов — 96 часов (Message TTL).
Session поддерживает бэкап на некоторые популярные облачные бэкап-сервисы. Бэкап шифруется с помощью симметричного ключа (полученного из долгоживущего приватного ключа (long-term private key), который в свою очередь шифруется с помощью парольной фразы, состоящей из 12 произносимых случайных слов[20].
В мессенджере предусмотрена защита от Sybil attack, а также защита от спама[21].
Достоинства Session messenger
- Децентрализация на основе блокчейна.
- Поддержка сквозного шифрования и протокола Signal.
- Для регистрации в системе не требуется телефонного номера или email.
- Поддержка групповых чатов со сквозным шифрованием (до 10 человек).
- Поддержка луковых запросов.
- Кроссплатформенность.
Недостатки Session messenger
- Невысокая производительность и, как следствие, доставка сообщений с заметной задержкой.
- Повышенное потребление сетевого трафика (характерна для всех децентрализованных мессенджеров).
См. также
Ссылки
Примечания
- Официальная страница загрузки Session messenger
- Session messenger в Google Play
- Loki-project на GitHub
- Whitepaper (удаление метаданных), стр.1
- Whitepaper, стр.24
- Session: An Open Source Private Messenger That Doesn’t Need Your Phone Number
- Изменения в Session messenger (Google Play)
- Whitepaper, стр.3
- Whitepaper, стр.4
- Whitepaper, стр.9
- Whitepaper, стр.10
- Whitepaper, стр.27
- Whitepaper, стр.12
- Whitepaper, стр.15
- Whitepaper, стр.11-12
- Whitepaper, стр.1
- Whitepaper, стр.16
- Whitepaper, стр.18, 23
- Whitepaper, стр.23
- Whitepaper, стр.20
- Whitepaper, стр.3-4