Подтвердить что ты не робот

Скрытие ключа шифрования в приложении для Android

Я хочу скрыть некоторые данные, введенные пользователем в пользовательском телефоне, зашифрованном. Насколько я знаю, я могу шифровать/дешифровать данные с использованием значения ключа/семени, но если я скрою значение ключа в коде, я знаю, что его можно каким-то образом найти (например, декомпилировать код Java).

Есть ли у вас какие-либо предложения по усложнению процесса?

4b9b3361

Ответ 1

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

Смотрите это: https://www.excelsior-usa.com/articles/java-obfuscators.html#examples

Лучшим вариантом будет требование, чтобы ваши пользователи указывали PIN-код или пароль и использовали его в качестве ключа шифрования. Таким образом, если устройство потеряно или украдено, ключ по-прежнему безопасен, а также не позволяет кому-то декомпилировать ваше приложение и получать ключ шифрования для всех экземпляров вашего приложения.

Ответ 2

Одной из новых функций Ice Cream Sandwich (Android 4.0) является keychain API. На странице "Основные возможности платформы" (выделено мной):

Android 4.0 упрощает администрирование приложений для аутентификации и безопасные сеансы. Новый API-интерфейс Keychain и базовый шифрованный хранилище позволяет приложениям хранить и извлекать секретные ключи и их соответствующих цепочек сертификатов. Любое приложение может использовать брелок API для надежной установки и хранения сертификатов пользователей и центров сертификации.

Ответ 3

Если вы делаете это для данных имени пользователя/пароля, вы должны проверить выполнение Authenticator.

Ответ 4

Так как у android нет защищенного хранилища (по крайней мере, начиная с версии 2.2), вам придется писать свои собственные.

Единственный способ сделать это действительно безопасно - это зашифровать ключ, полученный из пароля, предоставленного пользователем (путь к нему - PBKDF2/RFc2898). Crypto является настолько же безопасным, как ваш ключ, и если вы сохраните его на телефоне в любом случае, тогда кто-то сможет его найти и использовать. Это позволяет вам хранить ключ от пользователя без фактического запоминания большого ключа AES.

Могут быть библиотеки, которые делают это для android. Я написал один для Windows-телефона, который можно найти здесь, если вы хотите получить какую-то основу для того, как это сделать.

Ответ 5

Если шифрование/дешифрование происходит на телефоне, определенный хакер сможет взломать его. Вы можете сделать жизнь более сложной, используя obfustication, или (если это подходит для вашего приложения), добавив ввод пользователя в код шифрования/дешифрования.

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