Którą kryptograficzną funkcję skrótu powinienem wybrać?

137

Platforma .NET jest dostarczana z 6 różnymi algorytmami mieszania:

  • MD5: 16 bajtów (czas do skrótu 500 MB: 1462 ms)
  • SHA-1: 20 bajtów (1644 ms)
  • SHA256: 32 bajty (5618 ms)
  • SHA384: 48 bajtów (3839 ms)
  • SHA512: 64 bajty (3820 ms)
  • RIPEMD: 20 bajtów (7066 ms)

Każda z tych funkcji działa inaczej; MD5 jest najszybszy, a RIPEMD najwolniejszy.

MD5 ma tę zaletę, że pasuje do wbudowanego typu Guid; i stanowi podstawę UUID typu 3 . Skrót SHA-1 jest podstawą UUID typu 5. Co sprawia, że ​​są naprawdę łatwe w użyciu do identyfikacji.

MD5 jest jednak podatny na ataki kolizyjne , SHA-1 jest również podatny, ale w mniejszym stopniu.

W jakich warunkach powinienem używać algorytmu haszującego?

Konkretne pytania, na które jestem bardzo ciekawa, mają odpowiedzi:

  • Czy MD5 nie jest godne zaufania? W normalnych sytuacjach, gdy używasz algorytmu MD5 bez złośliwych zamiarów i żadna osoba trzecia nie ma żadnych złośliwych zamiarów, możesz spodziewać się ŻADNYCH kolizji (czyli dwóch dowolnych bajtów [] tworzących ten sam hash)

  • O ile lepszy jest RIPEMD niż SHA1? (jeśli jest lepszy) jego obliczenie jest 5 razy wolniejsze, ale rozmiar skrótu jest taki sam jak SHA1.

  • Jakie są szanse na niezłośliwe kolizje podczas haszowania nazw plików (lub innych krótkich ciągów znaków)? (Np. 2 losowe nazwy plików z tym samym hashem MD5) (z MD5 / SHA1 / SHA2xx) Jakie są ogólne szanse na niezłośliwe kolizje?

Oto wzorzec, którego użyłem:

    static void TimeAction(string description, int iterations, Action func) {
        var watch = new Stopwatch();
        watch.Start();
        for (int i = 0; i < iterations; i++) {
            func();
        }
        watch.Stop();
        Console.Write(description);
        Console.WriteLine(" Time Elapsed {0} ms", watch.ElapsedMilliseconds);
    }

    static byte[] GetRandomBytes(int count) {
        var bytes = new byte[count];
        (new Random()).NextBytes(bytes);
        return bytes;
    }


    static void Main(string[] args) {

        var md5 = new MD5CryptoServiceProvider();
        var sha1 = new SHA1CryptoServiceProvider();
        var sha256 = new SHA256CryptoServiceProvider();
        var sha384 = new SHA384CryptoServiceProvider();
        var sha512 = new SHA512CryptoServiceProvider();
        var ripemd160 = new RIPEMD160Managed();

        var source = GetRandomBytes(1000 * 1024);

        var algorithms = new Dictionary<string,HashAlgorithm>();
        algorithms["md5"] = md5;
        algorithms["sha1"] = sha1;
        algorithms["sha256"] = sha256;
        algorithms["sha384"] = sha384;
        algorithms["sha512"] = sha512;
        algorithms["ripemd160"] = ripemd160;

        foreach (var pair in algorithms) {
            Console.WriteLine("Hash Length for {0} is {1}", 
                pair.Key, 
                pair.Value.ComputeHash(source).Length);
        }

        foreach (var pair in algorithms) {
            TimeAction(pair.Key + " calculation", 500, () =>
            {
                pair.Value.ComputeHash(source);
            });
        }

        Console.ReadKey();
    }
