Я хочу знать, как безопасно хранить ключ шифрования в 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
Ответ 4
Вы можете использовать систему Android Keystore для хранения и получения конфиденциальной информации. Прочтите эту 5-минутную статью, чтобы понять, как она работает. Использование системы Keystore для хранения и получения конфиденциальной информации