RSA, SslStream — Обмен ключами

#c# #openssl #rsa #sslstream

#c# #openssl ( опенссл ) #rsa #sslstream #openssl

Вопрос:

я использую SslStream для связи клиента и сервера с использованием сертификатов OpenSSL.

И клиент, который я буду использовать, — это машина, у которой есть собственное программное обеспечение, которое должно использовать криптографию RSA.

Я создал сервер и клиент, просто для тестирования, используя свой компьютер в качестве клиента, а другой компьютер в качестве сервера, и я произвел простой обмен ключами, просто чтобы протестировать sslstream и криптографию de rsa между этими машинами.

Обе машины отправляют открытый ключ следующим образом:

 byte[] modulus = pubkey.Modulus;
sslStream.Write(modulus, 0, modulus.Length);
sslStream.Flush();
  

И обе машины получают ключ и создают вот так:

  byte[] exponent = {1, 0, 1};
 byte[] modulus = new byte[256];
 sslStream.Read(modulus, 0, modulus.Length);

 clientPublicKey.D = null;
 clientPublicKey.DP = null;
 clientPublicKey.DQ = null;
 clientPublicKey.Exponent = exponent;
 clientPublicKey.InverseQ = null;
 clientPublicKey.Modulus = modulus;
 clientPublicKey.P = null;
 clientPublicKey.Q = null;
  

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

Есть ли другой способ обмена ключами? Потому что я уверен, что исходная машина использует другой способ обмена этими ключами с моим сервером.

Комментарии:

1. Что вы подразумеваете под «… обмен ключами происходит по-другому»? При каждом запуске протокола используются разные значения для случайного клиента (одноразовый номер) и случайного сервера (одноразовый номер). Это встроено в протокол. Вы не должны иметь возможность дублировать значения при выполнении.

2. способ, которым я отправляю с 2 обычными машинами, использует sslstream, просто используя модуль, но я заметил, что исходная машина работает не так