🐦⬛️ Как передать секрет между приложениями безопасно
Помните про
мужика в середине?
Давайте представим, что нам нужно передать секрет от одного приложения к другому так, чтобы его никто не перехватил
💡 Например, пользователь поставил смешную фотку на аватарку в нашем приложении, и мы хотим по-секрету рассказать об этом всем дружеским приложениям так, чтобы об этом не узнали чужие
⚠️ Какие варианты точно не подходят:
🔵Intent — любое приложение может перехватить Intent, зарегистрировав intent-filter в Manifest
🔵Explicit Intent — это тот же самый Intent, но с явным указанием пакета/класса, которому он отправляется. На устройстве не может быть двух приложений с одинаковым пакетом. Но на устройстве могут быть хакнутые сборки с оригинальным пакетом, сливающие данные, которые пользователь скачал не из Play Market, а с пиратского сайта
🔵deeplink с query-параметрами — любое приложение может перехватить deeplink, зарегистрировав его в Manifest
🔵общий зашифрованный файл — любой алгоритм шифрования и ключи шифрования, зашитые в apk, вычисляются за пару минут. так что сколько не шифруй, все-равно зареверсинжинирят
🗝 Более интересные варианты:
🔵AccountManager и ContentProvider / BroadcastReceiver с protectionLevel = "signature" и KeyStore — позволяют безопасно общаться приложениям с одинаковой подписью
🔵App-links — подходят, если нужно передать какой-то секрет из браузера в мобильное приложение. Благодаря этой технологии домен сайта связан с подписью приложения
🔵Доверенное лицо — это любые сторонние сервисы-посредники, который мы почему-то решили доверять (свой бэкенд, гугл аккаунт и т.д.)
@dolgo_polo_dev