Czy na podstawie hashu i wiedzy tego co jest pod nim można poznać hasło ?

0

Witam

Dajmy na to mam słowo "tak" zaszyfrowane 32 bitowym algorytmem. Czy na podstawie hashu i wiedzy iż pod tym hashem jest słowo "tak" można w łatwy sposób odgadnąć hasło jakim to słowo zostało zaszyfrowane?

3
  1. Hashowanie to nie jest szyfrowanie i nie wymaga zwykle żadnego klucza. Jednocześnie jest nieodwracalne i niejednoznaczne. Oznacza to że wiele różnych tekstów sprowadza sie do identycznego hasha. W zasadzie dla hashów o stałej długości (jak md5 czy rodzina sha) istnieje nieskończenie wiele ciągów które generują identyczne hashe.
  2. Są szyfrowania podatne na atak ze znanym tekstem jawnym (choćby proste xorowanie przez stały klucz), ale są też takie które na taki atak nie są podatne. Nie ma odpowiedzi "ogólnej", jest tylko odpowiedź dotycząca konkretnego algorytmu szyfrowania.
0

Dzięki @Shalom.

0

No dobra ale weźmy dla przykładu SHA256 i hash_hmac z PHP:

$input_str = 'Foo boo';
$hash_key = 'gdzx7rX22ncK8Ne';
$hash_method = 'sha256';
$output_str = hash_hmac($hash_method, $input_str, $hash_key);

Ten hash_key wygenerowany jakimś generatorem losowych haseł i zapisany gdzieś w config.php w aplikacji webowej, w przypadku jego zmiany nie zalogujecie się bo hasła były zapisane w bazie na hash_key który przez nie uwagę albo przypadek zmieniliście. Tzn. na ile ten hash key ma przełożenie na bezpieczeństwo i jak długi powinien być?

0

No i jeszcze to:
http://stackoverflow.com/questions/1756004/can-two-different-strings-generate-the-same-md5-hash-code
http://stackoverflow.com/questions/2479348/is-it-possible-to-get-identical-sha1-hash

Czyli na ile jest prawdopodobne że ktoś innym hasłem się zaloguje i jak to się ma do praktyki? Wiki podaje że w nowych aplikacjach nie powinno się stosować SHA1 a co dopiero MD5.

https://pl.wikipedia.org/wiki/SHA-1

Czy to znaczy że SHA256, SHA384 albo SHA512 z odpowiednim hash key wykorzystanym w hash_hmac daje na tyle względne bezpieczeństwo że nie ma co się tym przejmować, bo prawdopodobieństwo włamania jest znikome?

0

Ten hash_key to prawdopodobnie sól, która ma udaremnić stosowanie tablic tęczowych. Sól tak skomplikowana jak ta podana jest spoko.

Dobry hash to taki, w którym znalezienie kolizji jest trudne.

Jeśli ktoś się włamie i pozna hash_key to co z tego? Przy użyciu dobrego hasha i tak odtworzenie haseł powinno być trudne (tzn możliwe tylko brute-forcem).

Solenie haseł nie jest po to, by utrudnić włamania, tylko po to by utrudnić odtworzenie haseł z hashy.

0

Znacie jakieś książki, w których wspomniane zagadnienia są szczegółowo opisane, wyjaśnione?

0

Solenie jest po to żeby nie złamać całej bazy jednymi tablicami tęczowymi ;) Jeśli każdy user ma unikalną sól to trzeba generować tablice / szukać kolizji dla każdego usera z osobna. Jesli soli nie ma to możemy porównywać otrzymane hashe ze wszystkim w bazie więc szansa że coś złamiemy jest dużo większa.

0

Coś jest tutaj na temat md5:
http://stackoverflow.com/questions/1224113/examples-of-hash-collisions
http://www.mscs.dal.ca/~selinger/md5collision/

Sprawdzałem to co w tym artykule, faktycznie dwa pliki exe: hello.exe oraz erase.exe mają te same sumy kontrolne md5. Ciekawe :-)

I teraz najlepsze :-) Frameworki PHP mają np. cache danych do plików i tak np. Laravel ma md5 jako nazwy plików cache które są ustalane na podstawie nazwy klucza tego co ma być zapisane w cache.

Fragment z FileStore.php

    /**
     * Get the full path for the given cache key.
     *
     * @param  string  $key
     * @return string
     */
    protected function path($key)
    {
        $parts = array_slice(str_split($hash = md5($key), 2), 0, 2);

        return $this->directory.'/'.implode('/', $parts).'/'.$hash;
    }

I teraz gdyby wystąpiła taka kolizja to teoretycznie albo aplikacja działała by niepoprawnie, coś by się może wywaliło albo użytkownik widziałby nie te dane które powinien. Pytanie, na ile to prawdopodobne?

1

Na tyle mało prawdopodobne że nikt się tym nie przejmuje. md5 ma 128 bitów czyli generuje 2128 różnych ciągów. Szansa że dla dwóch losowych plików hash się powtórzy jest jak 1/2128 czyli dość niewielka. Nawet biorąc pod uwagę wiele plików w których szukasz konfliktu i stosując zasadę znaną paradoksu dnia urodzin, nadal masz raptem prawdopodobieństwo n(n-1)/2129 że jakaś para plików ma ten sam hash. Czyli zeby to było realne zagrożenie musiałbyś mieć tyle plików że n2 jest zbliżone do 2129 czyli n jest zbliżone 264.

1 użytkowników online, w tym zalogowanych: 0, gości: 1