Tip:
Highlight text to annotate it
X
Kryptograficzne funkcje skrótu są podstawowym składnikiem
wielu algorytmów i protokołów kryptograficznych.
Odgrywają one bardzo ważną rolę w kontekście bezpieczeństwo informacji.
Do najczęściej stosowanych algorytmów tego typu, znanych jako
kryptograficzne funkcje skrótu, należy np. funkcja MD5.
Jej poprzednikiem była funkcja MD4 i inne, a także takie algorytmy jak SHA-256.
Przed nim były inne algorytmy, np. SHA-1.
Jest również kilka algorytmów, o których być może
słyszeliście, a może są one wam nieco mniej znane. Należą do nich RIPEMD i BLAKE oraz Skein.
Kryptograficzne funkcje skrótu znajdują zastosowanie
jako podstawowe części składowe wielu programów.
Po raz pierwszy zastosowano tego typu funkcje skrótu w kontekście podpisu cyfrowego.
Jest on używany w przeróżnych programach wykorzystujących kryptografię.
Stanowi podstawę wielu protokołów w handlu elektronicznym.
Używa się ich m. in. podczas generowania Bitcoinów.
Z kryptograficznych funkcji skrótu korzysta się także w protokołach uwierzytelniania wiadomości,
w generowaniu liczb pseudolosowych i ochronie hasła.
Do pewnego stopnia również w szyfrowaniu.
Właściwie poza wykorzystaniem w podpisach cyfrowych
funkcje skrótu znajdują również zastosowanie w innych przypadkach, m. in. w protokole Bitcoin.
Po pierwsze muszę wyjaśnić, czym jest kryptograficzna funkcja skrótu.
Oczywiście jak sama nazwa wskazuje jest to funkcja skrótu, czyli funkcja przyjmująca dane.
Jest to funkcja matematyczna czy też przekształcenie,
które przyjmuje konkretne dane. Dane te nazywamy "wiadomościami".
Mogą mieć one dowolną długość, a funkcja skrótu dokonuje na tych danych
przekształcenia matematycznego, prawdopodobnie zestawu przekształceń,
aby stworzyć pojedynczą informację wyjściową. Zazwyczaj nazywamy ją skrótem, ale
czasami można się spotkać z określeniem tag lub hasz albo fingerprint.
"Skrót" jest jednak najczęściej stosowaną nazwą. Sama nazwa funkcji MD5, która była jedną z pierwszych
funkcji skrótu, oznacza "Skrót wiadomości 5", MD4 oznacza "Skrót wiadomości 4", itd.
Wiadomość, tak jak już wspomniałem, może być dowolnego rozmiaru,
może być tak długa lub krótka, jak tylko zechcesz, jednak wiadomość wyjściowa,
rozmiar skrótu / tagu będzie zawsze jednakowy.
Na przykład w kontekście funkcji skrótu takiej jak
np. SHA-256, skrót będzie miał rozmiar dokładnie 256 bitów.
Dane po skróceniu mają więc określony rozmiar, ale dane wejściowe mają dowolny rozmiar.
Kolejną rzeczą na temat kryptograficznych funkcjach skrótu, o której chciałbym wspomnieć
to fakt, że są to funkcje deterministyczne.
Oznacza to, że określone dane wyjściowe po wyjściu są zawsze takie same.
Dla danej informacji wejściowej za każdym razem otrzymasz taki sam wynik.
Nie zaistnieje sytuacja, w której określone dane przyniosą dwa różne wyniki.
Zawsze będą one jednakowe.
W informatyce już od jakiegoś czasu stosuje się konwencjonalne funkcje skrótu
i są one wykorzystywane w wielu programach komputerowych.
Na przykład słyszeliście być może o czymś takim jak funkcje skrótu stosowane do tworzenia tablicy mieszającej.
Jednak tego rodzaju funkcje skrótu, i tu podkreślam,
niekoniecznie są takie same jak kryptograficzne funkcje skrótu.
Określenie "kryptograficzne" jest tutaj bardzo istotne.
Zazwyczaj oznacza ono, że ta funkcja skrótu posiada pewien zestaw
wyróżniających je cech charakterystycznych, dzięki którym są użyteczne
w programach wykorzystujących kryptografię, w których bezpieczeństwo / prywatność
lub poufność / uwierzytelnienie są bardzo istotne.
Przede wszystkim, co być może jest oczywiste,
jedną z niezbędnych cech kryptograficznych funkcji skrótu jest wydajność numeryczna.
Oznacza to, że nie powinno jej zajmować wiele czasu obliczanie danych wyjściowych.
Jeżeli masz wiadomość i chcesz poddać ją szeregowi przekształceń, aby otrzymać jej skrót,
wykonanie tych przekształceń nie powinno zabierać dużo czasu.
Na komputerze powinno to przebiegać bardzo szybko.
To może oczywiste, ale myślę, że trzeba to podkreślić,
ponieważ spotykałem się ze stosowaniem rażąco nieskutecznych funkcji skrótu.
Nie nadawałyby się one do użycia jako typowe kryptograficzne funkcje skrótu
stosowane w programach komputerowych wykorzystujących kryptografię.
Kolejną zwykle niezbędną cechą, szczególnie istotną w kontekście cyfrowego podpisu, jest brak możliwości
wygenerowania 2 wiadomości wejściowych o takim samym skrócie.
To znaczy 2 różnych wiadomości, których skróty byłyby identyczne.
Tą cechę zwykle określa się jako odporność na kolizje.
Oznacza to, że trudno jest znaleźć kolidujące pary wiadomości.
Innymi słowy, jeśli mamy 2 wiadomości, nazwijmy je M1 i M2,
po przetworzeniu za pomocą funkcji skrótu nie powinny być one takie same.
Nigdy nie będą identyczne. Nie zdarzy się nigdy, że skróty M1 i M2
otrzymane za pomocą funkcji skrótu są takie same. Nie powinny być takie same. Zawsze powinny być różne.
Teraz się trochę cofniemy.
Oczywiście w praktyce, zakładając, że wiadomości mogą przyjmować dowolny rozmiar,
a ich skrót musi mieć konkretny rozmiar,
z matematycznego punktu widzenia nie jest możliwe zagwarantować, że
2 różne wiadomości będą miały zawsze odmienne skróty.
Zazwyczaj jednak nie potrzebujemy koniecznie odmiennych skrótów wiadomości,
ale chodzi o to, by trudno było znaleźć 2 różne wiadomości, z których otrzymuje się takie same skróty.
Wiemy, że takowe istnieją, z racji tego, że liczba kombinacji skracania wiadomości
jest skończona (jest stosunkowo niewielka w porównaniu do liczby wiadomości).
Istnieje niewielka ilość możliwych do otrzymania wartości skrótów.
Poza tym odnalezienie 2 różnych wiadomości, których skróty byłyby identyczne
przy zastosowaniu funkcji skrótu powinno zajmować niesamowicie dużo czasu.
Trzecią rzeczą, o której chciałbym wspomnieć jest to, że w wielu przypadkach
możemy również oczekiwać od funkcji skrótu by były w stanie ukryć
informację na temat wiadomości wejściowej.
Inaczej mówiąc wnioskowanie o wiadomości wejściowej
na podstawie wartości skrótu powinno być trudne.
Trudne powinno być uzyskanie jakiekolwiek szczegółowej informacji, nie tylko na temat całej wiadomości wejściowej,
ale również czegoś tak prostego jak, "czy wiadomość wejściowa miała wartość parzystą czy nieparzystą?".
Tego rodzaju rzeczy powinny być trudne do wywnioskowania na podstawie skrótu.
Nawet coś tak prostego jak parzystość czy nieparzystość wartości wiadomości wejściowej.
Czwartą cechą, której zwykle wymaga się od funkcji skrótu jest zapewnienie prawidłowego rozkładu skrótów.
Inaczej mówiąc, rozkład skrótów powinien sprawiać wrażenie losowego.
Powinien wyglądać jak ciąg wyników otrzymanych za pomocą rzutu monetą.
Jego układ powinien być nieprzewidywalny, nie powinien odwzorowywać etapów tworzenia skrótu.
Oznacza to, że to prawie tak jakbyście rzucili garścią monet by otrzymać skrót.
Powinien wyglądać tak, jakby został otrzymany losowo.
Kryptograficzne funkcje skrótu możecie postrzegać więc jako matematyczny ekwiwalent ???.
Mogą więc przyjmować wiadomości i poddawać je matematycznym przekształceniom, w wyniku których wiadomość wyjściowa
uzyskiwana w jakimkolwiek celu, jest całkowicie losowa i niepowiązana z pierwotną wiadomością wejściową.
Teraz chciałbym podzielić się kilkoma uwagami na temat tych
szczególnych właściwości. Po pierwsze są one ze sobą powiązane.
Na przykład w sytuacji, w której skróty rzeczywiście sprawiają wrażenie niepowiązanych
z wiadomością wejściową i skróty także wyglądają na przypadkowe,
to w dużym stopniu otrzymujemy dzięki temu odporność na kolizje.
Sam fakt, że nie można przewidzieć wartości skrótu oraz fakt, że ukrywa on poufne informacje
nie oznacza, że trudne jest odnalezienie dwóch różnych wiadomości wejściowych o takich samych skrótach.
Czasami możesz korzystać z jednej właściwości kosztem innych.
Druga rzecz, na którą chciałbym zwrócić uwagę to fakt, że w praktyce od tych właściwości zazwyczaj możemy
oczekiwać, że spełnią swoje zadanie, ale nie mamy na to gwarancji.
Możliwe jest zaprojektowanie funkcji skrótu, po której spodziewamy się, że
jest całkowicie odporna na kolizje, ale za jakiś czas może zjawić się ktoś, kto wpadnie na lepszy pomysł
radzenia sobie z kolizjami. Być może wynajdzie on doskonały sposób,
który nie wymaga wielkich nakładów pracy.
Jak się okazuje kryptografowie obecnie nie dysponują żadnymi
matematycznymi technikami, które pozwoliłyby przezwyciężyć niektóre z tych ograniczeń.
Często zakładamy, że jakieś systemy są bezpieczne, na podstawie tego jak długo są w użyciu.
Chciałbym zaznaczyć, że sposób w jaki Wam przedstawiłem niniejszy temat
krótko mówiąc nie jest matematycznie precyzyjny.
Istnieje wiele bardziej szczegółowych sposobów na opisanie tych podstawowych właściwości.
Mam jednak nadzieję, że ten filmik przybliżył Wam nieco tajemnice
kryptograficznych funkcji skrótu bez zagłębiania się w matematyczne szczegóły.