PHP Manual
/
Sikkerhed

Sådan bryder du md5-funktionen

23. 08. 2019

Obsah článku

MD5 er en meget almindeligt anvendt funktion til beregning af hashes.

Nybegyndere bruger den ofte til password hashing, hvilket ikke er en god idé, da der er mange måder at hente den oprindelige adgangskode på.

Denne artikel beskriver specifikke metoder til at gøre det.

Tidskompleksitet

Al sikkerhed er baseret på det faktum, at det tager uforholdsmæssigt lang tid at prøve alle adgangskoder. Det burde den også. Problemet med md5()-algoritmen er især, at det er en meget hurtig funktion. På en normal computer er det ikke noget problem at beregne over en million hashes i sekundet.

Hvis vi bryder adgangskoden ved at prøve kombinationer én efter én, er det et brute force-angreb.

Metoder til krakning

Der er flere strategier:

  • Successiv trial-and-error-testning (brute force-angreb)
  • Test af ordbogsadgangskoder
  • Regnbuetabeller (forudberegnet hash-database)
  • Søgninger på Google
  • Kollisioner i algoritmen

Der findes mange flere metoder, men denne artikel beskriver kun de mest almindelige.

Brute force-brudstrategier

Alle kombinationer af bogstaver, tal og andre tegn afprøves én ad gangen.

De genererede forsøg hashes en efter en og sammenlignes med den oprindelige hash.

Så for eksempel:

aaaaaaabaaacaaadaaaeaaaf...

Problemet med dette angreb ligger i selve md5()-algoritmen: Hvis vi kun skulle prøve de små bogstaver i det engelske alfabet og tal, ville det højst tage ti minutter at prøve alle kombinationer på en almindelig tilgængelig computer.

Det er derfor vigtigt at vælge lange passwords, helst tilfældige passwords med specialtegn.

Strategi for angreb med ordbøger

Folk vælger normalt svage adgangskoder, der findes i ordbogen.

Hvis vi udnytter dette faktum, kan vi hurtigt udelukke usandsynlige varianter som 6w1SCq5cs og i stedet gætte på eksisterende ord.

Desuden ved vi fra tidligere password-lækager fra store virksomheder, at brugerne vælger et stort bogstav i begyndelsen af passwordet og et tal i slutningen. Lad os se - har din adgangskode også det? :)

Regnbuetabeller - forudberegnet database

Da en adgangskode altid svarer til den samme hash, er det let at genberegne en stor database, hvor adgangskoderne søges først.

Faktisk er det altid meget hurtigere at søge end at søge i hashes igen og igen.

Ved større datalækager kan adgangskoder desuden hashes parallelt på denne måde, og f.eks. kan 10 % af alle brugernes adgangskoder hurtigt hentes frem.

En god passworddatabase er f.eks. Crack Station.

Google-søgning

Mange enkle adgangskoder er kendt direkte af Google, fordi Google indekserer sider, der indeholder hashes.

Jeg bruger altid Google som min første mulighed. :)

Findning af kollisioner i algoritmen

Dirichlet-princippet beskriver, at hvis vi har et sæt hash-koder, der altid er 32 tegn lange, så er der mindst to forskellige adgangskoder på 33 tegn (en længere), der genererer den samme hash.

I praksis giver det ikke mening at lede efter kollisioner, men nogle gange gør programforfatteren selv gætteriet lettere ved at genberegne kollisionerne.

For eksempel:

$password = 'adgangskode';
for ($i = 0; $i <= 1000; $i++) {
$password = md5($password);
}
echo $password; // 1000x hashed via md5()

I dette tilfælde giver det mening at gætte på kollisionen i stedet for den oprindelige hash.

Skål for at smøre!

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
3.
Status:
All systems normal.
2024