Android: если ключ шифрования не является жестко запрограммированным, где сохранить ключ шифрования

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

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

Есть ли хорошее предложение для приложения Android для сохранения ключа?

Большое спасибо.


person rodent_la    schedule 23.11.2015    source источник
comment
Вот лучшее обсуждение: stackoverflow.com/questions/ 1925486/ И для ссылки: developers.google.com/ личность/smartlock-пароли/android/   -  person Madhukar Hebbar    schedule 23.11.2015


Ответы (2)


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

person Farooq Arshed    schedule 23.11.2015
comment
Спасибо за ваше предложение. - person rodent_la; 24.11.2015
comment
это плохое решение, которое все рассматривают. - person ; 14.06.2017
comment
размещение его только в таком файле не делает его безопасным. - person ; 14.06.2017

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

  • Уровень API ‹ 18: Android не поддерживает хранилище ключей для уровня API 17 и ниже. Для уровня API 17 и ниже рекомендуется, чтобы приложение безопасно использовало PBKDF2 (функции получения ключа на основе пароля), чтобы приложение генерировало ключ шифрования во время выполнения при входе в систему (с использованием пароля пользователя). Ключ шифрования не должен храниться на устройстве и должен динамически генерироваться всякий раз, когда это необходимо, с использованием пароля пользователя, поскольку на устройстве нет безопасного места для управления ключом.

    Уровень API >=18 ‹23: Android поддерживает хранилище ключей для уровня API 18 и выше. Однако для уровня API 22 и ниже поддержка шифрования AES недоступна. Рекомендуется, чтобы приложение сгенерировало случайный ключ AES, используя криптографический провайдер по умолчанию, и зашифровало ключ AES, используя открытый ключ RSA, сгенерированный с помощью хранилища ключей Android через keyPairGenerator. После того, как ключ шифрования зашифрован, его можно сохранить в частном хранилище данных приложения (например, SharedPreferences). При запуске приложения ключ AES можно расшифровать с помощью закрытого ключа RSA.

    Уровень API >=23: Android поддерживает хранилище ключей с поддержкой AES для уровня API 23 и выше. Мы можем напрямую сгенерировать случайный ключ AES с помощью API generateKey, и он автоматически управляется хранилищем ключей Android.

person Shiv Sahni    schedule 20.04.2020