Algorytmy Kryptograficzne - Security Bez Tabu

Algorytmy Kryptograficzne

Gdzie wykorzystujemy kryptografie?

Ciężko wyobrazić sobie funkcjonowanie dzisiejszego Internetu bez szyfrowania informacji. Nie chodzi jednak o pisanie wiadomości na Messengerze za pomocą szyfru Cezara do znajomych – mogą zostać odczytane przy użyciu kartki, długopisu i znajomości sposobu szyfrowania. Nie zmienia to jednak faktu, że w starożytności taki sposób zapisu danych był ciężki do złamania.

Komputery z kilkuletnim hardwarem mają niewyobrażalnie większą moc obliczeniową w porównaniu z pierwszymi pecetami. Złamanie prostego hasła zajmie im mniej, niż załadowanie nadal powszechnie używanego Windowsa 7 do pamięci operacyjnej. Wraz z rozwojem technologii zaczęto szyfrować dane. Nie oznacza to jednak, że są bezpieczne – zgodnie z prawem Moore’a moc obliczeniowa komputerów podwaja się co dwa lata, przez co mechanizmy szyfrowania stają się łatwiejsze do złamania

Podział algorytmów szyfrujących

Algorytmy szyfrujące dzielą się na dwa rodzaje – asymetryczne i symetryczne. Symetryczne polegają na tym, że ten sam klucz (znaki wygenerowane za pomocą algorytmu szyfrującego) używany jest do zakodowania i odkodowania danej informacji. W dużym uproszczeniu, Użytkownik A wysyła Użytkownikowi B wiadomość, np. „Spotkajmy się o 11.30 pod pomnikiem.” z kluczem o treści „Hasło123”. Użytkownik B do odczytania wiadomości musi znać klucz – inaczej nie będzie w stanie odczytać wiadomości. Można to również porównać do wpuszczania kogoś do swojego domu na umówione wcześniej hasło – jest identyczne dla obu stron komunikacji.

Algorytmy asymetryczne wykorzystują dwa rodzaje kluczy – prywatny i publiczny. Zaletą tego szyfrowania jest to, że klucz publiczny może być powszechnie dostępny (co nie oznacza jednak, że warto się nim chwalić). Należy chronić klucz prywatny – np. za pomocą solidnego hasła. Wykorzystywane jest to np. podczas uwierzytelniania się użytkownika do serwera przez SSH.

Istotną zaletą szyfrowania asymetrycznego jest fakt, że nie wymaga przesłania identycznego klucza do odszyfrowania danych do tego, jakim zostały zaszyfrowane. Dzięki tej metodzie nie musimy znajdować bezpiecznego kanału komunikacji do przesłania klucza, ponieważ klucz publiczny nie musi być chroniony tak, jak klucze dla symetrycznego sposobu szyfrowania danych.

Gdzie używa się szyfrowania danych? – przykłady

  • Podczas korzystania z tej strony internetowej – protokół HTTPS wykorzystuje szyfrowanie połączenia za pomocą protokołu TLS (SSL). Na stronach internetowych działających na szyfrowanej wersji http wpisywane na nich dane (numery kart kredytowych, hasła, PESEL) nie mogą zostać przechwycone za pomocą odczytania przesłanego pakietu, ponieważ nie są przesyłane w formie tekstu, w przeciwieństwie do poprzednika.
    Przykładowo, tak wygląda informacja wysłana za pomocą POST z użyciem curl:

W ten sposób do strony CERN (swoją drogą, najstarszej strony internetowej) działającej za pośrednictwem protokołu HTTP wysłałem informację zawierającą wpisane przeze mnie wcześniej parametry. Mogły być nimi również dane logowania lub inne wrażliwe dane.

W programie Wireshark odnalazłem pakiet z curl i zacząłem go analizować. Znalazłem następujące informacje:

Jak widać, wpisane przeze mnie dane zostały przesłane bez żadnego szyfrowania. Przy użyciu HTTPS takie dane są zaszyfrowane i niemożliwe do odczytania w taki sposób.

  • Dla haseł – trzymanie haseł w formie tekstu, bez uprzedniego zaszyfrowania, to lekko mówiąc… nierozsądne podejście. W razie ewentualnego wycieku wszystkie dane logowania są w rękach hakerów, którzy mogą wykorzystać je do dalszych ataków na konta z identycznym loginem i hasłem. Hasło powinno być trzymane w zaszyfrowanej formie, z dodatkiem soli i pieprzu, co opisze potem (spokojnie, to nie będzie poradnik kulinarny J).
  • Podczas łączenia się przez SSH, używając kluczy publicznych i prywatnych
  • Do plików – np. ustawianie haseł dla archiwów WinRAR, 7zip
  • Podczas korzystania z VPN
  • Do szyfrowania dysków

Metody kryptograficzne stosowane w przeszłości – przykłady

MD5 (Message-Digest algorithm 5)

Autor: Ron Rivest
Powstanie: 1991 rok
Złamanie: Hongbo Yu, Xiaoyun Wang, Dengguo Fen, Xuejia Lai (chińscy naukowcy), 2004 rok

Uproszczony sposób działania: tworzy 128-bitowy skrót z ciągu znaków o dowolnej długości

MD5 obecnie używane jest do generowania sumy kontrolnej pliku. Nie powinno już być używane dla przechowywania haseł ze względu na łatwość w odhashowaniu.

