Используйте KeyPairGeneratorSpec для уровня API Android <18?

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

Однако, когда я работал над кодом для этого, Android Studio предупредила, что для KeyPairGeneratorSpec.Builder(context) требуется уровень API 18, и я настроен как минимум на 14.: - (

Как хранить секретные данные в моем приложении для Android API с 14 по 17?

Ответ 1

AndroidKeyStore, который обычно поддерживается аппаратным обеспечением (но не обязательно), был официально представлен в уровне API 18, как вы можете видеть и описывается здесь: http://developer.android.com/training/articles/keystore.html

Николай Еленков написал небольшое приложение для тестирования AndroidKeyStore, которое вы можете найти здесь: https://github.com/nelenkov/android-keystore

Есть несколько трюков, которые вы можете использовать, чтобы получить работу от уровня API на уровне 17, если вы копаете в AOSP, но нет гарантии, что он будет работать на каждом устройстве, поэтому это будет бессмысленно. Вы определенно не будете работать над чем-либо до этого.

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

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

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

Android RSA Keypair Generation - Должен ли я использовать стандартный Java/Bouncy Castle/Spongy Castle/JSch/Other?

https://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html