В настоящее время я работаю над андроидным приложением, основанным на архитектуре клиент-сервер. Для обеспечения безопасности данных я использую пару ключей Public-Private для шифрования и подписи данных. Я использую AndroidKeyStore для хранения пары ключей. Ниже приведен код для генерации пары ключей:AndroidKeyStore уничтожен после изменения пароля устройства
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(
mContext)
.setAlias(mPrivateKeyAlias)
.setSubject(new X500Principal("CN=" + mPrivateKeyAlias))
.setSerialNumber(
BigInteger.valueOf(System.currentTimeMillis()))
.setStartDate(start.getTime())
.setEndDate(end.getTime()).setKeySize(2048).build();
KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance(
"RSA",
"AndroidKeyStore");
kpGenerator.initialize(spec);
// Key Pair will be saved in AndroidKeyStore
KeyPair pair = kpGenerator.generateKeyPair();
После выполнения этого кода, Keystore Сопутствующие файлы (CERT и PKEY файлов) будет генерироваться на «/ user_0/данные/разное//» хранилища ключей директории. Я шифрую конфиденциальные данные приложения, такие как auth-token, и сохраняю их в Shared Pref по соображениям безопасности.
Но теперь, когда пользователь меняет пароль или контакт устройства, файлы ключей хранятся, поскольку Masterkey, используемый для шифрования ключей, генерируется с использованием учетных данных устройства.
Теперь, чтобы исправить эту проблему, я попытался сохранить пару ключей Public-Private в ОЗУ и когда пароль будет изменен. Из onPasswordChanged (контекст контекста, Намерение намерения) метода DeviceAdminReceiver, я выполнение ниже кода:
KeyStore keyStore = KeyStore
.getInstance("AndroidKeyStore");
keyStore.load(null);
keyStore.setKeyEntry(mPrivateKeyAlias, mPrivateKey.getPrivateKey(),
null, new Certificate[] { mPrivateKey.getCertificate() });
Но после этого кода только CERT файл будет создан в '/data/misc/keystore/user_0/'
каталоге и в то время как дешифрование с использованием секретного ключа, давая недействительные подписи ошибка.
Кроме того, я поделился своим открытым ключом с сервером, зашифрованными данными с помощью закрытого ключа, поэтому создание новой пары ключей не будет лучшим решением.
Итак, как я могу сохранить свою приватную пару ключей после смены пароля устройства? Если нет никакой работы, каково точное использование AndroidKeyStore? Где я могу его использовать?
Эй, я только что написал сообщение об этом материале http://systemdotrun.blogspot.co.uk/2015/02/android-security-forgetful-keystore.html – Dori
@ Ссылка Дори мертва, вот обновленная url http://doridori.github.io/android-security-the-forgetful-keystore/#sthash.dBNZUIC0.dpbs – Tom
Thx :) Я пишу краткий обзор к «KeyStore» в настоящее время также https: // github .com/doridori/Android-Security-Reference/BLOB/Master/API/keystore.md – Dori