Sam Saffron
źródło
15
Fakt, że wspomniałeś o md5 pasuje do formatu GUID (16 bajtów), sugeruje fundamentalne nieporozumienie. Nie ma gwarancji, że hash jest unikalny, ale jest rzadki (i trudny do sfałszowania, jeśli jest używany w sensie kryptograficznym) i pochodzi z rzeczy, której jest hashem, podczas gdy identyfikator GUID jest, no cóż, unikalny, ale niezwiązany z zawartością rzecz, którą identyfikuje. Są używane do bardzo różnych celów.
Barry Wark
1
Popraw niepowiązane, to po prostu poręczny fakt dotyczący implementacji. Rozumiem, że nie można zmieścić nieskończoności w 16 bajtach. Możesz uzyskać kolizje z DOWOLNYM algorytmem haszowania
Sam Saffron
5
Również Guid jest wyjątkowy w praktyce. Teoretycznie, jeśli będziesz nadal generował Guidy, w końcu otrzymasz duplikaty.
Sam Saffron
3
Naprawdę nie powinieneś umieszczać hasha w identyfikatorze GUID, nawet jeśli pasuje. Najprostszy przykład: dwie kopie tego samego pliku powinny mieć różne identyfikatory GUID, ale ten sam skrót. Pierwsze 8 liter nazwiska osoby również ładnie mieści się w 16 bajtach.
dbkk,
2
@ user2332868 Przerwanie SHA-1 nie ma wpływu na prawdopodobieństwo przypadkowych kolizji. Kiedy złośliwy zamiar stanowi zagrożenie dla Twojego użytkowania, myślę, że ślepe wybieranie funkcji skrótu jest niewłaściwe i musisz poświęcić czas na analizę ryzyka / kosztów w swoim konkretnym przypadku.
Andrey Tarantsov

Odpowiedzi:

138

W kryptografii funkcje skrótu zapewniają trzy oddzielne funkcje.

  1. Odporność na kolizje : jak trudno jest komuś znaleźć dwie wiadomości ( dowolne dwie wiadomości), które mają taki sam skrót.
  2. Odporność na preimage : biorąc pod uwagę hash, jak trudno jest znaleźć inną wiadomość, która ma taki sam skrót? Znana również jako jednokierunkowa funkcja skrótu .
  3. Odporność na drugi obraz wstępny : biorąc pod uwagę wiadomość, znajdź inną wiadomość, która ma taki sam skrót.

Te właściwości są powiązane, ale niezależne. Na przykład odporność na kolizje oznacza odporność na drugi obraz przedobrazem, ale nie na odwrót. W przypadku dowolnej aplikacji będziesz mieć różne wymagania, wymagając co najmniej jednej z tych właściwości. Funkcja skrótu do zabezpieczania haseł na serwerze zwykle wymaga tylko odporności na przedobraz, podczas gdy przeglądanie wiadomości wymaga wszystkich trzech.

Wykazano, że MD5 nie jest odporny na kolizje, co jednak nie wyklucza jego stosowania w zastosowaniach niewymagających odporności na kolizję. Rzeczywiście, MD5 jest często nadal używany w aplikacjach, w których mniejszy rozmiar klucza i mniejsza prędkość są korzystne. To powiedziawszy, ze względu na jego wady, badacze zalecają użycie innych funkcji skrótu w nowych scenariuszach.

SHA1 ma wadę, która pozwala na znalezienie kolizji w teoretycznie znacznie mniejszych krokach niż 2 ^ 80 kroków, których wymagałaby bezpieczna funkcja skrótu dla jego długości. Atak jest nieustannie poprawiany i obecnie można go wykonać w ~ 2 ^ 63 krokach - ledwo mieszcząc się w obecnym obszarze obliczalności. Z tego powodu NIST wycofuje stosowanie SHA1, stwierdzając, że rodzina SHA2 powinna być używana po 2010 roku.

SHA2 to nowa rodzina funkcji skrótu utworzona po SHA1. Obecnie nie są znane żadne ataki na funkcje SHA2. SHA256, 384 i 512 są częścią rodziny SHA2, używają tylko różnych długości kluczy.