Przykładowo hasło „vanessa” może zostać odhashowane w stosunkowo krótkim czasie, nawet za pomocą narzędzi online.

Zahashowana wersja hasła z użyciem MD5 wygląda następująco: 282bbbfb69da08d03ff4bcf34a94bc53. Jest to 128-bitowy skrót wspomnianego hasła. Używając narzędzia online, np. crackstation.net, jesteśmy w stanie błyskawicznie odgadnąć hasło.

SHA-1

Autorzy: NSA (Agencja Bezpieczeństwa Krajowego – USA)
Powstanie: 1995 rok
Złamanie: Google, 2017 rok

Uproszczony sposób działania: Tworzenie 160-bitowego skrótu

SHA-1 stworzone przez rządową agencję Stanów Zjednoczonych było stosunkowo długo odporne na złamanie. Było o wiele trudniejsze do złamania niż MD5. Jest protoplastą skrótów SHA-2, stosowanych do dziś.

Złamanie hasła zahashowanego w SHA-1 można dokonać za pomocą hashcata, dostępnego zarówno na Windowsach i dystrybucjach Linuksa.

Za pomocą cat wyświetlę 160-bitowy skrót poprzedniego hasła (vanessa).

Aby przystąpić do łamania hasła, należy użyć polecenia:

$ hashcat –m 100 –a 3 [nazwa_pliku_z_zahashowanym_hasłem] [źródło hashy – własny plik, lista haseł itd.]

Do próby złamania hashu użyłem listy rockyou.txt, czyli 139MB haseł zapisanych bez szyfrowania (w formie czystego tekstu), która wyciekła z ataku na firmę RockYou w 2009 roku.

Jak widać na zrzucie ekranu, hashcatowi odhashowanie zajęło jedynie 21 sekund, przy wykorzystaniu rockyou.txt.

Metody kryptograficzne stosowane obecnie – przykłady

Rodzina SHA-2, SHA-3

Autorzy: NSA (Agencja Bezpieczeństwa Krajowego – USA)
Data powstania: 2001 rok (SHA-2), 2012 rok (SHA-3)

Uproszczony sposób działania: podobny do SHA-1, o dłuższej ilości bitów (SHA-224, SHA-256, SHA-384, SHA-512).

Z racji na swoją złożoność, SHA-2 i SHA-3 są uznawane za bezpieczne. Aktualnie używane są szyfrowania z rodziny SHA-2. Przykładowo, SHA-256 jest używane do sprawdzania sumy kontrolnej pakietów Debiana.

AES (Advanced Encryption Standard)

Autorzy: Vincent Rijmen, Joan Daemen
Data utworzenia: 1998 rok

Jest symetrycznym szyfrem, wykorzystywanym przez rząd amerykański. Do jego atutów należą niskie zużycie pamięci i szybkie działanie. Generuje jeden klucz – zarówno do szyfrowania i odszyfrowywania plików.

RSA

Autorzy: Ron Rivest, Adi Shamir, Leonard Adleman
Data utworzenia: 1977 rok

RSA to ponad czterdziestoletni sposób szyfrowania, nadal używany np. do generowania kluczy publicznych i prywatnych stosowanych przy połączeniu za pomocą SSH. Jego zaletą jest dowolna liczba bitów, które mogą zostać użyte do generowania skrótu. Stosowane jest domyślnie dla generowania kluczy w putty.

W jaki sposób wzmocnić hasła? – sól i pieprz

W 1978 roku dwie osoby zajmujące się systemami Uniksowymi – Robert Morris i Ken Thompson – unowocześnili metodę przechowywania haseł.

  • Sól
    Sól to losowy ciąg znaków dodawany do hasła, która utrudnia odhashowanie. Dzięki temu próba złamania hasha zostaje znacząco utrudniona – kilkukrotnie zwiększa się czas wymagany do odgadnięcia danej frazy.
  • Pieprz
    Pieprz to identyczny ciąg znaków dodawany do frazy z dodatkiem soli. Jest uzyskiwany za pomocą funkcji, której wynik powinien być zapisany w miejscu odizolowanym od bazy haseł. Chroni to hasła przed atakami typu bruteforce.

Podsumowanie

Szyfrowanie ewoluowało zgodnie z zapotrzebowaniem na bezpieczny sposoby przechowania danych, jak i rozwojem technologicznym – sprzęt z lat 90. XX-wieku zdecydowanie różni się od hardware’u, który jest obecnie używany.

Obecnie korzystanie z nieszyfrowanych typów połączenia może stanowić zagrożenie, na przykład dla przechwycenia danych logowania przekazywanych za pomocą protokołu HTTP. Podczas korzystania z Internetu należy zwracać uwagę na to, czy strona ma certyfikat SSL wystawiony przez rzetelną spółkę. Podczas korzystania z SSH należy używać szyfrowania asymetrycznego, aby uniknąć przejęcia urządzenia – zalogowanie na konto roota/admina może mieć katastrofalne skutki nie tylko dla danego urządzenia, lecz dla całej sieci.

Warto znać podstawy kryptografii, aby rozważnie używać danego rodzaju hashowania dla wszystkiego, co jest widoczne w Internecie. Korzystanie z MD5 lub SHA-1 jest lepsze od trzymania haseł w formie czystego tekstu, lecz nadal nie chroni przed metodą słownikową lub łamaniem hashy za pomocą kart graficznych.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *