Как реализовать механизм доверия между двумя Android приложениями?
Всем привет! По задумке должны быть два разных приложения, которые будут общаться внутри локальной сети. Нужно реализовать какой-то механизм доверия, что бы приложения знали, что общаются именно друг с другом, а не с подставными копиями. Может кто сталкивался, как подобное реализовать? Может кто-то знает хорошие источники, где можно почитать про подобное, куда копать?
pfg21, что ничего не гарантирует.
апк можно разобрать и ключ переиспользовать.
AlekSt7, тут вопрос не про андроид приложения. А про доверие между двумя хостами в сети.
А главное, что нельзя проверить, что второй участник сетевого обмена работает хотя бы под андроидом.
Все можно подделать на компе.
Вы можете проверить, имея свой бакенд в сети, что это два авторизованных ваших пользователя, но никак, что они используют официальный клиент.
Олег, правильно ли я понял, что проверку на авторизованных пользователей можно сделать с помощью самоподписанных сертификатов? Возможно ли это сделать без сервера (только два приложения внутри локальной сети)?
нет. Не правильно. Алгоритмы доверия строятся на наличии пары ключей.
Есть публичный (для проверки того кто подписал). А есть секретный (им подписывают).
А если секретный ключ Вы отдаете вместе с приложением, то он скомпрометирован.
Вы можете создать свой удостоверяющий центр.
Тогда первая копия приложения генерит свои ключи. Просит их заверить. Получает обратно подписанный свой публичный ключ.
Вторая копия делает свою пару ключей.
В самом приложении зашит только публичный ключ ЦА (бакенда), чтобы можно было проверить подпись публичного ключа от другого участника беседы.
Но Вы с этим осторожнее. Разработка средств шифрования лицензируемый вид деятельности. https://www.consultant.ru/document/cons_doc_LAW_74...
Есть два стандартных способа:
1. VPN. Тут речь идет скорее не про два, а про несколько клиентов, которые доверяют друг-другу через сервер VPN (ну, на тот случай, если "два" просто некоторая условность).
2. Если все-таки "два" это два, то стандартных и наиболее безопасный способ - это SSL и обмен ключами между устройствами. Погугли как это реализовано у Matrix, там оба способа реализованы (хотя первый не VPN, но механизм аутентификации похож в чем то).
Как вариант.
Приложения по секретному алгоритму, завязанному на непостоянные и индивидуальные данные (от IP/МАС устройств до текущего времени времени. Дополнительно можно использовать вводимые пароли) генерируют ключи, по которым происходит опознавание свой-чужой.