2012-02-28 14 views
5

Pracuję więc nad projektem do interfejsu klienta C# z istniejącą technologią serwera. Jednym z wymagań jest wymiana kluczy za pomocą Diffiego-Hellmana.1024-bitowy Diffie-Hellman w C#

Znamy publiczne P i G i potrzebuję wygenerować 1024-bitowy klucz publiczny do wysłania na serwer.

Następujące używane po stronie serwera w C++ z OpenSSL. Obecnie używam tego samego kodu w natywnej bibliotece DLL, wywoływanej przez P/Invoke, i działa również. Wolałbym, jeśli to możliwe, wyeliminować natywną zależność 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); 
} 

Generuje to 1024-bitowy klucz publiczny.

Próbowałem używać klas DH w BouncyCastle, ale z jakiegokolwiek powodu nie mogę uzyskać tego, aby dać mi 1024-bitowy klucz, zamiast tego chce mi dać 960 bitowy klucz. Być może dlatego, że tak naprawdę nie wiem, co robię. Nie mogłem znaleźć zbyt wielu informacji na temat tego, w jaki sposób zajęcia powinny być używane.

Czy można używać klas BouncyCastle DH do pracy tak samo, jak kod OpenSSL DH zamieszczony powyżej? Jeśli nie, czy istnieje inna implementacja C#, która działałaby lepiej?

Odpowiedz

3

Oto przykład kodu roboczego + artykuł na CodeProject z doskonałą ocena:

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

+0

Okazało się, że artykuł wcześniej, ale to nie świadczy sposób, aby ustawić P i G Parametry tylko używa losowo generowane prime. Jednak po prostu spojrzał ponownie i wygląda na to, że nie jest to zbyt trudne, aby zmodyfikować go do pracy. Spróbuję. – Gerald

+0

Jak się okazało, kod w tym artykule był na tyle prosty, że faktycznie mogłem zrozumieć proces Diffiego-Hellmana - co jest znacznie prostsze, niż sobie uświadomiłem - i mogłem przetasować swoje, co działa dobrze. Więc przyjmuję odpowiedź. Dzięki. – Gerald