Komunikator C# (TCP/IP, sockets) i 3DES

0

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ę:

  1. 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.

0

Hasło na dziś: Szyfrowanie asynchroniczne

Nie doczytałem do końca.

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ą,

Wiesz że są już gotowe biblioteki do tego w System.Security?

a też trzeba uważać by nie napisać wirusa.

Czyli że co, piszesz sobie aplikację i okazuje się że przez pomyłkę napisałeś wirusa? :D

0
Olimp napisał(a):

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?

Są gotowe protokoły wymiany klucza, całkiem popularny jest protokół Diffiego-Hellmana. Ogólnie mam wrażenie, że wędrujesz myślami tam, gdzie informatycy byli 20 lat temu albo dawniej. Protokół TLS uwzględnia autentykacje tak serwera jak i klienta. Tylko musisz sobie postawić obok jakieś certificate authority.

Olimp napisał(a):

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ą

Dlatego kryptografię asymetryczną używa się do zestawienia połączenie - handshake'a. Potem używasz algosów symetrycznych, AES jest wystarczający do zdecydowanej większości użyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1