Я работаю над приложением для iOS/Android, которое позволит безопасно и анонимно обмениваться мгновенными сообщениями. Я уверен, что безопасного и анонимного общения можно достигнуть только используя P2P архитектуру, в которой нет места серверу или центральным супер нодам. После недавнего
обсуждения на Хабре, я решил отказаться от использования XMPP в пользу Torchat. В настоящий момент я портирую
Torchat и
OTR на iOS и Android. Понаблюдать за прогрессом можно на
Github. Torchat и OTR прекрасно решают поставленные мной задачи — отсутствие центрального звена в системе, анонимность, маскировка отправителя и получателя, быстрота работа, простота использования, шифрование и аутентификация. Но только если оба пользователя находятся в сети во время общения. Ни Torchat, ни OTR не работает, если получатель сообщения находится в оффлайне.
Я предположил, что сообщения, отправляемые в оффлайн, должны буфферизироваться где-то внутри P2P сети другими участниками этой сети. Изучая возможные решения, я наткнулся на
Bitmessage. Этот протокол берет за основу протокол Bitcoin и позволяет обмениваться сообщениями без участия сервера. Каждый клиент в сети Bitmessage получает все сообщения и пытается их расшифровать своим приватным ключом. Проблемы масштабирования решаются путем разделения клиентов на связанные кластеры (streams), что позволяет держать в разумных пределах количество трафика и процессорного времени, "съедаемых" приложением.
Правильный ли протокол я выбрал для реализации отправки сообщений "в оффлайн" на iOS/Android с учетом P2P архитектуры? Возможно ли заранее просчитать, насколько большая будет сетевая и процессорная нагрузка? Будет ли приложение на iOS получать сообщения из Bitmessage в фоновом режиме?