golubevpavel
@golubevpavel
Генеральный директор @ Appodeal

Как установить действительно безопасное соединение между iOS app и XMPP сервером

Итак, идея заключается в том, чтобы установить действительно безопасное соединение между iOS app и XMPP сервером с целью предотвращения любых возможных спуфингов, снифингов, атак вида Man in the middle, Replay и других. После нескольких дней поисков я пришел к следующей модели. Пожалуйста, дайте знать, достаточно ли она безопасная или я что-то упустил или что-то можно улучшить.

Установка безопасного соединения с XMPP сервером

Соединение может быть установлено только с одним конкретным XMPP сервером, жестко зашитым в код приложения.
Доступ к серверу без шифрования запрещен, только SSL/TLS.
Соединение может быть установлено только в том случае, если SSL сертификат сервера считается валидным.
Для того, чтобы предотвратить MITM в случае скомпрометированности корневого CA сервера, используется SSL pinning, то есть публичный ключ сервера сразу же зашивается в код приложения.

OTR

Любая беседа внутри приложения ведется с использованием шифрования OTR версии 3.
Подлинность собеседника устанавливается при помощи SIGMA алгоритма, на котором базируется OTR, таким образом мы предотвращаем возможные MITM атаки. Верно?

TOR

Даже если оба OTR и SSL будут взломаны (разве это возможно в этой конфигурации?), клиент всегда соединяется с сервером только через TOR сеть, что позволяет ему маскировать свой оригинальный IP.

Нужно ли что-то добавить к этой конфигурации, чтобы считать ее совсем защищенной? Нужно ли SSL оборачивать еще в какой-то протокол на случай, если в SSL присутствуют backdoor? Во что?
  • Вопрос задан
  • 8191 просмотр
Пригласить эксперта
Ответы на вопрос 3
@mayorovp
Основная угроза безопасности — механизм автообновлений приложений в iOS и канал связи с AppStore. К сожалению, эта проблема неразрешима.
Ответ написан
@bebebe
С каким конкретно сервером вы хотите соединяться? С произвольным либо своим собственным?

Если со своим собственным, то вам все равно, что там будет за сертификат, хоть самоподписанный, даже CA не нужен, проверяете через pinning и все ОК.

Если соединяться с другими серверами (произвольными?), как вы будете мониторить, поменялся ли у них сертфикат или нет? Только после жалоб пользователей что все отвалилось, вы действительно удостоверитесь, что сертификат поменялся и начнете выпускать новую версию?

p.s. на самом деле вам еще (пробегала инфа где-то тут) предстоит пободаться с Apple в проталкивании приложения в AppStore. Там какие-то жуткие ограничения на использование криптографии.
Ответ написан
@mayorovp
Тут мне в голову пришла мысль — почему бы не использовать i2p вместо tor? В общем-то, он решает все поставленные вами задачи. Разве что второй уровень добавить на случай бэкдора.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы