2012-02-28 2 views
5

Je travaille donc sur un projet d'interface entre un client C# et une technologie de serveur existante. L'une des exigences est un échange de clés utilisant Diffie-Hellman.Diffie-Hellman 1024 bits en C#

Nous avons connu P et G publics et j'ai besoin de générer une clé publique de 1024 bits pour envoyer au serveur.

Ce qui suit est utilisé côté serveur en C++ avec OpenSSL. Actuellement, j'utilise le même code dans une DLL native appelée via P/Invoke, et cela fonctionne aussi. Je préférerais éliminer la dépendance de la DLL native si possible.

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

Ceci génère une clé publique de 1 024 bits.

J'ai essayé d'utiliser les classes DH dans BouncyCastle, mais pour une raison quelconque, je ne peux pas obtenir une clé de 1024 bits, mais plutôt une clé de 960 bits. Peut-être parce que je ne sais pas vraiment ce que je fais. Je ne pouvais pas trouver beaucoup d'explications sur la façon dont les classes sont censées être utilisées.

Est-il possible d'utiliser les classes BouncyCastle DH pour fonctionner de la même manière que le code OpenSSL DH affiché ci-dessus? Sinon, y a-t-il une autre implémentation de C# qui fonctionnerait mieux?

Répondre

3

Voici un exemple de code de travail + article sur CodeProject avec une excellente note:

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

+0

J'ai trouvé cet article avant, mais il ne fournit pas un moyen de régler la P et G paramètres qu'il utilise seulement Prime générée aléatoirement. Cependant, j'ai juste regardé à nouveau et il semble que ce ne soit pas trop difficile de le modifier pour fonctionner. Je vais essayer. – Gerald

+0

Il s'est avéré que le code de cet article était suffisamment simple pour que je puisse comprendre le processus de Diffie-Hellman - ce qui est beaucoup plus simple que je ne le pensais - et j'ai pu rouler le mien. Donc, je vais accepter la réponse. Merci. – Gerald

Questions connexes