Скрытие ключа шифрования в приложении Android - PullRequest
13 голосов
/ 18 октября 2011

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

Выполнитьу вас есть предложения, чтобы сделать процесс сложнее?

Ответы [ 5 ]

6 голосов
/ 19 октября 2011

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

См. Это: https://www.excelsior -usa.com / articles / java-obfuscators.html # examples

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

3 голосов
/ 21 октября 2011

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

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

2 голосов
/ 18 октября 2011

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

1 голос
/ 19 октября 2011

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

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

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

0 голосов
/ 19 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...