Szyfrowanie #2 - Porównanie funkcji skrótu


Jakiś czas temu opisywałem dwa rodzaje szyfrowania dostępne na moim blogu pod tym adresem: http://bboczkowski.blogspot.com/2017/03/szyfrowanie.html , dziś chciałbym przedstawić porównanie używanych na co dzień w informatyce funkcji skrótu. Jak przystało według zarysu historycznego po kolei omówię tutaj właśnie najbardziej znane funkcję skrótu zaczynając od tych najstarszych do najnowszych.

Ogólna charakterystyka omawianych funkcji skrótu:

MD5:
Algorytm MD5 posiada następujące cechy charakterystyczne:

  • wykorzystuje 128b wektor IV
  • wykonuje 64 iteracje (4 rundy po 16 kroków)
  • daje skrót 128b
  • teoretyczna odporność na kolizje 264 jest współcześnie uznawana za zbyt słabą




SHA:
Algorytm SHA został opracowany przez NSA (National Security Agency) i przyjęty przez NIST jako standard federalny w 1993r. Wersja oryginalna SHA (SHA-0) jest zbliżona do MD4. Algorytm ten posiada następujące cechy charakterystyczne:
  • przekształca wiadomość o długości do 264b w skrót 160b
  • wykorzystuje 160b wektor IV
  • wykonuje 80 iteracji (4 rundy po 20 kroków)
Stosunkowo szybko wykryto słabości SHA-0 (choć ich natury nigdy nie opublikowano) i opracowano SHA-1 (ratyfikowany przez NIST), który jest często spotykany do dziś. Wykazuje odporność na kolizje 160b skrótu - 280 , która jest współcześnie uznawana również za zbyt słabą.


SHA-2:
SHA-256, SHA-384 oraz SHA-512, przystosowane do współpracy z kluczami AES (odpowiednio 128b, 192b i 256b). Dają skróty odpowiednio 256b, 384b i 512b. Nie doczekały się jeszcze szerszej analizy jednak dość powszechnie uznawane są za bezpieczne. Mają większą złożoność obliczeniową od poprzedników wymienionych wyżej. W praktyce okazuje się, iż algorytm SHA-384 ma identyczny koszt obliczeniowy co SHA-512, co czyni SHA-384 w praktyce bezużytecznym. Powszechnie spotykane są zatem jedynie SHA-256 oraz SHA-512.


Omówienie sposobu implementacji:
Do haszowania za pomocą SHA wykorzystano klasę z rodziny SHAManaged. I tak w przypadku 

SHA1:


Została wykorzystana klasa SHA1Managed. Za pomocą metody ComputeHash, haszuje interesujący mnie ciąg znaków. 

SHA256:


Została wykorzystana klasa SHA256Managed. Za pomocą metody ComputeHash, haszuje interesujący mnie ciąg znaków. 

SHA512:


Najpierw za pomocą metody ComputeHash dla klasy MD5 zamieniam dany ciąg znaków na tablicę byte. Za pomocą pętli dodaje do stringa poszczególne elementy tablicy z formatem "x2". Na końcu zwracam stringa.

Określenie roli soli w tworzeniu skrótów:

Sól pozwala zwiększyć siłę bezpieczeństwa funkcji skrótu w niektórych przypadkach. Sól może być losowa i dodawana automatycznie przez oprogramowanie do funkcji skrótu.  Jako że przechowywana jest jawnie, nie chroni przed atakami takimi jak Brute-Force, natomiast chroni przed atakami słownikowymi.

Ataki przy wykorzystaniu tablic tęczowych tracą sens, kiedy zostanie wykorzystana sól.

Czy funkcję MD5 można uznać za bezpieczną, oraz czy zostały znalezione dla niej jakiekolwiek kolizje?

