Можно ли узнать открытый ключ RSA, пока вы знаете только закрытый ключ - PullRequest
0 голосов
/ 10 ноября 2019

Я пытаюсь реализовать Diffie Hellman Elliptic Curve для службы моего мобильного приложения. Как последний этап моей реализации мне нужно зашифровать публичный ключ ECDH с помощью RSA. Но так как мы можем только шифровать с помощью publicKey RSA и расшифровывать с помощью privateKey, я думаю, что я должен дать privateKey клиентам и оставить publicKey на обслуживании, я не очень озадачен тем, можно ли выставлять закрытый ключ или нет. Можно ли извлечь publicKey из privateKey?

return JsonConvert.SerializeObject(new
        {
            responseVal = ResponseVal,
            responseText = ResponseText,
            ServerECDHPublicKey = serverPublicKey,
            ServerECDHPublicKey_AES = Security.EncryptAES(null, serverPublicKey, aes),
            AESKey_RSA = Security.EncryptRSA(Encoding.UTF8.GetString(aes.Key))
        });

1 Ответ

0 голосов
/ 10 ноября 2019

В комментариях есть несколько ответов. Поэтому просто публикуя общую идею в качестве ответа.

Я пытаюсь реализовать эллиптическую кривую Диффи-Хеллмана для службы моего мобильного приложения.

Хорошо. Таким образом, понимание заключается в том, что получение ключа находится на уровне приложения. Если HTTPS (TLS) используется, как упомянуто Ry , он делает это для вас (так сказать, под капотом).

В качестве последнего этапа моей реализации янужно зашифровать публичный ключ ECDH с помощью RSA. Но так как мы можем только шифровать с помощью publicKey RSA и расшифровывать с помощью privateKey, я думаю, что я должен дать privateKey клиентам и оставить publicKey для обслуживания, я не очень озадачен, можно ли выставлять закрытый ключ или нет.

Опять же, как упомянуто Ry , вам действительно нужно «подписать» эфемерный открытый ключ. Таким образом, вы сохраняете закрытый ключ при себе (который также упоминается в видео-ссылке 1018 *, которую вы разместили в комментариях) и делитесь открытым ключом с клиентом - согласно проекту.

Можно ли извлечь publicKey из privateKey?

На самом деле нет . Хотя общих параметров немного, открытый и закрытый ключи называются так, потому что они в целом имеют уникальные параметры. Например, в случае RSA открытый ключ состоит из «открытого» показателя и модуля, а закрытый ключ состоит из «частного» показателя и показателя модуля. Таким образом, хотя можно «угадать» открытый показатель (или просто извлечь его из сертификата сервера во время рукопожатия ssl), строго говоря, невозможно извлечь его из закрытого ключа.

Обновление: вы можетеТакже рассмотрите возможность использования JWE (JSON-Web-Encryption) в сочетании с JWS (JSON-Web-Signature) для этой цели. Это в значительной степени делает то, что вы хотели сделать.

С уважением,

Равиндра

...