2013-12-19 3 views
1

Я работаю над приложением Android, связанным с безопасным обменом данными. Я использую несколько постоянных значений в своем приложении и сохраняю их в классе constant.java. Я не хочу, чтобы эти ценности были настроены по-разному, но, несмотря на то, что я использую ProGuard для Android, для экспертов легко изменить код. Эти константы очень надежны. Я могу использовать файл свойств или любой файл в папке res, но этот подход совсем не защищен.Безопасное сохранение постоянных значений

Может ли кто-нибудь сказать мне, как действовать? Есть ли какой-либо формат файла, который я могу сохранить мои константы или предотвратить файл свойств с обратной инженерии. Есть ли какой-либо вариант, например, сохранить его в формате .py python и прочитать его с Android-кода?

ответ

3

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

  • Вычислить их с помощью некоторого алгоритма вместо того, чтобы хранить их буквально. Даже тривиальный алгоритм может увеличить время, необходимое для извлечения констант.
  • Распределите компоненты значений по всему коду.
  • Используйте собственный код. Как правило, сложнее перепроектировать, по крайней мере, если код и его API достаточно большие и сложные.
  • Возможно, посмотрите на криптографию белых ящиков, которая пытается сплести постоянные ключи в реализации криптографических алгоритмов таким образом, что постоянные ключи не могут быть извлечены. Это все еще область исследований и высококачественных коммерческих решений.

Вы можете получить некоторые идеи, которые вы можете применить себя от my presentation и от Scott Alexander-Bown's presentation в Droidcon в Лондоне.

Вы также можете использовать коммерческий обфускатор, такой как расширенная версия ProGuard, DexGuard, для упрощения кода для вас, с методами, такими как строковое шифрование и шифрование классов.

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

Похожие вопрос: Best Practice for storing private API keys in Android

(Я разработчик ProGuard и DexGuard)

+0

Возможно проектирование системы безопасности не хорошо. Даже с вашими советами, легко добавить строку в код (например: Log.v (TAG, secretValue)), где она в конечном счете используется и просто выполняет приложение, оно напечатает значение. Постоянная, хранящаяся в коде/ресурсах приложения, не может быть секретом. –

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