как безопасно хранить ключи шифрования в android?

Я хочу знать, как безопасно хранить ключ шифрования в Android? Каков наилучший сценарий для защиты шифрования и секретных ключей?

Ответ 1

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

Android Keystore предназначен для создания и защиты ваших ключей. Но он недоступен для уровня API ниже 18, и он имеет некоторые ограничения до уровня API 23.

Вам понадобится случайный симметричный ключ шифрования, например AES. Ключ AES используется для шифрования и дешифрования данных. Я собираюсь обобщить ваши варианты для безопасного хранения и хранения в зависимости от уровня API Android.

  • Уровень API <18: Android Keystore нет. Запросить пароль для пользователя, получить ключ шифрования из пароля. Недостатком является то, что вам нужно запросить пароль при запуске приложения. Ключ шифрования не сохраняется в устройстве. Он рассчитывается каждый раз, когда приложение запускается с использованием пароля

  • API Level> = 18 <23: Android Keystore доступен без поддержки AES. Создайте случайный ключ AES с использованием поставщика криптографии по умолчанию (не используя AndroidKeystore). Создайте пару ключей RSA в Android Keystore и закрепите ключ AES с помощью открытого ключа RSA. Храните зашифрованный ключ AES в Android SharedPreferences. Когда приложение запускается, расшифруйте ключ AES с помощью закрытого ключа RSA

  • API Level> = 23: Android Keystore доступен с поддержкой AES. Создайте случайный ключ AES, используя в Keystore Android. Вы можете использовать его напрямую.

Для шифрования можно использовать алгоритм AES/CBC/PKCS7Padding. Для шифрования данных требуется также случайный вектор инициализации (IV), но он может быть общедоступным.

Альтернативы:

  • Уровень API> 14: Key Key Key: KeyChain - это системное хранилище учетных данных. Вы можете установить сертификаты с закрытыми ключами, которые могут использоваться приложениями. Используйте предварительно установленный ключ для шифрования/расшифровки вашего ключа AES, как показано во втором случае выше.

  • Внешний токен: защищенные ключи не хранятся в устройстве. Вы можете использовать внешний токен, содержащий пару частного/открытого ключа, которая позволяет шифровать ключ AES. Токен можно подключить с помощью bluetooth или NFC

Ответ 2

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

Ответ 3

Нет никакого способа безопасно сохранить ваши личные ключи api в код. Но вы можете использовать NDK для безопасного сохранения секретных ключей. Это не тривиально получить ключ от NDK. Ключ Secue с примером NDK