RIPEMD Nie mogę zbytnio komentować, z wyjątkiem tego, że nie jest tak powszechnie używany jak rodziny SHA, a więc nie został tak dokładnie zbadany przez badaczy kryptografów. Tylko z tego powodu zalecałbym użycie nad nim funkcji SHA. W implementacji, której używasz, również wydaje się dość powolny, co czyni go mniej użytecznym.

Podsumowując, nie ma jednej najlepszej funkcji - wszystko zależy od tego, do czego jej potrzebujesz. Uważaj na wady każdego z nich, a najlepiej będziesz w stanie wybrać odpowiednią funkcję skrótu do swojego scenariusza.

Eric Burnett
źródło
1
Naprawdę doceniam, że wchodzisz w ten poziom szczegółowości. To jest bardzo pomocne.
joelc
1
W przypadku niektórych aplikacji odpowiednia może być nawet funkcja skrótu inna niż kryptograficzna. OP nigdy nie wspomniał, czy jest to specjalnie dla haseł, czy dla uwierzytelniania w odpowiedzi na wezwanie, czy dla tokenów dostępu, czy po prostu do indeksowania zestawu ciągów / plików. Z drugiej strony wydajność jest zmartwieniem dla OP ...
Seva Alekseyev
111

Wszystkie funkcje skrótu są „zepsute”

Zasada szufladki mówi, że staraj się tak mocno, jak tylko chcesz, nie możesz zmieścić więcej niż 2 gołębi w 2 dołkach (chyba że pokroisz gołębie). Podobnie nie możesz zmieścić 2 ^ 128 + 1 liczb w 2 ^ 128 slotach. Wszystkie funkcje haszujące dają skrót o skończonym rozmiarze, co oznacza, że ​​zawsze możesz znaleźć kolizję, przeszukując sekwencje o skończonym rozmiarze + 1. Po prostu nie jest to wykonalne. Nie dla MD5 i nie dla Skein .

MD5 / SHA1 / Sha2xx nie mają szans na kolizje

Wszystkie funkcje skrótu mają kolizje, to fakt. Przypadkowe trafienie w te kolizje jest równoznaczne z wygraną w międzygalaktycznej loterii . To znaczy, nikt nie wygrywa w loterii międzygalaktycznej , po prostu nie tak działa loteria. NIGDY nie spotkasz przypadkowego skrótu MD5 / SHA1 / SHA2XXX. Każde słowo w każdym słowniku, w każdym języku ma inną wartość. Każda nazwa ścieżki na każdej maszynie na całej planecie ma inny skrót MD5 / SHA1 / SHA2XXX. Skąd to wiem, możesz zapytać. Cóż, jak powiedziałem wcześniej, nikt nigdy nie wygrywa na loterii międzygalaktycznej.

Ale ... MD5 jest zepsuty

Czasami fakt, że jest zepsuty, nie ma znaczenia .

W obecnej postaci nie są znane żadne ataki typu pre-image ani drugie ataki typu pre-image na MD5.

Więc co jest takiego zepsutego w MD5, możesz zapytać? Strona trzecia może wygenerować 2 wiadomości, z których jedna jest ZŁA, a druga jest DOBRA i obie mają tę samą wartość. ( Atak kolizyjny )

Niemniej jednak, obecnym zaleceniem RSA jest, aby nie używać MD5, jeśli potrzebujesz odporności przed obrazem. Jeśli chodzi o algorytmy bezpieczeństwa, ludzie mają skłonność do nadmiernej ostrożności.

Więc jakiej funkcji skrótu powinienem używać w .NET?

  • Użyj MD5, jeśli potrzebujesz szybkości / rozmiaru i nie przejmujesz się atakami urodzinowymi lub atakami przed obrazem.

Powtórz to po mnie, nie ma szans na kolizje MD5 , złośliwe kolizje można starannie zaprojektować. Mimo że do tej pory nie są znane żadne ataki typu pre-image na MD5, eksperci ds. Bezpieczeństwa twierdzą, że MD5 nie powinno być używane tam, gdzie trzeba bronić się przed atakami sprzed aktualizacji obrazu. SAME dotyczy SHA1 .

