Mam wrażenie, że zaszyfrowanego ciągu nie można odszyfrować, więc pierwotna wartość zostanie utracona na zawsze.
Jeśli jednak następujący ciąg zawsze jest równy „dominujący” (moje imię), to nie może być żadnego logicznego sposobu na odwrócenie tego; ponieważ nie jest losowy, ani nie jest oparty na dacie / czasie, ale istnieje logiczna metoda?
0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=
Bez względu na to, co lub ile razy szyfruję „dominujący” (ciąg znaków), zawsze jest równy jak wyżej. Czy nie powinien istnieć sposób na odszyfrowanie takiego ciągu?
Przykład tego, o czym mówię:
public string EncryptPassword(string password)
{
return Convert.ToBase64String(
System.Security.Cryptography.SHA256.Create()
.ComputeHash(Encoding.UTF8.GetBytes(password)));
}
encryption
użytkownik1477388
źródło
źródło
SHA256
to kryptograficzna funkcja skrótu , a nie algorytm szyfrowania. Jest to funkcja jednokierunkowa .Odpowiedzi:
Szyfrowanie zawsze można cofnąć. Celem szyfrowania jest wzięcie wiadomości i zakodowanie jej tajnym kluczem , aby tylko inna osoba, która ma klucz, mogła cofnąć szyfrowanie i odczytać wiadomość.
To, na co tu patrzysz, to mieszanie , które nie jest tym samym, co szyfrowanie, chociaż techniki szyfrowania są często stosowane przy implementacji skrótów. Ideą skrótu jest to, że wykorzystuje skomplikowane techniki matematyczne do budowy nowej wartości, która odwzorowuje na starą wartość, która jest powtarzalna. Nie ma klucza i nie należy go odwracać. Kryptograficznie silny skrót jest tworzony z matematyczną właściwością, która, jeśli masz wartość,
A
której skrót jest wartościąB
, bardzo, bardzo trudno jest celowo utworzyć inną wartość,C
która również się łączyB
.Skróty nie muszą być odwracalne, ponieważ są używane do uwierzytelniania. Jeśli podasz mi nazwę użytkownika i hasło, tak naprawdę nie chcesz, żebym przechowywał to hasło w mojej bazie danych, ponieważ jeśli ktoś włamie się i uzyska dostęp do mojej bazy danych, może uzyskać Twoje hasło! Zamiast tego przechowuję skrót hasła w bazie danych. Następnie, gdy się logujesz, sprawdzam, czy istnieje nazwa użytkownika, która pasuje do twojej, z hasłem, które pasuje do skrótu hasła, które przesłałeś, a jeśli tak, jesteś uwierzytelniony, ponieważ bardzo trudno jest utworzyć kolizję skrótu ( dwie wartości, które mają skrót do tej samej wartości) z dobrym skrótem, więc jestem prawie całkowicie pewien, że użyte hasło jest prawidłowe.
Inną właściwością silnego kryptograficznego skrótu jest to, że bardzo trudno go odwrócić. Wiesz, że wartością
0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=
jest skrót dla „dominic”, ponieważ właśnie to wypracowałeś, ale jeśli nie wiedziałeś o tym i nie wiedziałeś, od czego zacząć, a wszystko, co miałeś0WrtCkg6IdaV/l4hDaYq3seMIWMbW+X/g36fvt8uYkE=
, mogło dosłownie zabrać Ci miliardy lat, aby dowiedzieć się, że oryginał był „dominujący”, jeśli skrót jest dobry. Ponownie, jest to przydatne, aby zapobiec uszkodzeniu zabezpieczenia w przypadku kradzieży listy haseł.źródło
To, co robisz, nie jest samo w sobie „szyfrowaniem”; to „mieszanie”. Zasadnicza różnica między nimi polega na tym, że szyfrowanie jest łatwo odwracalne (oczywiście z poprawnym kluczem), podczas gdy mieszanie jest niezwykle trudne do odwrócenia w jakichkolwiek okolicznościach innych niż znajomość oryginalnej wiadomości.
Teoretycznie skróty symulują „losową wyrocznię”, hipotetyczny homunkulus z pamięcią eidetyczną i sposób generowania idealnie unikalnych, idealnie losowych liczb bez limitu górnego zakresu. Przekażesz temu małemu człowiekowi wiadomość, a stanie się jedna z dwóch rzeczy; albo nigdy wcześniej nie widział wiadomości, w takim przypadku generuje nową liczbę losową i przekazuje ją jako podsumowanie, albo widział tę wiadomość wcześniej, a więc pamięta i podaje liczbę, którą wygenerował, gdy ją zobaczył pierwszy raz. W tym modelu teoretycznym istnieje zerowy związek między wiadomością a jej streszczeniem, a żadna pojedyncza liczba nie pojawia się dwukrotnie w RNG, nie ma możliwości kolizji.
Niestety nie mamy idealnej wyroczni losowej; pomysł ma praktyczne niemożności wdrożenia cyfrowego, takie jak zdolność wyroczni do skutecznego przechowywania i skutecznego wywoływania każdej wiadomości, jaką kiedykolwiek ktoś kiedykolwiek zetknął, oraz zdolność klientów do przyjęcia liczby, która może być setkami lub tysiącami cyfr dziesiętnych na długość. Zamiast tego mamy funkcje skrótu, które są nieodwracalnymi (jednokierunkowymi) operacjami matematycznymi, które działają na samym komunikacie, w celu utworzenia transformacji deterministycznej (ten sam komunikat => taki sam skrót) bez widocznegozwiązek między skrótem a oryginalną wiadomością. Jak wspomniano w komentarzach, nie powinno być również przewidywalnej zmiany wartości skrótu wytwarzanej przez dokonywanie systematycznych zmian w komunikacie; idealnie każdy bit podsumowania miałby 50% szansy na zmianę, biorąc pod uwagę zmianę pojedynczego bitu wiadomości.
Istnieje wiele zastosowań funkcji skrótu; są używane do weryfikacji wyzwania (pomyśl dane logowania, takie jak hasła), bez potrzeby, aby obie strony znały tajny tekst jawny, i są używane jako sumy kontrolne, aby sprawdzić, czy wiadomość nie została zmieniona lub uszkodzona. Są również wykorzystywane w tak zwanych scenariuszach „proof of work”; zadania obliczeniowe, które są trudne do wykonania, ale łatwe do zweryfikowania.
Jeśli kiedykolwiek miałbyś znaleźć sposób na skuteczne odwrócenie skrótu skrótu SHA256 w celu wygenerowania komunikatu (dowolnego komunikatu), który spowodowałby ten skrót, byłby to dowód przez wykazanie, że tak naprawdę skrót jest zasadniczo zepsuty. SHA256 jest w rzeczywistości uważany za bezpieczny, co oznacza, że nie ma udokumentowanej metody, bez względu na to, jak praktyczne, aby rozpocząć od skrótu skrótu i wygenerować kolidujący komunikat, który wymaga mniej pracy niż po prostu wypróbowanie każdej możliwości (która dla SHA-256 jest idealnie 2 ^ 256 ~ = 10 ^ 77 możliwości).
źródło