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?
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
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