Czy TCP jest bezpieczniejszy niż UDP?
Tak, ale musimy bardzo jasno określić, o czym mówimy, kiedy mówimy o „bezpieczeństwie” i nie uogólniać tego stwierdzenia na protokoły wyższych warstw.
Obecnie bezpieczeństwo jest często kojarzone z triadą CIA :
- C onfidentiality.
- I ntegrity.
- A dostępność.
Wersja 4 protokołu IP, który jest obecnie najczęściej używanym protokołem, to bardzo stara bestia, która została opracowana w latach 70-tych i 80-tych.
W tamtych czasach poufność nie była tak naprawdę tematem i naprawdę była celem miał na celu osiągnięcie integralności i dostępności (sieć Arpanet, przodek Internetu, który dał początek protokołowi IP, została zaprojektowana tak, aby zapewnić ciągłość usług nawet w przypadku wojny nuklearnej, a nie chronić dane w tranzycie).
W tej optyce dwa protokoły transportowe zostały opracowane w warstwie IP: TCP i UDP.
TCP wa to taki, który zapewnia zarówno właściwości integralności , jak i dostępności . Obejmuje to, co w tamtych czasach było zaawansowanymi technikami, takimi jak uzgadnianie trójetapowe, negocjowanie parametrów, obsługa różnych stanów połączenia, przejrzyste zmienianie kolejności pakietów, okna potwierdzeń i mechanizmy ponawiania. Daje to dobre gwarancje dla nadawcy, że dane, które wysłał, zostały odebrane w pełnej, nieuszkodzonej formie (tj. Bez brakujących, zmienionych lub nieuporządkowanych części).
Przypomnijmy, że ten protokół był celem katastrofa techniczna, a nie złośliwa ingerencja w przesyłane dane. Taki problem był wtedy całkowicie poza zakresem.
Wręcz przeciwnie, UDP został zaprojektowany jako szybki protokół. Nie ma żadnej z wyżej wymienionych cech, a zatem nie ma również ich narzutu. W szczególności, gdy nadawca wysyła niektóre dane za pomocą UDP, otrzymane dane mogą być niekompletne, nieuporządkowane lub w ogóle nie odebrane: sam protokół UDP nie zapewnia żadnego mechanizmu zapobiegającego temu ani wykrywającego ani po stronie nadawcy, ani odbiorcy. / p>
W ten sposób, koncentrując się na integralności danych i właściwościach bezpieczeństwa w zakresie dostępności, TCP jest rzeczywiście bezpieczniejszy niż UDP.
Czy protokół aplikacji oparty na TCP jest bezpieczniejszy niż protokół oparty na protokole TCP UDP?
Z pewnością nie.
Oznacza to tylko, że osoby opracowujące protokół aplikacji oparty na UDP będą miały więcej pracy, ponieważ być może będą musiały zaimplementować w swoich aplikacjach obejścia brakujących funkcji. w protokole UDP. Będą musieli wziąć pod uwagę, że wysłane dane mogą niekoniecznie zostać odebrane, że otrzymane dane mogą nie być we właściwej kolejności itp. To wszystko są dobrze znane problemy.
Na przykład OpenVPN, podczas gdy obsługuje TCP głównie ze względu na kompatybilność z restrykcyjnymi zaporami ogniowymi, działa domyślnie i najlepiej działa przez UDP. Przełączenie go na TCP jest możliwe, ale w żaden sposób nie zwiększy jego bezpieczeństwa, ponieważ różnica między protokołami dwóch warstw transportowych UDP i TCP jest w pełni obsługiwana przez sam OpenVPN. Przełączenie go na TCP spowoduje tylko dodanie narzutu TCP do protokołu OpenVPN, zmniejszając w ten sposób jego wydajność.
Czy TCP jest lepszy od UDP?
Nie, jest to całkowicie wybór projektu protokołu aplikacji .
UDP jest protokołem bardziej surowym. Przy prawidłowym i starannym użyciu może osiągnąć lepszą wydajność niż TCP za cenę trudniejszego rozwoju i utrzymania protokołu aplikacji.
- Gdy aplikacja nie jest na czasie wrażliwy, TCP narzuca się jako naturalny wybór, ponieważ nie ma potrzeby odkrywania koła na nowo.
- Gdy aplikacja jest wrażliwa na czas, musi nastąpić dyskusja, w której należy wybrać, wiedząc, że każda z nich będzie miała swoją wadę: potencjalny spadek wydajności w przypadku TCP w porównaniu z z pewnością bardziej złożona aplikacja z UDP.
Większość protokołów nie jest wrażliwa na czas i dlatego TCP jest najczęściej używanym protokołem. Rzeczywiście, kiedy ładujesz stronę internetową lub otrzymujesz wiadomość e-mail, nie ma różnicy, czy otrzymasz ją wcześniej czy później 10 milisekund.
Dwa klasyczne przykłady protokołów wykorzystujących UDP, oprócz wspomnianego wcześniej OpenVPN, to media streaming i DNS.
W przypadku strumieniowego przesyłania multimediów nie obchodzi Cię, czy brakuje jednej klatki wideo lub kilku milisekund wideo lub audio, o ile wideo lub dźwięk są odtwarzane płynnie i synchronicznie. W takim przypadku nie chcesz wywoływać powtarzających się przerw, ponieważ TCP wykrył brakujący pakiet i poprosił nadawcę o ponowne wysłanie zawartości ostatniego okna potwierdzenia.
W przypadku DNS żądania i odpowiedzi są zwykle bardzo krótkie i chcesz, aby proces rozpoznawania nazw był jak najszybszy (zwróć uwagę, że dłuższe i mniej wrażliwe na czas odpowiedzi, takie jak transfery stref DNS, zwykle nadal występują na TCP). Szybsze jest ponowne wysłanie żądania rozwiązania nazwy do serwera DNS przy bardzo niewielu przypadkach utraty żądania lub odpowiedzi niż przetwarzanie pełnoprawnego potrójnego uzgadniania dla każdego żądania.
A co z poufnością i złośliwe podsłuchiwanie / manipulowanie (i IPv6)?
Do tej pory zależało nam tylko na tym, w duchu starego protokołu IPv4, równowadze między szybkością transmisji a integralnością danych + dostępnością. Teraz, jeśli chcemy dodać do tego poufność, możemy to zrobić, ale będzie to musiało być zrobione w warstwie aplikacji, ponieważ, jak wspomniano wcześniej, IPv4 nie dotyczy kwestii poufności.
Nowoczesną, pełnoprawną implementację zabezpieczeń można zaimplementować w warstwie aplikacji i polegać na protokołach TCP lub UDP (lub obu) bez żadnego wpływu na bezpieczeństwo samego protokołu aplikacji (patrz przykład OpenVPN powyżej).
Jednak, jak stwierdzono na początku, IPv4 naprawdę pochodzi z innej epoki komputerowej. Otrzymał następcę o nazwie if IPv6, który natywnie obsługuje IPSec w warstwie IP, zapewniając w ten sposób bardziej nowoczesne usługi bezpieczeństwa poniżej protokołów transportowych, takich jak UDP i TCP.
Umożliwia to delegowanie szyfrowania danych w trakcie przesyłania z aplikacji do warstwy sieciowej i umożliwia zarówno protokołom UDP, jak i TCP zapewnienie dokładnie takich samych gwarancji bezpieczeństwa. Jednak w większości scenariuszy wzrost wydajności UDP będzie równoważony przez narzut IPSec, więc nie jestem pewien, czy korzystanie z UDP zamiast TCP przyniesie jakąkolwiek korzyść, o ile używany jest IPv6 IPSec.