1024-битный алгоритм Диффи-Хеллмана в C #

Итак, я работаю над проектом по взаимодействию клиента C # с существующей серверной технологией. Одно из требований - обмен ключами с использованием Диффи-Хеллмана.

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

Следующее используется на стороне сервера в C ++ с OpenSSL. В настоящее время я использую тот же код в собственной DLL, вызываемой через P / Invoke, и он тоже работает. Я бы предпочел по возможности исключить зависимость от встроенной библиотеки DLL.

char publicKey[128];
char P[128]; //this is set to a static 128-byte value, omitting for brevity
unsigned long G = 2;

DH* dh = DH_new();
dh->p = BN_new();
dh->g = BN_new();

BN_set_word(dh->g, G);
BN_bin2bn(P, 128, dh->p);
if(DH_generate_key(dh))
{
   BN_bn2bin(dh->pub_key, publicKey);
}

Это генерирует 1024-битный открытый ключ.

Я пробовал использовать классы DH в BouncyCastle, но по какой-то причине я не могу заставить его дать мне 1024-битный ключ, вместо этого он хочет дать мне 960-битный ключ. Возможно, потому что я действительно не знаю, что делаю. Я не смог найти сколько-нибудь реальных объяснений того, как предполагается использовать классы.

Можно ли использовать классы DH BouncyCastle для работы так же, как код OpenSSL DH, опубликованный выше? Если нет, то есть ли другая реализация C #, которая будет работать лучше?

5
задан Gerald 28 February 2012 в 14:39
поделиться