Привет, Хабр! Сегодня я расскажу о том, чем мы с коллегами занимаемся уже несколько месяцев: push-уведомления для мобильных мессенджеров.
Как я уже сказал, в нашем приложении основной упор сделан на безопасность.
Поэтому мы выяснили, есть ли у push-уведомлений «слабые места» и если да, то как их можно нивелировать, чтобы добавить в наш сервис эту полезную опцию.
Публикую перевод нашего статьи из Medium с небольшими дополнениями от себя.
В нем содержатся результаты «расследования» и рассказ о том, как была решена проблема.
Осматриваем матчасть
В классической модели push-уведомления делают мессенджеры уязвимыми для атак MITM (Man-in-the-middle).Например, в Google, Microsoft и старой версии iMessage приложение отправляет ключи шифрования на серверы Apple — на сервере происходит аутентификация пользователей и расшифровка заголовка сообщения (или его содержимого).
В результате появляется шанс прочитать переписку, получив доступ к серверу push-уведомлений.
Это означает, что любое шифрование переписки бесполезно: push-уведомления все равно оставят возможность быть прочитанными третьими лицами.
Авторы статьи рассмотрели эту возможность более подробно.
«Шифровать правильно» на Xaker.ru, посвященный методам шифрования сообщений.
Если вы считаете, что серверы Apple и Google на 100% защищены от утечки пользовательских ключей шифрования, учтите тот факт, что их сотрудники имеют к ним доступ.
А сотрудники - это люди.
Несмотря на все уязвимости push-уведомлений, их используют многие «защищенные» мессенджеры, в том числе Signal и Telegram. В противном случае пользователям придется «вручную» отслеживать новые сообщения, постоянно заходя в приложение.
Что очень неудобно, и конкурирующие мессенджеры получат преимущество.
Паранойя и здравый смысл
В нашем проекте мы вплотную занялись этим вопросом несколько месяцев назад. Нам нужно было добавить опцию push-уведомлений, чтобы быть конкурентоспособными.Но при этом не открывайте дыру в безопасности, ведь любая утечка данных подорвет доверие к проекту.
Однако у нас уже есть важное преимущество: наш мессенджер децентрализован (данные хранятся в блокчейне), и сотрудники не имеют доступа к аккаунтам.
Ключи шифрования есть только у пользователей, а в блокчейне доступны публичные ключи собеседников для защиты от MITM-атак.
В первой версии push-уведомлений мы решили максимально перестраховаться и вообще не передавать текст сообщения.
Push-сервис получил от узла не текст сообщения, а только сигнал о факте его получения.
Поэтому пользователь увидел уведомление «Пришло новое сообщение».
Прочитать его можно было только в мессенджере.
После этого мы узнали, что последняя версия уведомлений Apple имеет новые функции безопасности.
Они выпущенный UNNotificationServiceExtension, позволяющий разработчикам отправлять полностью зашифрованные данные уведомлений через APNS. Затем приложение на устройстве конечного пользователя выполняет расшифровку (или загружает дополнительные данные) и отображает уведомление.
Мы взяли его за основу для второй версии push-уведомлений.
Сейчас мы разработали вторую версию push-уведомлений для iOS, которая позволяет отображать текст сообщения без ущерба для безопасности.
В новой концепции логика выглядит так:
- Служба push отправляет push-уведомление с номером транзакции (зашифрованное сообщение может быть очень большим, а размер уведомлений очень ограничен).
- Когда устройство получает уведомление, оно запускает наше NotificationServiceExtension — микроприложение, которое запрашивает транзакцию у узла по id, расшифровывает ее с помощью сохраненной кодовой фразы и отправляет в систему новое уведомление.
Парольная фраза хранится в безопасном хранилище.
- Система отображает уведомление с расшифрованным сообщением или переводом.
- Ключи никуда не деваются, как и простое текстовое сообщение.
Служба push не имеет возможности расшифровать сообщение.
Мы приняли эту версию как рабочую и внедрили ее в последнем обновлении приложения для iOS. Интересующиеся технической стороной могут просмотреть исходный код: github.com/Adamant-im/adamant-notificationService .
Теги: #push-уведомления #push-уведомления #push-сервис #блокчейн #мессенджер #безопасность #анонимность #безопасность #Децентрализованные сети #информационная безопасность #мессенджеры #разработка iOS #Аналитика мобильных приложений
-
Seo Оптимизация Необходима Для Бизнеса
19 Oct, 24 -
Спектр
19 Oct, 24 -
Ecir 2013 - В Москве
19 Oct, 24 -
Новый Язык Программирования — Relax
19 Oct, 24 -
Lift: Простой Пример Загрузки Данных Ajax
19 Oct, 24 -
История Одного Тестового Задания
19 Oct, 24