Pamiętaj, że nie wszystkie algorytmy muszą bronić się przed atakami przed obrazem lub kolizjami. Weźmy trywialny przypadek pierwszego przejścia w poszukiwaniu duplikatów plików na dysku twardym.

  • Użyj funkcji opartej na SHA2XX, jeśli chcesz kryptograficznie bezpiecznej funkcji skrótu.

Nikt nigdy nie znalazł kolizji SHA512. ZAWSZE. Bardzo się starali. Zresztą nikt nigdy nie znalazł kolizji SHA256 lub 384. .

  • Nie używaj SHA1 ani RIPEMD, chyba że jest to scenariusz współdziałania.

RIPMED nie otrzymał takiej kontroli, jaką otrzymały SHAX i MD5. Zarówno SHA1, jak i RIPEMD są podatne na ataki urodzinowe. Oba są wolniejsze niż MD5 na platformie .NET i mają niewygodne 20 bajtów. Nie ma sensu korzystać z tych funkcji, zapomnij o nich.

Ataki kolizyjne SHA1 są ograniczone do 2 ^ 52, nie potrwa to zbyt długo, dopóki kolizje SHA1 nie pojawią się na wolności.

Aby uzyskać aktualne informacje na temat różnych funkcji skrótu, zajrzyj do zoo funkcji skrótu .

Ale poczekaj, jest więcej

Posiadanie szybkiej funkcji skrótu może być przekleństwem. Na przykład: bardzo powszechnym zastosowaniem funkcji skrótu jest przechowywanie haseł. Zasadniczo obliczasz skrót hasła w połączeniu ze znanym losowym ciągiem znaków (aby utrudnić ataki tęczowe) i przechowujesz ten skrót w bazie danych.

Problem polega na tym, że jeśli napastnik otrzyma zrzut bazy danych, może dość skutecznie odgadnąć hasła za pomocą brutalnej siły. Każda kombinacja, którą próbuje, zajmuje tylko ułamek milisekundy, a on może wypróbować setki tysięcy haseł na sekundę.

Aby obejść ten problem, można użyć algorytmu bcrypt , który został zaprojektowany tak, aby był powolny, więc atakujący będzie znacznie spowolniony, jeśli zaatakuje system za pomocą bcrypt. Ostatnio scrypt znalazł się w nagłówku i przez niektórych jest uważany za bardziej skuteczny niż bcrypt, ale nie znam implementacji .Net.

Sam Saffron
źródło
Podczas gdy zarówno MD5, jak i SHA-1 zostały osłabione, MD5 jest znacznie słabsze niż SHA-1, ale tylko nieznacznie szybsze. Rzeczywiste kolizje MD5 zostały znalezione i wykorzystane w rzeczywistych exploitach (fałszowanie certyfikatów CA), ale o ile wiem, nie znaleziono żadnych rzeczywistych kolizji SHA-1 (chociaż liczba operacji została znacznie zmniejszona dzięki brutalnej sile). Biorąc pod uwagę, o ile słabsze jest MD5, nie zdziwiłbym się, gdyby drugie ataki przedobrazowe pojawiły się wcześniej dla MD5 niż dla SHA-1. Dlatego myślę, że powinieneś użyć SHA-1, jeśli potrzebujesz prędkości, a nie odporności na kolizje, a poza tym użyj jednej z rodziny SHA-2.
Brian Campbell
1
@Brian jest dość jasne, że w ciągu najbliższych kilku lat ludzie będą mogli przeprowadzać ataki kolizyjne na SHA1, to skutecznie sprawi, że SHA1 będzie równie przydatny jak MD5, Certyfikat CA to atak kolizyjny, podobnie za kilka lat ludzie będą mogli przeprowadzić ten sam atak na certyfikaty SHA1 CA. Atak polega na tym, że złośliwa strona tworzy ZŁO i DOBRY certyfikat. Nie są znane żadne ataki primage na MD5, a fakt, że istnieją ataki kolizyjne, nie zwiększa ani nie zwiększa prawdopodobieństwa ataków typu pre-image.
Sam Saffron
O wiele mniej chodzi o to, którego skrótu używasz do haseł, niż o tym, co jest haszowane. Jeśli twoja sól jest znana, twoja baza danych jest natychmiast narażona na atak słownikowy; jeśli twoja sól jest proceduralna, a twój system plików jest zagrożony, jesteś (znowu) podatny na ataki; jeśli twoja sól zostanie pominięta, znowu jesteś zagrożony. Kwestią bezpieczeństwa jest bez względu na wszystko, CO jest hashowane. Certyfikatów nie będę się odnosić, ponieważ nie zajmowałem się nimi jako programista (IE, tworzenie, rozumienie itp.).
Robert K
Termin zepsuty ma określone znaczenie w kontekście haszowania i nie jest to znaczenie, na które kładzie nacisk ta odpowiedź. Wszystko to spowoduje zamieszanie.
Joel McBeth
1
To doskonała odpowiedź, ponieważ stawia na praktyczność. Hashe są używane do rzeczy innych niż bezpieczeństwo (takich jak generowanie kluczy wyszukiwania pamięci podręcznej dla danych niewrażliwych lub określanie, czy obiekt serializowany uległ zmianie). Szanse na atak ukierunkowany są praktycznie zerowe (nigdy nie mów nigdy), a nawet jeśli atak się powiedzie, nie będzie miał istotnego wpływu. Świetna praca skupiająca się na praktycznym (zamiast teoretycznym) wpływie.
DVK
35

