Witam. Tworzę komunikator w C# (TCP/IP, sockets) i chcę by wysyłane wiadomości były szyfrowane. Komunikacja odbywa się pomiędzy serwerem a klientami. Mam taką koncepcję:
- Pierwszy użytkownik, który uruchomił komunikator, generuje klucz, zostaje on zaszyfrowany w 3DES (TripleDES).
1.2 Drugi użytkownik zaraz po połączeniu z serwerem otrzymuje taki klucz i zostaje on odszyfrowany.
1.3 Oba użytkownicy posiadają klucze i mogą się ze sobą komunikować.
I teraz pytania:
2.1 Jak zrobić by nikt nie był w stanie przechwycić klucza który wędruje najpierw od pierwszego klienta do serwera a następnie do drugiego klienta? Program kliencki będzie musiał mieć przypisany jakiś klucz by zaszyfrować wygenerowany klucz. Przykładowo:
a) program kliencki losuje ciąg znaków ZsATY6,
b) program kliencki ma przypisane na stałe klucz by zaszyfrować ten ciąg znaków,
c) po zaszyfrowaniu klucza do komunikacji, klucz jest wysyłany
d) użytkownik odbiera ten klucz i za pomocą klucza przypisanego na stałe odszyfrowuje i jest możliwa komunikacja.
2.2 Czy jest jakaś inna bezpieczniejsza koncepcja?
2.3 Myślałem o logowaniu do programów klienckich poprzez hasło zapisane za pomocą MD5.
2.4 Jak długo trwa odszyfrowanie poprzez brutal-attack zaszyfrowanego klucza?
Wiem, że to trochę nie profesjonalne, ale dumam jak to zrobić w miarę bezpiecznie. Z szyfrowaniem asymetrycznym (klucz prywatny i publiczny) miałem trochę problemów. Z msdn linie kodu które "wkleiłem", potrzebują sporej mocy obliczeniową, a też trzeba uważać by nie napisać wirusa. Dzięki wielkie za odpowiedzi.