В настоящее время я работаю над приложением для Android, основанным на архитектуре клиент-сервер. В целях безопасности данных я использую пару ключей Public-Private для шифрования и подписи данных. Я использую 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();
После выполнения этого кода файлы, связанные с хранилищем ключей (файлы CERT и PKEY), будут созданы в каталоге «/data/misc/keystore/user_0/». Я шифрую конфиденциальные данные приложения, такие как auth-token, и сохраняю их в Shared Pref по соображениям безопасности.
Но теперь, когда пользователь меняет пароль или PIN-код устройства, файлы хранилища ключей удаляются, поскольку мастер-ключ, используемый для шифрования хранилища ключей, генерируется с использованием учетных данных устройства.
Теперь, чтобы решить эту проблему, я попытался сохранить пару открытых и закрытых ключей в ОЗУ и при смене пароля. Из метода onPasswordChanged (контекст, намерение) DeviceAdminReceiver я выполняю следующий код:
KeyStore keyStore = KeyStore
.getInstance("AndroidKeyStore");
keyStore.load(null);
keyStore.setKeyEntry(mPrivateKeyAlias, mPrivateKey.getPrivateKey(),
null, new Certificate[] { mPrivateKey.getCertificate() });
Но после этого кода в каталоге '/data/misc/keystore/user_0/'
создается только файл CERT, а при расшифровке с использованием закрытого ключа выдается неверная ошибка подписи.
Кроме того, я поделился своим открытым ключом с сервером, зашифровал данные с помощью закрытого ключа, поэтому создание новой пары ключей не было бы лучшим решением.
Итак, как я могу сохранить свою пару открытого закрытого ключа после смены пароля устройства? Если нет обходного пути, каково точное использование AndroidKeyStore? Где я могу его использовать?
KeyStore
также github.com/doridori/Android-Security-Reference/blob/master/api/ - person Dori   schedule 19.05.2016