Szyfrowania nie można cofnąć?

9

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)));
}
użytkownik1477388
źródło
3
Czy mówisz o kryptograficznym skrócie nazwy (często używanym w hasłach)? lub szyfrowanie (które ma być odszyfrowane przez upoważnioną osobę)?
11
SHA256to kryptograficzna funkcja skrótu , a nie algorytm szyfrowania. Jest to funkcja jednokierunkowa .
1
Obowiązkowe zrzeczenie się odpowiedzialności: solić skrót ( en.wikipedia.org/wiki/Salt_(cryptography) ). Ponadto SHA256 bywa zbyt szybki, aby nie mieć problemów z atakami siłowymi przy użyciu na przykład układów GPU. Zalecane byłoby użycie czegoś takiego jak PBKDF2 lub scrypt.
Maciej Piechotka,
7
Hashing jest jak maszynka do mięsa. Możesz zmienić krowę w mieloną wołowinę, ale nie na odwrót.
Neil McGuigan,
1
Czy jesteś zdezorientowany przez szyfrowanie kluczem publicznym / prywatnym? Jeśli ktoś zaszyfruje wiadomość za pomocą twojego klucza publicznego, nie będzie mógł jej odszyfrować samodzielnie. Tylko Ty możesz to odszyfrować - a może NSA, Mossad, FSB i Tiroler Geheimdienst.
ott--

Odpowiedzi:

39

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ść, Aktórej skrót jest wartością B, bardzo, bardzo trudno jest celowo utworzyć inną wartość, Cktóra również się łączy B.

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ł.

Mason Wheeler
źródło
2
Czy nie mogę po prostu przejrzeć listy znanych słów i przeglądać, dopóki nie znajdę dopasowania hash? Czy dlatego witryny sugerują dodawanie wielkich liter i cyfr do haseł, aby były bardziej bezpieczne?
user1477388,
15
@ user1477388: Tak, właśnie dlatego strony internetowe to sugerują. Jest to dobrze znany sposób atakowania zaszyfrowanych haseł: z oczywistych powodów nazywa się to „atakiem słownikowym”, a używanie słów, których nie ma w słowniku, jest ważnym krokiem, aby się przed nimi zabezpieczyć.
Mason Wheeler
1
Wygląda na to, że ma to dobry wgląd w moją „niemożność uwierzenia, że ​​nie da się ich jakoś odwrócić” security.stackexchange.com/questions/11717/… Nie to, że chcę / muszę je odwrócić; Jestem po prostu ciekawy.
user1477388,
3
Inną sugestią jest dodanie czegoś unikalnego do każdego hasła przed jego skrótem. Jednoznakowa różnica hasła tworzy zupełnie inny skrót, ponieważ wszystkie wyniki skrótu będą unikalne. W przeciwnym razie, jeśli haker odkryje skrót dla słowa „hasło123”, wówczas będzie wiedział, że może go użyć przeciwko WSZYSTKIM nazwom użytkowników z tym konkretnym skrótem. Wygląda na to, że masz dobrą głowę do takich rzeczy, więc powodzenia.
Katana314
1
@MasonWheeler: używanie słów, których nie ma w słowniku, nie jest tak naprawdę konieczne, szczególnie biorąc pod uwagę, że „słownik” użyty w typowym ataku nie przypomina słownika Oxford, ale raczej listę ciągów znanych z tego, że często są używane w hasłach . Zamiast starać się unikać tych słów, lepiej wybrać, powiedzmy, 5 losowych słów z listy około 2000 słów: takie hasło, nawet jeśli znany jest słownik z 2000 słów, zajmuje prawie 100 razy więcej wymusza niż 8 losowych znaków z 64.
tdammers
9

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).

KeithS
źródło
Warto również wspomnieć, że w idealnej funkcji skrótu jednobitowa zmiana danych wejściowych powinna spowodować zmianę o 50% bitów wyjściowych. To się nazywa efekt lawinowy .
CVn
2
@ MichaelKjörling: Dokładnie mówiąc, należy spodziewać się zmiany każdego bitu z 50% prawdopodobieństwem, co jest inne niż (ale implikuje) oczekiwanie zmiany średnio 50% bitów.
Dietrich Epp,
@DietrichEpp Rzeczywiście, i artykuł w Wikipedii, do którego podłączyłem, wyjaśnia to, ale użytkownikowi końcowemu łatwiej jest oszacować liczbę bitów zmienionych między dwoma wejściami.
CVn