Aktualizacja:

Czasy się zmieniły, mamy zwycięzcę SHA3. Polecam użycie keccak (aka SHA3 ) zwycięzcy konkursu SHA3.

Oryginalna odpowiedź:

W kolejności od najsłabszego do najsilniejszego powiedziałbym:

  1. RIPEMD BROKEN, nigdy nie powinien być używany, jak widać w tym pliku PDF
  2. MD-5 BROKEN, nigdy nie powinien być używany, można go zepsuć w 2 minuty za pomocą laptopa
  3. SHA-1 BROKEN, nigdy nie powinien być używany, jest zasadniczo uszkodzony, ataki są coraz lepsze z tygodnia na tydzień
  4. SHA-2 WEAK, prawdopodobnie zostanie uszkodzony w ciągu najbliższych kilku lat. Odkryto kilka słabych punktów. Zauważ, że generalnie im większy rozmiar klucza, tym trudniej jest złamać funkcję skrótu. Chociaż rozmiar klucza = siła nie zawsze jest prawdą, w większości jest prawdą. Więc SHA-256 jest prawdopodobnie słabszy niż SHA-512.
  5. Skein NO KNOWN WEAKNESSES, jest kandydatem do SHA-3 . Jest dość nowy i dlatego niesprawdzony. Został zaimplementowany w kilku językach.
  6. MD6 NIE ZNANE SŁABE STRONY, jest kolejnym kandydatem do SHA-3. Prawdopodobnie silniejszy niż Skien, ale wolniejszy na komputerach jednordzeniowych. Podobnie jak Skien jest niesprawdzony. Niektórzy programiści dbający o bezpieczeństwo używają go w kluczowych rolach .

Osobiście użyłbym MD6, ponieważ nigdy nie można być zbyt paranoikiem. Jeśli szybkość jest prawdziwym problemem, spojrzę na Skein lub SHA-256.

