Инициализация на Android KeyStore

Първо, аз съм нов в програмирането с android, въпреки че не съм нов в самото програмиране. Това, което по същество се опитвам да направя, е да запазя моите ключове за шифроване в Android Keystore. Изглежда има феноменална липса на такава информация в самия GOOGLE. Тъй като няма много достъпни инструкции по темата, предполагам, че това не е съвсем стандартно знание. Така че може ли някой да ми даде примерен код за

  1. Инициализирайте KeyStore (ще използва AES-256).
  2. Запазете няколко ключа в KeyStore (Моля, кажете ми максималния брой ключове, които мога да съхранявам в 1 KeyStore, тъй като не планирам да спестя нищо по-малко от 100).
  3. Вземете ключове от KeyStore.
  4. Ключове за редактиране
  5. Изтриване на ключове
  6. Изтриване на цялото KeyStore

Така че по същество код за всички основни функции на хранилище за ключове. Благодаря ви предварително за съдействието.


person Pier Telford Godeaux    schedule 02.03.2015    source източник
comment
Разгледайте това.   -  person Hemanth    schedule 02.03.2015


Отговори (2)


Ако зададете вашата minSdkVersion на 23 или по-висока, Android M улеснява генерирането и управлението на симетрични ключове от този месец.

Вижте 4-тия пример, посочен тук. https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.html

 KeyGenerator keyGenerator = KeyGenerator.getInstance(
         KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
 keyGenerator.init(
         new KeyGenParameterSpec.Builder("key2",
                 KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                 .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
                 .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                 .build());
 SecretKey key = keyGenerator.generateKey();

 Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
 cipher.init(Cipher.ENCRYPT_MODE, key);
 ...

 // The key can also be obtained from the Android Keystore any time as follows:
 KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
 keyStore.load(null);
 key = (SecretKey) keyStore.getKey("key2", null);

Този пример също беше полезен. https://github.com/googlesamples/android-ConfirmCredential/blob/master/Application/src/main/java/com/example/android/confirmcredential/MainActivity.java

person nburn42    schedule 24.08.2015
comment
И какво, ако искате да поддържате както по-стари (т.е. API 18), така и по-нови (API 23+) устройства, използващи едно и също решение? - person Diti; 11.08.2016
comment
Отдавна не съм пипал това, но доколкото си спомням нямаше добро решение. - person nburn42; 12.08.2016
comment
трябва да бъде keyGenerator.init вместо keyGenerator.initialize. Няма такъв метод за KeyGenerator като initialize(). initialize() методът е в KeyPairGenerator - person siulkilulki; 06.11.2016

Мисля, че Android Key Store не поддържа симетрични ключове като AES ключове. Моля, вижте тук. Между другото, защо приложението се нуждае от толкова много симетрични клавиши? Предлагам ви да съхраните един главен асиметричен ключ в хранилището на ключове и да използвате този ключ, за да шифровате много други симетрични ключове в приложението си. Надявам се скоро да разрешите проблема си.

person candy    schedule 26.06.2015
comment
Генерирането и съхранението на симетричен ключ в Android KeyStore се поддържа от Marshmallow (Android 6 / API ниво 23). Вижте тук за повече информация. - person Adil Hussain; 08.02.2016