2013-05-25 5 views
1

У меня есть секретный ключ, который используется как сервером, так и моим приложением. Этот ключ используется для уверенности, что запросы поступают из приложения. Сервер не зарегистрировал пользователей, но с этим приложением пользователи могут отправлять запросы.Защитите симметричный ключ в приложении

Я не могу найти другого решения ... Я думал об асимметричных ключах, Диффи-Хеллман ... но ничто не решает мою проблему, кроме симметричного ключа ... Но проблема в том, как сохранить этот ключ в моей java код и защитить его?

+1

Это поможет: http://stackoverflow.com/questions/2050292/how-to-securely-store-a-privatekey-in-code –

+0

Да, но это не решает проблему ... Я думаю, что единственная путь - запутать хакера, который пытается получить это значение ... – Massimo

+0

Вы сказали, что думаете об асимметричных ключах. Я думаю, что это в значительной степени безопаснее, чем попытка сохранить закрытый ключ в вашем коде. –

ответ

1

Невозможно сделать это, не получая общий секрет (например: пароль) от внешнего источника (например: пользователь, SMS и т. Д.).

У каждого есть доступ ко всей вашей программе. Если внешняя информация не используется, всегда будет возможно, чтобы кто-то отправил поддельный пакет, который выглядит так, как будто он пришел из вашего приложения.

Обычно вы можете отправить одну строку подтверждения пользователю по электронной почте или SMS, которые затем могут войти в приложение. Если строка действительна только в течение короткого промежутка времени (например, 5 минут), то она не должна быть слишком большой.

Чтобы создать временный ключ из этой строки, вы используете его. Затем вы используете этот временный ключ, чтобы доказать серверу, кем вы являетесь, кем вы являетесь, и получить долгосрочный ключ от сервера и сохранить его в надежном месте.

+0

Я нашел класс ObfuscatedString, он генерирует строку с массивом longs. Используя этот класс для обфускации строки и proguard для приведения в порядок кода, он может работать, о чем вы думаете? Создание строки производится с помощью кода, подобного следующему: String key = new ObfuscatedString (новый long [] {0x2233850333551220L, 0xFBAD239EF4CB2711L, 0xA21102AB357EF211L}). ToString(); Я попытался изменить код разработчика и не могу найти длинные числа, переданные конструктору ObfuscatedString. – Massimo

+0

Все зависит от того, насколько мотивирован кто-то, чтобы получить доступ к обфускации информации. Чем популярнее ваше приложение, тем более мотивированным может быть кто-то, кто может определить ваш секретный ключ. Один из подходов - перепроектировать приложение и найти, где код отправляет данные. Это очень легко сделать, поскольку Proguard не делает (и не может) обфускации вызовов на android.jar. Затем они будут работать назад, чтобы определить, как был сформирован запрос. Во многих случаях они, вероятно, даже не заметили бы, что ваш ключ был запутан. – abh

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

  • Нет связанных вопросов^_^