Ethan Heilman
źródło
5
Nie umieściłbym Skeina i MD6 tak wysoko na liście; jest powód, dla którego konkurs SHA-3 nie zakończy się przed końcem 2012 roku. Potrzeba dużo czasu i wielu oczu, aby przekonać się, że funkcja skrótu prawdopodobnie będzie bezpieczna, a żadna z tych funkcji już wystarczająco długo.
Eric Burnett
Zgadzam się z twoimi odczuciami, ale myślę, że społeczność jest w dziwnej sytuacji. Wszystkie używane funkcje hashujące są niebezpiecznie bliskie zepsucia (może, może nie SHA2 256-512), a jednak musimy poczekać do 2012 roku, aby wybrać zamiennik. wybierz swoją truciznę: słaba / zepsuta lub niesprawdzona (większość kandydatów do NIST nie była publiczna od ponad 6 miesięcy)? Trudny wybór.
Ethan Heilman
5
RIPEMD jest uszkodzony, ale RIPEMD-128/160/256 jest inny i nie jest uszkodzony.
Bwooce,
Nie znam żadnych wydajnych implementacji Skein dla .NET. Natknąłem się na SkeinFish i nskein i oba były bardzo powolne.
Cocowalla
1
Zaczekałbym z użyciem SHA-3, aż pojawi się rzeczywisty standard, przynajmniej jeśli chcesz faktycznie przestrzegać standardu. Sam algorytm ma zbyt wiele opcji.
Paŭlo Ebermann
3

W obronie MD5 nie ma znanego sposobu na utworzenie pliku z dowolnym hashem MD5. Oryginalny autor musi z wyprzedzeniem zaplanować kolizję roboczą. Tak więc, jeśli odbiorca ufa nadawcy, MD5 jest w porządku. MD5 jest zepsuty, jeśli osoba podpisująca jest złośliwa, ale nie wiadomo, czy jest podatna na ataki typu man-in-the-middle.

rlbond
źródło
1
Chociaż w żadnym wypadku nie jestem ekspertem w tej dziedzinie, czy nie jest obecnie bliskie obliczenie arbitralnych skrótów MD5 przy użyciu brutalnej siły?
mafu
@mafu: Późna odpowiedź tutaj, ale możliwe jest obliczenie dowolnego skrótu za pomocą brutalnej siły. To może zająć naprawdę dużo czasu.
Warty
@ItzWarty Mówiłem konkretnie o potrzebnym czasie - skoro MD5 jest dość krótki, pomyślałem, że można po prostu wrzucić na niego rozsądne źródło obliczeniowe (E3, lub tania sieć komputerowa kilka maszyn z kilkoma kartami graficznymi, coś wzdłuż tych linii) i być w stanie obliczyć dowolny skrót MD5 w ciągu, powiedzmy, kilku dni.
mafu
@mafu Atak przed obrazem kosztuje 2 ^ 127 wywołań skrótu dla 128-bitowego skrótu. To jest dalekie od wykonalności. 2 ^ 80 wywołań jest wykonalnych, ale już bardzo kosztownych.
CodesInChaos
2

To, którego używasz, naprawdę zależy od tego, do czego go używasz. Jeśli chcesz tylko upewnić się, że pliki nie zostaną uszkodzone podczas przesyłania i nie przejmujesz się zbytnio bezpieczeństwem, wybierz szybkie i małe. Jeśli potrzebujesz podpisów cyfrowych do federalnych umów ratunkowych o wartości wielu miliardów dolarów i chcesz mieć pewność, że nie są one sfałszowane, podejmij trudną do podrobienia i powolną.

tvanfosson
źródło
1
Wiele razy podczas omawiania rozwiązań problemu, o którym wspominam, używam MD5 do szybkiej identyfikacji (haszowania łańcucha), mówią "ale md5 jest zepsuty ... nie używaj go, użyj sha1" ... Naprawdę nie subskrybuję tego, zastanawiałem się jeśli coś jest tak fundamentalnie zepsute z niektórymi słabszymi hashami, że należy ich unikać ... np. rzeczywiste przypadki pracy, w których normalne dane powodują kolizje
Sam Saffron
Widząc, że MD5 działało dobrze dla milionów ludzi przez piętnaście lat, podejrzewam, że jest w porządku, jeśli ochrona hash nie jest kluczowa.
mqp
2
@sambo MD5 działa dobrze w prawie każdym przypadku, z wyjątkiem sytuacji, gdy rzeczywiste bezpieczeństwo / integralność systemu zależy od zapobiegania kolizjom.
Rex M
2

Chciałbym powiedzieć (zanim md5 się rozpadnie), że nadal intensywnie używam md5, pomimo jego przytłaczającej awarii dla wielu kryptowalut.

