2012-02-28 9 views
5

Estoy trabajando en un proyecto para conectar un cliente C# con una tecnología de servidor existente. Uno de los requisitos es un intercambio de claves con Diffie-Hellman.1024 bits Diffie-Hellman en C#

Hemos conocido P y G públicas y necesito generar una clave pública de 1024 bits para enviar al servidor.

Lo siguiente se utiliza en el lado del servidor en C++ con OpenSSL. Actualmente estoy usando el mismo código en una DLL nativa llamada a través de P/Invoke, y también funciona. Preferiría eliminar la dependencia nativa de DLL si es posible.

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); 
} 

Esto genera una clave pública de 1024 bits.

He intentado utilizar las clases de DH en BouncyCastle, pero por alguna razón no puedo obtener una clave de 1024 bits, sino que quiere darme una clave de 960 bits. Posiblemente porque realmente no sé lo que estoy haciendo. No pude encontrar muchas explicaciones sobre cómo se supone que se deben usar las clases.

¿Es posible utilizar las clases BouncyCastle DH para que funcionen igual que el código OpenSSL DH publicado anteriormente? Si no, ¿hay otra implementación de C# que funcione mejor?

Respuesta

3

Aquí es un ejemplo de código de trabajo + artículo sobre CodeProject con una excelente calificación:

http://www.codeproject.com/Articles/24632/Shared-Key-Generation-using-Diffie-Hellman

+0

me encontré con que el artículo antes, pero no proporciona una manera de establecer el P y G Parámetros que sólo utiliza una primo generado aleatoriamente Sin embargo, simplemente miré nuevamente y parece que no sería demasiado difícil modificarlo para que funcione. Voy a darle una oportunidad. – Gerald

+0

Como resulta que el código en ese artículo era lo suficientemente simple como para ser capaz de entender el proceso de Diffie-Hellman, que es mucho más simple de lo que me di cuenta, y pude rodar el mío que funciona bien. Entonces, aceptaré la respuesta. Gracias. – Gerald

Cuestiones relacionadas