Можно ли поставить собственный ключ в AndroidKeyStore? - PullRequest
0 голосов
/ 08 октября 2018

Я думаю об этом вопросе:

Можно ли поставить свой собственный ключ на AndroidKeyStore и использовать его для других операций (подписания некоторых текстов / документов)?

Я сгенерировалPostQuantum ключей (priv / pub) для алгоритма подписи SPHINCS, который включает в себя библиотеку BouncyCastle.

Есть ли способы, как инициализировать мой план?

Спасибо заВаши подсказки:)

Вот пример кода, как я генерирую ключи priv / pub с помощью BouncyCastle SPHINCS :

SPHINCS256KeyPairGenerator generator = new SPHINCS256KeyPairGenerator();
generator.init(new SPHINCS256KeyGenerationParameters(new RiggedRandom(), new SHA3Digest(256)));
AsymmetricCipherKeyPair kp = generator.generateKeyPair();

SPHINCSPrivateKeyParameters priv = (SPHINCSPrivateKeyParameters)kp.getPrivate();
SPHINCSPublicKeyParameters pub = (SPHINCSPublicKeyParameters)kp.getPublic();

1 Ответ

0 голосов
/ 08 октября 2018

Попробуйте что-то вроде этого (пример для Andorid M (6.0) +)

    @TargetApi(Build.VERSION_CODES.M)
        private void initGeneratorWithKeyGenParameterSpec() {
            try {
                KeyPairGenerator generator = KeyPairGenerator.getInstance("ALGORITHM", "AndroidKeyStore");
                String alias = "myAlias";
                Calendar startDate = Calendar.getInstance();
                Calendar endDate = Calendar.getInstance();
                endDate.add(Calendar.YEAR, 20);
                KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(
                        alias, KeyProperties.PURPOSE_ENCRYPT|KeyProperties.PURPOSE_DECRYPT)
                        .setCertificateSubject(new X500Principal("CN=" + alias))
                        .setCertificateSerialNumber(BigInteger.valueOf(1337))
                        .setCertificateNotBefore(startDate.getTime())
                        .setCertificateNotAfter(endDate.getTime())
                        .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
                        .setDigests(KeyProperties.DIGEST_SHA256)
                        .setKeySize(2048)
                        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_PKCS1);
                generator.initialize(builder.build());
                generator.generateKeyPair();
            } catch (Exception e) {
                mLogger.logException(Logger.Level.ERROR, Logger.Category.ENCRYPTION, "KeyStoreWrapper", "initGeneratorWithKeyGenParameterSpec()", e);
            }
...