Tak długo, jak nie zależy ci na ochronie przed kolizjami (nadal możesz bezpiecznie używać md5 również w hmac) i chcesz mieć prędkość (czasami wolisz wolniejszy hash), nadal możesz śmiało używać md5.

Mike Boers
źródło
@Mike, jestem z tobą w tej sprawie, to było coś, czego szukałem w tym pytaniu, jest czymś o słabszych funkcjach skrótu tak fundamentalnie zepsutych, że nigdy nie powinny być używane.
Sam Saffron
Co więcej, jeśli dane lub wymagane bezpieczeństwo danych mają żywotność krótszą niż okres pęknięcia (kilka minut obecnie iirc), MD5 jest absolutnie w porządku. Chodzi o to, że jest użyteczne sytuacyjnie, ale nadal przydatne.
annakata
@annakata - pamiętaj, że musisz także unikać ponownego używania kluczy w wielu wiadomościach, aby można było z nich korzystać w takich okolicznościach.
Steve Westbrook
2

Byłoby dobrym pomysłem przyjrzenie się algorytmowi BLAKE2 .

Jak opisano, jest szybszy niż MD5 i co najmniej tak samo bezpieczny jak SHA-3. Jest również wdrażany przez kilka aplikacji , w tym WinRar.

Florin Mircea
źródło
Może być szybszy, z wyjątkiem wielu implementacji obsługujących sprzęt, co sprawia, że ​​SHA-256 jest dość szybki.
zaph
Zgadzam się. od 2019 roku Blake2b jest najlepszym dotychczas wydanym hashem ogólnego przeznaczenia. Znacznie szybszy niż wszystkie inne alternatywy i nie mniej bezpieczny (przynajmniej nie w żaden znaczący sposób) i może być wykonany w zaledwie 336 bajtach pamięci RAM (168 dla blake2s), och, i jest zoptymalizowany pod kątem procesorów little-endian, co jest dominujący endian w dzisiejszych systemach.
hanshenrik
0

Nie jestem ekspertem w tego typu sprawach, ale nadążam za społecznością zajmującą się bezpieczeństwem i wiele osób uważa, że ​​hash md5 jest uszkodzony. Powiedziałbym, że to, którego użyć, zależy od wrażliwości danych i konkretnej aplikacji. Możesz być w stanie uciec z nieco mniej bezpiecznym hashem, o ile klucz jest dobry i mocny.

blueintegral
źródło
1
funkcje skrótu zazwyczaj nie używają kluczy
Ethan Heilman
0

Oto moje sugestie dla Ciebie:

  1. Prawdopodobnie powinieneś zapomnieć o MD5, jeśli spodziewasz się ataków. Jest wiele tęczowych tabel Internecie jest dla nich , a korporacje takie jak RIAA są znane z tego, że są w stanie tworzyć sekwencje z równoważnymi hashami.
  2. Użyj soliJeśli możesz, . Uwzględnienie długości wiadomości w wiadomości może bardzo utrudnić wykonanie użytecznej kolizji wartości skrótu.
  3. Zgodnie z ogólną zasadą, więcej bitów oznacza mniej kolizji (zgodnie z zasadą szufladki) oraz wolniejsze i być może bezpieczniejsze (chyba że jesteś geniuszem matematycznym, który potrafi znaleźć luki w zabezpieczeniach).

Zobacz tutaj artykuł szczegółowo opisujący algorytm tworzenia kolizji md5 w 31 sekund z komputerem stacjonarnym Intel P4.

http://eprint.iacr.org/2006/105

Nieznany
źródło
Ten komentarz jest bardzo stary i wydaje się raczej pogrzebany, ale ten fragment - RIAA był znany z tego, że był w stanie tworzyć sekwencje z równoważnymi hashami - rzucił się na mnie i jestem bardzo ciekawy, jaki był tego kontekst. W szczególności brutalne forsowanie MD5 8 lat temu było trochę mniej trywialne niż w 2017 roku, więc musieli mieć całkiem dobry powód.
i336_