Widzę wiele zamieszania między skrótami a algorytmami szyfrującymi i chciałbym usłyszeć porady ekspertów na temat:
Kiedy używać skrótów zamiast szyfrowania
Co odróżnia algorytm mieszania lub szyfrowania (od poziomu teoretycznego / matematycznego), tj. Co sprawia, że skróty są nieodwracalne (bez pomocy drzewa tęczy)
Oto kilka podobnych pytań SO, które nie były tak szczegółowe, jak szukałem:
Jaka jest różnica między zaciemnianiem, haszowaniem i szyfrowaniem?
Różnica między szyfrowaniem a mieszaniem
security
encryption
hash
cryptography
Kenny Cason
źródło
źródło
Odpowiedzi:
Cóż, możesz to sprawdzić w Wikipedii ... Ale ponieważ chcesz wyjaśnienia, zrobię co w mojej mocy:
Funkcje skrótu
Zapewniają odwzorowanie między danymi wejściowymi o dowolnej długości i danymi wyjściowymi (zwykle) o stałej długości (lub o mniejszej długości). Może to być wszystko, od prostego crc32, po pełnoprawną kryptograficzną funkcję skrótu, taką jak MD5 lub SHA1 / 2/256/512. Chodzi o to, że trwa mapowanie w jedną stronę. Zawsze jest to odwzorowanie wiele: 1 (co oznacza, że zawsze będą kolizje), ponieważ każda funkcja generuje mniejszą moc wyjściową niż jest w stanie wprowadzić (jeśli podasz każdy możliwy plik 1 MB do MD5, dostaniesz mnóstwo kolizji).
Powodem, dla którego są trudne (lub niemożliwe w praktyce) do odwrócenia, jest sposób, w jaki działają wewnętrznie. Większość kryptograficznych funkcji skrótu iteruje wielokrotnie zestaw danych wejściowych w celu uzyskania wyniku. Jeśli więc przyjrzymy się każdemu fragmentowi wejścia o stałej długości (który jest zależny od algorytmu), funkcja skrótu wywoła ten stan. Następnie iteruje stan i zmienia go na nowy i wykorzystuje jako informację zwrotną w sobie (MD5 robi to 64 razy dla każdego 512-bitowego fragmentu danych). Następnie w jakiś sposób łączy wynikowe stany ze wszystkich tych iteracji z powrotem, tworząc wynikowy skrót.
Teraz, jeśli chcesz zdekodować skrót, najpierw musisz dowiedzieć się, jak podzielić dany skrót na jego iterowane stany (1 możliwość dla danych wejściowych mniejszych niż wielkość fragmentu danych, wiele dla większych danych wejściowych). Następnie musisz odwrócić iterację dla każdego stanu. Teraz, aby wyjaśnić, dlaczego jest to bardzo trudne, wyobraź sobie, próbując wydedukować
a
ib
ze wzoru:10 = a + b
. Istnieje 10 pozytywnych kombinacjia
ib
które mogą działać. Teraz kilka razy zapętlić:tmp = a + b; a = b; b = tmp
. W przypadku 64 iteracji masz ponad 10 ^ 64 możliwości wypróbowania. A to tylko prosty dodatek, w którym pewien stan jest zachowany od iteracji do iteracji. Rzeczywiste funkcje skrótu wykonują znacznie więcej niż 1 operację (MD5 wykonuje około 15 operacji na 4 zmiennych stanu). A ponieważ kolejna iteracja zależy od stanu poprzedniego, a poprzednie jest niszczone podczas tworzenia stanu bieżącego, prawie niemożliwe jest określenie stanu wejściowego, który doprowadził do danego stanu wyjściowego (dla każdej iteracji nie mniej). Połącz to z dużą liczbą możliwych możliwości, a dekodowanie nawet MD5 zajmie prawie nieskończoną (ale nie nieskończoną) ilość zasobów. Tak wiele zasobów, że ”Funkcje szyfrowania
Zapewniają odwzorowanie 1: 1 między wejściem i wyjściem o dowolnej długości. I zawsze są odwracalne. Ważną rzeczą do zapamiętania jest to, że można ją odwrócić za pomocą jakiejś metody. I to zawsze 1: 1 dla danego klucza. Teraz istnieje wiele danych wejściowych: pary kluczy, które mogą generować takie same dane wyjściowe (w rzeczywistości zwykle są, w zależności od funkcji szyfrowania). Dobre zaszyfrowane dane są nie do odróżnienia od przypadkowego szumu. Różni się to od dobrego wyniku mieszania, który zawsze ma spójny format.
Przypadków użycia
Użyj funkcji skrótu, jeśli chcesz porównać wartość, ale nie możesz zapisać zwykłej reprezentacji (z dowolnej liczby powodów). Hasła powinny bardzo dobrze pasować do tego przypadku użycia, ponieważ nie chcesz przechowywać ich w postaci zwykłego tekstu ze względów bezpieczeństwa (i nie powinno). Ale co, jeśli chcesz sprawdzić system plików pod kątem pirackich plików muzycznych? Przechowywanie 3 MB na plik muzyczny byłoby niepraktyczne. Zamiast tego weź skrót pliku i zapisz go (md5 zapisałby 16 bajtów zamiast 3 MB). W ten sposób po prostu haszujesz każdy plik i porównujesz z przechowywaną bazą danych skrótów (nie działa to tak dobrze w praktyce z powodu ponownego kodowania, zmiany nagłówków plików itp., Ale jest to przykładowy przypadek użycia).
Użyj funkcji skrótu podczas sprawdzania poprawności danych wejściowych. Do tego są przeznaczone. Jeśli masz 2 elementy wejściowe i chcesz sprawdzić, czy są one takie same, uruchom oba za pomocą funkcji skrótu. Prawdopodobieństwo kolizji jest astronomicznie niskie dla małych rozmiarów wejściowych (przy założeniu dobrej funkcji skrótu). Dlatego jest zalecany do haseł. W przypadku haseł o długości do 32 znaków md5 ma 4-krotność przestrzeni wyjściowej. SHA1 ma 6-krotność przestrzeni wyjściowej (w przybliżeniu). SHA512 ma około 16-krotność przestrzeni wyjściowej. Tak naprawdę nie obchodzi, co hasło było , to obchodzi, czy to taki sam jak ten, który został zapisany. Dlatego powinieneś używać skrótów do haseł.
Używaj szyfrowania, gdy chcesz odzyskać dane wejściowe. Zwróć uwagę na potrzebę słowa . Jeśli przechowujesz numery kart kredytowych, w pewnym momencie musisz je odzyskać, ale nie chcesz przechowywać ich jako zwykłego tekstu. Zamiast tego przechowuj zaszyfrowaną wersję i przechowuj klucz tak bezpiecznie, jak to możliwe.
Funkcje skrótu są również świetne do podpisywania danych. Na przykład, jeśli używasz HMAC, podpisujesz kawałek danych, biorąc skrót danych połączonych ze znaną, ale nieprzekazywaną wartością (wartością tajną). Tak więc wysyłasz zwykły tekst i skrót HMAC. Następnie odbiornik po prostu haszy przesłane dane o znanej wartości i sprawdza, czy pasują one do przesłanego HMAC. Jeśli jest tak samo, wiesz, że nie zostało naruszone przez imprezę bez tajnej wartości. Jest to powszechnie stosowane w bezpiecznych systemach plików cookie przez frameworki HTTP, a także w przesyłaniu danych przez HTTP, gdy chcesz mieć pewność integralności danych.
Uwaga na temat skrótów haseł:
Kluczową cechą funkcji skrótu kryptograficznego jest to, że powinny być bardzo szybkie do utworzenia i bardzo trudne / powolne do odwrócenia (tak bardzo, że jest to praktycznie niemożliwe). Stwarza to problem z hasłami. Jeśli przechowujesz
sha512(password)
, nie robisz nic, aby chronić się przed tęczowymi stołami lub atakami brutalnej siły. Pamiętaj, funkcja skrótu została zaprojektowana pod kątem szybkości. Atakujący może więc po prostu uruchomić słownik za pomocą funkcji skrótu i przetestować każdy wynik.Dodanie soli pomaga mieć znaczenie, ponieważ dodaje do mieszania trochę nieznanych danych. Zamiast więc znaleźć coś pasującego
md5(foo)
, muszą znaleźć coś, co po dodaniu do znanej soli wytwarzamd5(foo.salt)
(co jest znacznie trudniejsze do zrobienia). Ale nadal nie rozwiązuje problemu prędkości, ponieważ jeśli znają sól, wystarczy przeszukać słownik.Istnieją więc sposoby radzenia sobie z tym. Jedna popularna metoda nazywa się wzmocnieniem klucza (lub rozciąganiem klucza). Zasadniczo iterujesz wielokrotnie skrót (zwykle tysiące). To robi dwie rzeczy. Po pierwsze, znacznie spowalnia działanie algorytmu mieszającego. Po drugie, jeśli zostanie poprawnie zaimplementowany (przekazanie danych wejściowych i zwrot z powrotem przy każdej iteracji), faktycznie zwiększa entropię (dostępną przestrzeń) dla danych wyjściowych, zmniejszając ryzyko kolizji. Trywialna implementacja to:
Istnieją inne, bardziej standardowe implementacje, takie jak PBKDF2 , BCrypt . Ale z tej techniki korzysta wiele systemów bezpieczeństwa (takich jak PGP, WPA, Apache i OpenSSL).
Podsumowując,
hash(password)
nie jest wystarczająco dobry.hash(password + salt)
jest lepszy, ale wciąż nie jest wystarczająco dobry ... Użyj rozciągniętego mechanizmu skrótu, aby wygenerować skróty hasła ...Kolejna uwaga na temat trywialnego rozciągania
W żadnym wypadku nie przesyłaj danych wyjściowych jednego skrótu bezpośrednio do funkcji skrótu :
Powodem tego są kolizje. Pamiętaj, że wszystkie funkcje skrótu mają kolizje, ponieważ możliwa przestrzeń wyjściowa (liczba możliwych wyników) jest mniejsza niż przestrzeń wejściowa. Aby zobaczyć, dlaczego, spójrzmy na to, co się dzieje. Aby to poprzedzić, załóżmy, że istnieje prawdopodobieństwo 0,001% prawdopodobieństwa kolizji
sha1()
( w rzeczywistości jest znacznie niższe, ale w celach demonstracyjnych).Teraz
hash1
prawdopodobieństwo zderzenia wynosi 0,001%. Ale kiedy robimy następnehash2 = sha1(hash1);
, wszystkie kolizjehash1
automatycznie stają się kolizjamihash2
. Więc teraz mamy stawkę hash1 na 0,001%, a drugiesha1()
połączenie do tego dochodzi . Więc terazhash2
prawdopodobieństwo kolizji wynosi 0,002%. To dwa razy więcej szans! Każda iteracja doda kolejną0.001%
szansę na kolizję z wynikiem. Tak więc przy 1000 iteracjach szansa na kolizję skoczyła z trywialnego 0,001% do 1%. Teraz degradacja jest liniowa, a rzeczywiste prawdopodobieństwa są znacznie mniejsze, ale efekt jest taki sam (oszacowanie prawdopodobieństwa pojedynczego zderzeniamd5
wynosi około 1 / (2 128 ) lub 1 / (3x10 38). Choć wydaje się to małe, dzięki atakowi urodzinowemu nie jest tak małe, jak się wydaje).Zamiast tego, za każdym razem ponownie dodając sól i hasło, ponownie wprowadzasz dane do funkcji skrótu. Tak więc wszelkie kolizje w danej rundzie nie są już kolizjami w następnej rundzie. Więc:
Ma taką samą szansę na kolizję jak
sha512
funkcja natywna . Właśnie tego chcesz. Użyj tego zamiast tego.źródło
Funkcję skrótu można uznać za taką samą, jak pieczenie bochenka chleba. Zaczynasz od nakładów (mąka, woda, drożdże itp.), A po zastosowaniu funkcji mieszania (mieszanie + pieczenie) otrzymujesz wynik: bochenek chleba.
Odwrotna droga jest niezwykle trudna - nie można tak naprawdę podzielić chleba z powrotem na mąkę, wodę, drożdże - niektóre z nich zostały utracone podczas pieczenia i nigdy nie można dokładnie powiedzieć, ile wody, mąki lub drożdży zostało szczególny bochenek, ponieważ ta informacja została zniszczona przez funkcję haszującą (inaczej piekarnik).
Wiele różnych wariantów nakładów teoretycznie wytworzy identyczne bochenki (np. 2 szklanki wody i 1 łyżka stołowa drożdży wytwarzają dokładnie taki sam chleb jak 2,1 szklanki wody i 0,9 łyżki stołowej drożdży), ale biorąc pod uwagę jeden z tych chlebów, nie można powiedzieć dokładnie to, co wyprodukowała kombinacja danych wejściowych.
Z drugiej strony szyfrowanie może być postrzegane jako skrytka depozytowa. Cokolwiek tam umieścisz, wyjdzie na zewnątrz, o ile posiadasz klucz, za pomocą którego był on zamknięty. To operacja symetryczna. Biorąc pod uwagę klucz i pewne dane wejściowe, otrzymujesz określone wyjście. Biorąc pod uwagę ten wynik i ten sam klucz, odzyskasz oryginalne dane wejściowe. To mapowanie 1: 1.
źródło
Używaj skrótów, gdy nie chcesz odzyskać oryginalnego wejścia, użyj szyfrowania, gdy to robisz.
Skróty pobierają trochę danych wejściowych i zamieniają je w niektóre bity (zwykle uważane za liczbę, na przykład 32-bitową liczbę całkowitą, 64-bitową liczbę całkowitą itp.). Te same dane wejściowe zawsze powodują wygenerowanie tego samego skrótu, ale GŁÓWNIE tracisz informacje w tym procesie, więc nie możesz w sposób niezawodny odtworzyć oryginalnych danych wejściowych (jest jednak kilka zastrzeżeń).
Szyfrowanie zasadniczo zachowuje wszystkie informacje, które wprowadzasz do funkcji szyfrowania, po prostu utrudnia (idealnie niemożliwe) powrót do pierwotnych danych wejściowych bez posiadania określonego klucza.
Prosty przykład mieszania
Oto trywialny przykład, który pomoże ci zrozumieć, dlaczego mieszanie nie może (w ogólnym przypadku) odzyskać oryginalnych danych wejściowych. Powiedzmy, że tworzę 1-bitowy skrót. Moja funkcja skrótu przyjmuje na wejściu ciąg bitów i ustawia skrót na 1, jeśli w paśmie wejściowym ustawiono parzystą liczbę bitów, w przeciwnym razie 0, jeśli liczba nieparzysta.
Przykład:
Zauważ, że istnieje wiele wartości wejściowych, które dają skrót 0, a wiele z nich powoduje skrót 1. Jeśli wiesz, że skrót to 0, nie wiesz na pewno, co było oryginalnym wejściem.
Nawiasem mówiąc, ten 1-bitowy skrót nie jest dokładnie wymyślony ... spójrz na bit parzystości .
Prosty przykład szyfrowania
Możesz zaszyfrować tekst za pomocą prostej zamiany liter, powiedz, że jeśli dane wejściowe to A, piszesz B. Jeśli dane wejściowe to B, piszesz C. Do końca alfabetu, gdzie jeśli dane wejściowe to Z, napisz A ponownie.
Podobnie jak prosty przykład skrótu, ten typ szyfrowania był używany historycznie .
źródło
Podstawowy przegląd technik mieszania i szyfrowania / deszyfrowania.
AKTUALIZACJA: Aby zająć się punktami wymienionymi w edytowanym pytaniu.
źródło
Mój jeden linijka ... ogólnie rzecz biorąc, osoba przeprowadzająca wywiad chciała odpowiedzi poniżej.
Hashowanie jest jednym ze sposobów. Nie można uzyskać konwersji danych / łańcucha z kodu skrótu.
Szyfrowanie jest dwukierunkowe - możesz ponownie odszyfrować zaszyfrowany ciąg, jeśli masz przy sobie klucz.
źródło
Funkcja skrótu zamienia tekst o zmiennej wielkości na tekst o stałej wielkości.
Źródło: https://en.wikipedia.org/wiki/Hash_function
Funkcje skrótu w PHP
Hash zamienia ciąg na haszowany. Patrz poniżej.
HASZYSZ:
Hasła są zwykle przechowywane w postaci skrótowej zamiast w postaci czytelnego tekstu. Gdy użytkownik końcowy chce uzyskać dostęp do aplikacji chronionej hasłem, należy podać hasło podczas uwierzytelniania. Gdy użytkownik poda swoje hasło, wtedy prawidłowy system uwierzytelniania otrzymuje hasło i szyfruje to podane hasło. Ten skrót hasła jest porównywany z skrótem znanym przez system. Dostęp jest przyznawany w przypadku równości.
DEHASH:
SHA1 to skrót jednokierunkowy. Co oznacza, że nie można odhashować skrótu.
Możesz jednak użyć siły skrótu. Zobacz: https://hashkiller.co.uk/sha1-decrypter.aspx .
MD5, to kolejny skrót. Dehasher MD5 można znaleźć na tej stronie: https://www.md5online.org/ .
Aby powstrzymać ataki siłowe na skróty, można podać sól. W php możesz użyć
password_hash()
do utworzenia skrótu hasła. Funkcjapassword_hash()
automatycznie tworzy sól. Aby zweryfikować hasło w skrócie hasła (z użyciem soli), użyjpassword_verify()
.Jedno hasło może być reprezentowane przez więcej niż jeden skrót. Po zweryfikowaniu hasła przy użyciu różnych skrótów hasła przy użyciu
password_verify()
, hasło zostanie zaakceptowane jako prawidłowe hasło.Funkcja szyfrowania przekształca tekst w bezsensowny zaszyfrowany tekst za pomocą klucza szyfrowania i odwrotnie.
Źródło: https://en.wikipedia.org/wiki/Encryption
Szyfrowanie w PHP
Zanurzmy się w kodzie PHP, który obsługuje szyfrowanie.
--- Rozszerzenie Mcrypt ---
SZYFROWANIE:
DECRYPT:
--- Rozszerzenie OpenSSL ---
Rozszerzenie Mcrypt zostało wycofane w wersji 7.1. i usunięty w php 7.2. Rozszerzenie OpenSSL powinno być używane w php 7. Zobacz fragmenty kodu poniżej:
źródło
A_KEY
to nie Rijndael-128 klucz AES /; to hasło, a nie klucz.Szyfrowanie symetryczne:
Szyfrowanie symetryczne może być również określane jako klucz współdzielony lub wspólne szyfrowanie tajne. W szyfrowaniu symetrycznym pojedynczy klucz służy zarówno do szyfrowania, jak i deszyfrowania ruchu.
Szyfrowanie asymetryczne:
Szyfrowanie asymetryczne jest również znane jako kryptografia klucza publicznego. Szyfrowanie asymetryczne różni się od szyfrowania symetrycznego przede wszystkim tym, że używane są dwa klucze: jeden do szyfrowania, a drugi do deszyfrowania. Najpopularniejszym algorytmem szyfrowania asymetrycznego jest
RSA
.W porównaniu z szyfrowaniem symetrycznym szyfrowanie asymetryczne nakłada duże obciążenie obliczeniowe i zwykle jest znacznie wolniejsze. Dlatego zwykle nie jest stosowany do ochrony danych ładunku. Zamiast tego jego główną siłą jest zdolność do ustanowienia bezpiecznego kanału przez niezabezpieczone medium (na przykład Internet). Odbywa się to poprzez wymianę kluczy publicznych, których można używać tylko do szyfrowania danych. Uzupełniający klucz prywatny, który nigdy nie jest współdzielony, służy do odszyfrowywania.
Hashowanie:
Wreszcie, hashowanie jest formą bezpieczeństwa kryptograficznego, które różni się od szyfrowania. Podczas gdy szyfrowanie jest dwuetapowym procesem stosowanym najpierw do zaszyfrowania, a następnie odszyfrowania wiadomości, haszowanie powoduje kondensację wiadomości w nieodwracalną wartość lub skrót. Dwa z najczęstszych algorytmów mieszających spotykane w sieciach to
MD5
iSHA-1
.Przeczytaj więcej tutaj: http://packetlife.net/blog/2010/nov/23/symmetric-asymmetric-encryption-hashing/
źródło
Używaj skrótów, gdy potrzebujesz tylko jednej drogi. Na przykład dla haseł w systemie używasz haszowania, ponieważ zawsze weryfikujesz, czy wartość wprowadzona przez użytkownika po haszowaniu jest zgodna z wartością w repozytorium. Dzięki szyfrowaniu możesz przejść na dwa sposoby.
Algorytmy mieszające i algorytmy szyfrujące są tylko algorytmami matematycznymi. Pod tym względem nie różnią się od siebie - wszystkie są tylko formułami matematycznymi. Jeśli chodzi o semantykę, istnieje bardzo duża różnica między hashowaniem (jednokierunkowym) a szyfrowaniem (dwukierunkowym). Dlaczego skróty są nieodwracalne? Ponieważ są tak zaprojektowane, ponieważ czasami potrzebujesz operacji jednokierunkowej.
źródło
Algorytmy szyfrowania i mieszania działają w podobny sposób. W każdym przypadku istnieje potrzeba wprowadzenia zamieszania i dyfuzji między bitami. Sprowadzone zamieszanie tworzy złożoną relację między kluczem a tekstem zaszyfrowanym, a dyfuzja rozprzestrzenia informacje o każdym bicie.
Wiele funkcji skrótu faktycznie korzysta z algorytmów szyfrowania (lub prymitywów algorytmów szyfrowania. Na przykład Skein kandydujący na SHA-3 używa Threefish jako podstawowej metody przetwarzania każdego bloku. Różnica polega na tym, że zamiast utrzymywać każdy blok tekstu zaszyfrowanego, są niszczące, deterministycznie połączone ze sobą na ustaloną długość
źródło
jeśli chodzi o bezpieczeństwo przesyłania danych, tj. dwukierunkowa komunikacja używasz szyfrowania. Wszystkie szyfrowanie wymaga klucza
jeśli chodzi o autoryzację, używasz haszowania. Nie ma klucza w haszowaniu
Hashowanie pobiera dowolną ilość danych (binarną lub tekstową) i tworzy skrót o stałej długości reprezentujący sumę kontrolną dla danych. Na przykład skrót może mieć 16 bajtów. Różne algorytmy mieszające generują skróty o różnych rozmiarach. Oczywiście nie można odtworzyć oryginalnych danych z wartości skrótu, ale można ponownie zaszyfrować dane, aby sprawdzić, czy wygenerowano tę samą wartość skrótu. W ten sposób działają jednokierunkowe hasła oparte na Uniksie. Hasło jest przechowywane jako wartość skrótu, a aby zalogować się do systemu, hasło, które wpisujesz, jest haszowane, a wartość skrótu jest porównywana z skrótem prawdziwego hasła. Jeśli się zgadzają, musisz wpisać poprawne hasło
dlaczego mieszanie jest nieodwracalne:
Hashowanie nie jest odwracalne, ponieważ mapowanie danych wejściowych na hasz nie jest odwrotne od 1 do 1. Posiadanie mapy dwóch wejść do tej samej wartości skrótu jest zwykle nazywane „kolizją skrótu”. Ze względów bezpieczeństwa jedną z właściwości „dobrej” funkcji skrótu jest to, że kolizje występują rzadko w praktyce.
źródło
Kryptografia zajmuje się liczbami i łańcuchami. Zasadniczo każda cyfrowa rzecz w całym wszechświecie to liczby. Kiedy mówię liczby, to 0 i 1. Wiesz, co to są, binarne. Obrazy, które widzisz na ekranie, muzyka, którą słuchasz przez słuchawki, wszystko jest dwójkowe. Ale nasze uszy i oczy nie zrozumieją binariów, prawda? Tylko mózg mógł to zrozumieć, a nawet gdyby mógł zrozumieć binaria, nie może cieszyć się binariami. Dlatego konwertujemy pliki binarne na zrozumiałe dla człowieka formaty, takie jak mp3, jpg itp. Nazwijmy ten proces kodowaniem . Jest to proces dwukierunkowy i można go łatwo zdekodować z powrotem do oryginalnej postaci.
Hashowanie
Hashowanie to kolejna technika kryptograficzna, w której danych raz przekonwertowanych na inną formę nigdy nie można odzyskać. W ujęciu laika nie ma procesu zwanego deszyfrowaniem . Istnieje wiele funkcji skrótu do wykonania zadania, takich jak sha-512, md5 i tak dalej.
Jeśli pierwotnej wartości nie można odzyskać, to gdzie jej używamy? Hasła! Po skonfigurowaniu hasła do telefonu komórkowego lub komputera osobistego tworzony jest skrót hasła i zapisywany w bezpiecznym miejscu. Przy następnej próbie zalogowania wprowadzony ciąg znaków jest ponownie mieszany przy użyciu tego samego algorytmu (funkcja skrótu), a dane wyjściowe są dopasowywane do zapisanej wartości. Jeśli jest tak samo, zostaniesz zalogowany. W przeciwnym razie zostaniesz wyrzucony.
Kredyty: wikimedia Stosując skrót do hasła, możemy zapewnić, że atakujący nigdy nie dostanie naszego hasła, nawet jeśli ukradnie przechowywany plik hasła. Atakujący będzie miał skrót hasła. Prawdopodobnie może znaleźć listę najczęściej używanych haseł i zastosować sha-512 do każdego z nich i porównać z wartością w ręce. Nazywa się to atakiem słownikowym . Ale jak długo miałby to robić? Jeśli twoje hasło jest wystarczająco losowe, czy uważasz, że ta metoda łamania zadziałała? Wszystkie hasła w bazach danych Facebooka, Google'a i Amazon są zakodowane, a przynajmniej powinny być zakodowane.
Następnie jest szyfrowanie
Szyfrowanie polega na mieszaniu i kodowaniu. Kodowanie jest procesem dwukierunkowym i nie powinno być używane do zapewnienia bezpieczeństwa. Szyfrowanie jest również procesem dwukierunkowym, ale oryginalne dane można odzyskać tylko wtedy, gdy znany jest klucz szyfrowania. Jeśli nie wiesz, jak działa szyfrowanie, nie martw się, omówimy tutaj podstawy. To by wystarczyło, aby zrozumieć podstawy SSL. Istnieją więc dwa rodzaje szyfrowania, a mianowicie szyfrowanie symetryczne i asymetryczne.
Szyfrowanie klucza symetrycznego
Staram się, aby rzeczy były tak proste, jak tylko mogłem. Rozumiemy więc szyfrowanie symetryczne za pomocą algorytmu shift. Ten algorytm służy do szyfrowania alfabetów poprzez przesunięcie liter w lewo lub w prawo. Weźmy ciąg CRYPTO i rozważmy liczbę +3. Następnie zaszyfrowanym formatem CRYPTO będzie FUBSWR. Oznacza to, że każda litera jest przesuwana w prawo o 3 miejsca. Tutaj CRYPTO słowo nazywa Plaintext The FUBSWR wyjściowy jest nazywany szyfrogram , wartość +3 nazywa się Encryption key (klucz symetryczny), a cały proces jest szyfr. Jest to jeden z najstarszych i podstawowych algorytmów szyfrowania kluczem symetrycznym, a jego pierwsze użycie odnotowano w czasach Juliusza Cezara. Został więc nazwany jego imieniem i jest to słynny Cezar Szyfr . Każdy, kto zna klucz szyfrowania i może zastosować odwrotność algorytmu Cezara i odzyskać oryginalny tekst jawny. Dlatego nazywa się to szyfrowaniem symetrycznym .
Szyfrowanie klucza asymetrycznego
Wiemy, że w szyfrowaniu symetrycznym ten sam klucz służy zarówno do szyfrowania, jak i deszyfrowania. Po kradzieży tego klucza wszystkie dane znikają. To ogromne ryzyko i potrzebujemy bardziej złożonej techniki. W 1976 roku Whitfield Diffie i Martin Hellman po raz pierwszy opublikowali koncepcję szyfrowania asymetrycznego, a algorytm ten znany był jako wymiana kluczy Diffie – Hellman . Następnie w 1978 r. Ron Rivest, Adi Shamir i Leonard Adleman z MIT opublikowali algorytm RSA . Można je uznać za podstawę kryptografii asymetrycznej.
W porównaniu z szyfrowaniem symetrycznym, w szyfrowaniu asymetrycznym będą dwa klucze zamiast jednego. Jeden nazywa się kluczem publicznym , a drugi kluczem prywatnym . Teoretycznie podczas inicjacji możemy generować publiczno-prywatnepara kluczy do naszej maszyny. Klucz prywatny powinien być przechowywany w bezpiecznym miejscu i nigdy nie powinien być udostępniany nikomu. Klucz publiczny, jak wskazuje nazwa, może być udostępniany każdemu, kto chce wysłać zaszyfrowany tekst do Ciebie. Teraz ci, którzy mają twój klucz publiczny, mogą za jego pomocą szyfrować tajne dane. Jeśli para kluczy została wygenerowana przy użyciu algorytmu RSA, wówczas powinny one używać tego samego algorytmu podczas szyfrowania danych. Zwykle algorytm zostanie określony w kluczu publicznym. Zaszyfrowane dane można odszyfrować tylko kluczem prywatnym, który jest Twoją własnością.
Źródło: SSL / TLS dla manekinów część 1: Ciphersuite, Hashing, Encryption | WST ( https://www.wst.space/ssl-part1-ciphersuite-hashing-encryption/ )
źródło
źródło