2014-12-16 2 views
0

У меня есть платформа для создания локальных приложений реального времени под названием Bashoto, и я собираюсь создать клиент для Android.Защита секретности третьего лица в Android

Приложения Bashoto имеют возможность пройти аутентификацию, которая выполняется путем генерации одноразового использования, заканчивающегося JSON Web Token (короткий код JWT) с токеном приложения и сигнатурой, чтобы убедиться, что токен действителен. Каждое соединение будет иметь уникальный JWT, который создается путем подписания контента с помощью Secret.

В веб-среде это означает, что клиентский сервер имеет копию Секрет, подписывает токен и передает его клиентскому интерфейсу, который затем используется в запросе на сервер BashotoIO.

Проблема в мобильной среде, и в данном случае Android, заключается в том, что сохранение этого Секрет в коде приложения является потенциальным вектором атаки, поскольку кто-то может проверить APK, чтобы найти его.

Каков наилучший способ по-настоящему сохранить секретный секрет в приложении для Android, сохраняя при этом интеграцию Bashoto простой и упрощенной?

Я хотел бы использование смотреть что-то как этот

Bashoto bashoto = Bashoto.fromAppKey("my-app-key"); 
bashoto.locate(); 
BashotoTopic topic = bashoto.topic("my-topic-name"); //token signing and connection happens here 
topic.send("Some message that only gets seen by nearby people"); 
+1

Существует простое правило. Если вы действительно хотите, чтобы это было секретно, не кладите его на устройство. Независимо от того, что вы делаете, ваш код должен быть в состоянии найти секрет, который означает, что его найдет и хакер. Единственное, что вы можете сделать, это замедлить их. – Simon

ответ

1

Это зависит от того, насколько безопасно вы хотите ключ быть. Вы можете обфускать свой код с помощью proguard http://responsiveandroid.com/2014/12/10/android-proguard-tutorial.html. Это все равно будет содержать строковый литерал, но будет сложнее пройти декомпиляцию, но не невозможно.

Если это недостаточно безопасно, вы не можете сохранить его в APK, вы должны хранить его на удаленном сервере. В идеале, сервер будет использовать SSL для обеспечения конфиденциальности трафика. Вы можете получить ключ, если у вас его нет, и надежно хранить его локально, используя хранилище андроидов https://developer.android.com/training/articles/keystore.html. Это означает, что пользователь не сможет декомпилировать ваше приложение и найти ключ.

Если вы беспокоитесь о сосании SSL, вам необходимо перейти на SSL-соединение, которое проверит подлинность любого сервера. https://developer.android.com/training/articles/security-ssl.html#Pinning

+0

Это фактически соответствует структуре проверки подлинности в Интернете, которую я использую довольно хорошо. 1) Держите только приложение AppKey на Android-клиенте и убедитесь, что кто-то может получить доступ к этому ключу, если он попытается. 2) Приложения, использующие аутентификацию, ДОЛЖНЫ получить JWT со своего сервера, который будет передан на сервер BashotoIO. – agentargo

Смежные вопросы