Funkcję skrótu MD5 nie można uznać za bezpieczną ponieważ 17 sierpnia 2004 został opublikowany analityczny algorytm ataku, dzięki któremu do podrobienia podpisu wystarczyła godzina działania klastrowego komputera IBM P690. 
Pod koniec 2008 odkryto lukę w MD5 umożliwiającą podrobienie dowolnego certyfikatu SSL w taki sposób, że zostanie on zaakceptowany przez wszystkie popularne przeglądarki internetowe. Do podrobienia certyfikatu wystarczyła moc obliczeniowa 200 konsol do gier PlayStation 3.
W 1996 zaprezentowano po raz pierwszy kolizję algorytmu MD5, jednak nie był to jeszcze pełen atak, w 2005 zaprezentowano metodę umożliwiającą znalezienie kolizji dla algorytmu MD5 i przeprowadzenie ataku polegającego na wysłaniu dwóch różnych wiadomości chronionych tym samym podpisem cyfrowym. Kilka dni później Vlastimil Klima opublikował algorytm, który potrafił znaleźć kolizję w ciągu minuty, używając metody nazwanej tunneling.

Zestawienie uzyskanych wyników wraz ze stosownymi wnioskami:

MD5:


Wniosek: 
Jak widać nawet dla zmiany jednej literki w szyfrowanym tekście w tym przypadku a na y, dostajemy zupełnie inne wyniki szyfrowania, co sprawia że ręczne próby złamania funkcji skrótu są wręcz niemożliwe. 

SHA-1:


Wniosek:
Ponownie jak widać funkcja skrótu SHA-1 generuje za każdym razem zupełnie inny ciąg znaków jak MD5 przy zmianie jednej literki. Ponadto można zauważyć ze dla szyfrowania tego samego tekstu funkcja skrótu SHA-1 wykonuje się trzy razy dłużej niż MD5 dla tych samych danych wejściowych.

SHA-256:


Wniosek:
Funkcja skrótu SHA-256 w porównaniu do SHA-1 wypada tutaj bardzo podobnie pod względem czasowym wykonania hashowania takich samych danych wejściowych, lecz generuje nam ciąg znaków znacznie dłuższy, a co za tym idzie złożoność rozszyfrowania danego tekstu znacząco wzrasta.

SHA-512:


Wniosek:
Algorytm SHA-512 wypada najlepiej z wymienionych wyżej funkcji skrótu, jego wykonanie jest bardzo zbliżone do poprzednich algorytmów z tą przewagą ze generuje on najdłuższy ciąg zakodowanego tekstu, co na dzień dzisiejszy nie jest w stanie do złamania.

Podsumowanie:
  • Funkcje skrótu zawsze tworzy krótki skrót tekstu wejściowego. 
  • Kryptograficzna funkcja skrótu to taka, która jest odporna na kolizje i jest jednokierunkowa. Funkcje skrótu można zastosować w taki sposób że, wszystkie wchodzące hasła są haszowane. Natomiast sprawdzanie ich autentyczności, odbywa się za pomocą porównania skrótu znajdującego się w bazie z skrótem otrzymanym od użytkownika. W ten sposób otrzymujemy dodatkowe zabezpieczenie po stronie bazy np. Kiedy niepowołana osoba dostanie dostęp do bazy.
  • Sprawdzanie integralności funkcji skróty. Za pomocą skrótu możemy sprawdzić autentyczność, lub spójność danych. Sprawdzanie autentyczności lub spójności danych odbywa się za pomocą porywaniu dwóch funkcji skrótu, jeśli nie są sobie równe to teksty są sobie różne.
  • Funkcje haszujące wykonywane są bardzo szybko i przy krótkim tekście wejściowym bardzo ciężko jest zmierzyć ich prędkość wykonywania.

Komentarze

  1. Ciekawe czy ten wyścig kryptografów i kryptoanalityków się kiedyś zatrzyma, czy ta ewolucja będzie się ciągnąć. MD5 ma zaledwie 25 lat. Za kolejne 25 krajobraz w kryptografii może być zupełnie inny, a kilka systemów które piszemy dzisiaj będzie nadal działało produkcyjnie :)

    OdpowiedzUsuń
  2. Zgadza się że systemy będą działały napisane 25 lat temu, sam nad takimi pracowałem, dlatego tak ważny jest maintenance aplikacji co tylko nas programistów powinno cieszyć :-)

    OdpowiedzUsuń

Prześlij komentarz

Popularne posty z tego bloga

Asp.Net Core MVC na Ubuntu 16.04

MongoDB w chmurze - RESTful API #2