Сгенерировать секретный ключ из AndroidKeyStore

#android #encryption #android-keystore #secret-key

#Android #шифрование #android-хранилище ключей #секретный ключ

Вопрос:

Согласно этому образцу, я пытаюсь получить SecretKey из AndroidKeyStore :

 KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
SecretKey secretKey = (SecretKey) keyStore.getKey(KEY_NAME, null);
  

Но я получаю это исключение:

 android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to javax.crypto.SecretKey
  

Вот как я создал ключ:

 KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context)
                    .setAlias(KEY_NAME)
                    .setSubject(new X500Principal("CN="   KEY_NAME))
                    .setSerialNumber(BigInteger.valueOf(1337))
                    .setStartDate(START_TIME)
                    .setEndDate(END_TIME)
                    .build();
KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");   
kpGenerator.initialize(spec);
kpGenerator.generateKeyPair();
  

Так есть ли какой-нибудь способ сгенерировать SecretKey из AndroidKeyStore ?

Комментарии:

1. SecretKey используется для симметричных ключей, а не для асимметричных ключей.

2. @LukePark как я могу сгенерировать симметричный ключ, используя AndroidKeyStore ?

Ответ №1:

Начиная с Android 6.0, вы можете генерировать ключи AES с помощью AndroidKeyStore:

 KeyGenerator kg = KeyGenerator.getInstance("AES", "AndroidKeyStore");
kg.init(keySpec);
SecretKey key = kg.generateKey();
  

Для получения более подробной информации см. Сообщение в блоге о редизайне хранилища ключей в Android M (автор Николай Еленков).