iOS Ключ эллиптической кривой, используемый для расшифровки шифрования с Java Backend - PullRequest
0 голосов
/ 27 февраля 2020

Я являюсь iOS разработчиком и пытаюсь использовать Secure Enclave для генерации ключа E CC. Я могу сделать это успешно, используя пример приложения здесь: https://github.com/agens-no/EllipticCurveKeyPair. Когда я использую этот ключ вместе с реализацией Python для шифрования и дешифрования, упомянутых здесь: https://gist.github.com/dschuetz/2ff54d738041fc888613f925a7708a06, это работает.

Проблема в том, что мне нужен код Java, чтобы сделать то же самое. Может ли кто-нибудь помочь мне достичь этого или указать мне код, который выполняет ту же работу, что и код Python.

На iOS стороне я делаю eciesEncryptionStandardX963SHA256AESGCM шифрование и дешифрование логи c.

Я знаю, что должен был попытаться решить это сам. Но я инженер iOS и пробую свои силы на Java бэкэнде. Было бы очень полезно, если бы кто-нибудь смог мне помочь.


Создал пример кода Java на основе ответа. Ссылка на код: https://gist.github.com/balrajOla/fa2f6030538b20a396c086377a6f7114

Используя образец iOS Приложение, представленное здесь: https://github.com/agens-no/EllipticCurveKeyPair. Я сгенерировал E CC ключи. Затем передайте ключ publi c к коду Java, чтобы создать зашифрованное сообщение. Эти зашифрованные сообщения передаются обратно в пример приложения iOS, упомянутого выше, для расшифровки с использованием eciesEncryptionStandardX963SHA256AESGCM al go. Но мы получаем ошибку упомянутого ниже снимка. enter image description here

1 Ответ

0 голосов
/ 09 марта 2020

В Java у вас есть два интересных класса - ECGenParameterSpe c и KeyPairGenerator . ECGenParameterSpe c определяет параметры для генерации параметров домена эллипти c, а KeyPairGenerator используется для генерации пар публичных c и личных ключей.

В книге Нокилая Еленкова Android Security Internals есть хороший пример кода их комбинации для генерации пары ключей.

KeyPairGenerator kpg = KeyPairGenerator.getInstance("ECDH");
ECGenParameterSpec ecParamSpec = new ECGenParameterSpec("secp256r1");
kpg.initialize(ecParamSpec);
KeyPair keyPair = kpg.generateKeyPair();

Это объяснение, приведенное относительно предыдущего кода

Существует два способа инициализации KeyPairGenerator: указав желаемый размер ключа и указав параметры алгоритма c. В обоих случаях вы можете при желании передать экземпляр SecureRandom, который будет использоваться для генерации ключа. Если указан только размер ключа, при генерации ключа будут использоваться параметры по умолчанию (если есть). Чтобы указать дополнительные параметры, необходимо создать и настроить экземпляр AlgorithmParameterSpe c, соответствующий используемому асимметричному алгоритму, и передать его методу initialize (), как показано в примере 5-15. В этом примере ECGenParameterSpec, инициализированный в строка 2 , представляет собой AlgorithmParameterSpe c, который позволяет указать имя кривой, используемое при генерации ключей криптографии Ellipti c Curve (E C). После того, как он передан методу initialize () в строка 3 , последующий вызов generateKeyPair () в строка 4 будет использовать указанную кривую (secp256r1) для генерации пары ключей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...