1 van 2

Volledige md5 database

Geplaatst: vr 09 nov 2007, 19:14
door MRDavidSingh3
Php kan een (wacht)woord coderen naar een md5 hashwaarde

bijvoorbeeld

echo md5("wetenschapsforum");

wordt: f6f072194c4d8a021dcdd7b96682b1f8

de hashwaarde bestaat altijd uit 32 karakters en de mogelijkheid dat 2 woorden dezelfde hashwaarde uitkomen bestaat, maar valt te verwaarlozen.

Als je een hashwaarde van een wachtwoord te weten komt dat je nodig hebt, kun je een dictionary attack gaan uitvoeren op de hashwaarde,

dan zoekt een programma of script, alle text strings met de ingevoerde hash waarde.

Maar als het wachtwoord qsdf54851ezr is, dan heeft een woordenboek hoogst waarschijnlijk dat woord en de hash waarde ervan niet opgeslagen in zijn database.

Nu zou je in theorie met php een script kunnen opstellen die een database maakt van bijvoorbeeld, alle mogelijke text strings met maximaal tien willekeurige karakters, als je er meer dan tien neemt wordt de database te groot.

In praktijk kan je onmogelijk een database gaan opstellen die alle mogelijke strings + de md5 ervan heeft, want als je even doorrekent, dan kan je de grootte van al die mogelijke wachtwoorden achterhalen:

Dit is een berekening die alle mogelijke text strings voor 1-10 karakters lang:

mogelijke karakters: (a-z), (A-Z), (0-9);

totaal # mogelijke karakters: 62

som van mogelijke lengte string: 55

Code: Selecteer alles

lengte string:	aantal mogelijkheden (y)

x

 62^x

1

 62

2		 		3844

3		 		238328

4		 		14776336

5		 		916132832

6		 		56800235584

7		 		3521614606208

8		 		218340105584896

9		 		13537086546263552

10

839299365868340224

totaal

3,8154250121056239347367978331257e+98

totaal grootte (in bytes):

3,8154250121056239347367978331257e+98 mogelijkheden met een totaal van 55 verschillende tekens:

(62^55)*55 =2,098483756658093164105238808219e+100 bytes

bits 1.67878700532647e+34 

bytes 2.09848375665809e+33 

kilobits 1.63944043488914e+31 

kilobytes 2.04930054361142e+30 

megabits 1.60101604969642e+28 

megabytes 2.00127006212053e+27 

gigabits 1.56349223603166e+25 

gigabytes 1.95436529503958e+24 

terabytes 1.90855985843709e+21 

petabytes 1.86382798675497e+18 

dit is de totale grootte van de database die alle mogelijke strings met de beperking, dat ze uit de karakters (a-z), (A-Z) en (0-9) bestaan, en dat de maximale grootte maar 10 karakters lang is.
weet iemand hiervoor een oplossing? ik probeer een md5 kraker te maken, in php.

ik dacht aan een script, je voert een hashwaarde in en dan gaat het script alle mogelijkheden af, zonder dat deze in een database zitten. het script maakt de mogelijkheden dus live, een voor een en berekent de hashwaarde ervoor, tot het een match vindt met de invoer. maar ik weet niet of en hoe dit mogelijk is en of het in praktijk ook kan worden toegepast, (geheugen errors, berekentijd,...)

graag jullie mening hierover

Re: Volledige md5 database

Geplaatst: za 10 nov 2007, 16:06
door Cycloon
Het is wel doenbaar, en de berekentijd zal volledig afhangen van de rekenkracht die je voor handen hebt en de efficiëntie van je programma. Maar ik kan je verzekeren dat dit zeker niet niks zal zijn als je dit op je eigen PC wilt gaan uitvoeren. Het is zeker wel een realistisch iets vermits dit soort technieken ook echt worden gebruikt om logins van mensen te achterhalen.

Re: Volledige md5 database

Geplaatst: zo 11 nov 2007, 00:34
door MRDavidSingh3
Maar je kan loginsystemen er ook volledig tegen beveiligen:

Nu heb je twee halve md5 waarden, die je onmogelijk kan achterhalen, want zelfs met een aanval die ik hierboven beschreef kom je een volledig andere string uit. Maar zitten er in dit login systeem nog gaten? waarschijnlijk wel want ik ben nog maar een paar maanden bezig met php.

Code: Selecteer alles

<?php

/*

new_user.php

*/

$usr=$_POST['username'];

$pwd=$_POST['password'];

$md5_usr=md5($usr);

$md5_pwd=md5($pwd);

$hash_pwd=substr($md5_usr,0,16);

$hash_pwd+=substr($md5_pwd,16,32);

/*

voeg $usr en $hash_pwd toe aan database;

*/

?>

Code: Selecteer alles

<?

/*

Login.php

*/

$usr=$_POST['username'];

$pwd=$_POST['password'];

$md5_usr=md5($usr);

$md5_pwd=md5($pwd);

$hash_pwd=substr($md5_usr,0,16);

$hash_pwd+=substr($md5_pwd,16,32);

/*

Zoek de naam $usr met wachtwoord $hash_pwd op in de database

*/

?>

Re: Volledige md5 database

Geplaatst: zo 11 nov 2007, 10:33
door Cycloon
Je moet er wel rekening mee houden dat men dit eerste systeem enkel kan doen indien men in je database kon kijken en hash keys kon stelen. Natuurlijk als iemand ook op je server kan geraken en die zit je manier van coderen dan is het heus niet zo moeilijk om die ook te achterhalen. Anyway, als hij dus in je DB geraakt dan kan hij de usernames stelen + hashkeys. Het enige wat die dan nog hoeft te doen is een wachtwoord zoeken waarvan de de laatste 16 md5 karakters overeenkomen met de hashkey (de username heeft die zoiezo al). Dus naar gelang wat hij te zien kan krijgen tijdens het hacken zal de 2de manier niet echt beter zijn, op sommige momenten zal het dus onveiliger zijn omdat de kans om een string te vinden waarvan de laatste 16 md5 karakters overeenkomen veel makkelijker is dan een hele md5 string zoeken.

Re: Volledige md5 database

Geplaatst: zo 11 nov 2007, 14:52
door MRDavidSingh3
Is het vinden van de originele string van een halve hashwaarde wel makkelijker dan bij een hele hashwaarde? dan moet je toch de eerste 16 tekens zelf gaan invullen en dan ben je eigenlijk zelf waardes aan het verzinnen... een hash decrypter kan de originele string toch niet meer terugvinden. En een hacker moet ook je manier van coderen weten dus moet hij ten eerste een mysql injectie doen om de db te lezen en hij moet op de server binnenraken om je php bestanden te lezen. en hij zal waarschijnlijk ten eerste je db willen kraken omdat dat de efficientste manier is om login gegevens te achterhalen, en als hem dat lukt zal hij een username en een hash waarde vinden. Waarom zou hij vermoeden dat de hash waarde eigenlijk twee halve hashwaardes zijn? Als hij die hashwaarde decrypt bekomt hij een heel ander resultaat dan het originele string. Dus volgens mij is deze manier wel veilig, tenzij je hacker zeer ruimdenkend is.

Re: Volledige md5 database

Geplaatst: zo 11 nov 2007, 15:18
door Rogier
Is het vinden van de originele string van een halve hashwaarde wel makkelijker dan bij een hele hashwaarde?
Wel als je gaat brute-forcen, want dan heb je 264 = ruim 18 triljoen keer zo weinig tijd nodig.

Re: Volledige md5 database

Geplaatst: zo 11 nov 2007, 15:40
door MRDavidSingh3
Akkoord maar de hacker moet wel weten dat het twee halve hashwaarden zijn. het lijkt immers op 1 geheel.

Maar als hij die kan decrypten en het werkt niet, dan zal hij uiteraard vermoeden dat het geen hashwaarde van een string is en zal hij proberen de server binnen te geraken om te ontdekken hoe de hashwaarde is opgesteld. maar daarom lijkt het me wel een betere manier want als de hashwaarde in de database gewoon de md5 van het paswoord was, dan had de hacker al veel eerder de juiste string kunnen ontcijferen. Kennen jullie dan een betere manier om je wachtwoord te coderen?

Re: Volledige md5 database

Geplaatst: zo 11 nov 2007, 16:38
door Rogier
Je moet er vanuit gaan dat een hacker weet welke dingen je precies opslaat of wat je hasht, en dan geen dingen doen die een brute force aanval korter maken. Twee halve hashes in plaats van één hele is dus geen goed idee.

Een sha1 of md5 hash is veilig, mits je fatsoenlijke passwords gebruikt. Ik zou dus in de eerste plaatst m'n gebruikers aansporen om passwords van minstens 10 karakters te gebruiken, met Hoofd- en kleine letters en cijfers en wat leestekens door elkaar.

Misschien iets als sha1(md5(password)+username), dus een md5-hash van het password, daar de username achter geplakt, en van dat geheel een sha1 hash.

Verder kan het nooit kwaad om in je validatie procedure een vertraging (sleep, delay, of hoe het in je favoriete programmeertaal ook heet) van een tiende seconde te zetten. Maakt voor normale gebuikers geen verschil, maar van afstand brute forcen is dan wel afgelopen.

Re: Volledige md5 database

Geplaatst: zo 11 nov 2007, 18:09
door MRDavidSingh3
Ik heb geen id hoe ik dat van die delay moet instellen bij php maar ik dacht net aan een iets veiliger script:

Code: Selecteer alles

<?

 $hash=sha1(md5($password).$username);

 for($i=0; $i<1000000; $i++)

 {

  $hash=md5($hash);

 }

?>
deze code en dat van die delay, dan moet de hacker eigenlijk handmatig een miljoen keer de ontcijferde hashwaarde opnieuw invullen in zijn bruteforce software. of gaat die berekening teveel tijd in beslag nemen?

Re: Volledige md5 database

Geplaatst: zo 11 nov 2007, 22:21
door MRDavidSingh3
Ik heb de code even zelf uitgeprobeerd, maar ik ben erachter gekomen dat deze helemaal niet gebruiksvriendelijk is omwille van de lange berekentijd. je kan de $i beter op 100 ofzo instellen. dan is het nog steeds moeilijker voor hackers.

Re: Volledige md5 database

Geplaatst: ma 12 nov 2007, 20:26
door Cycloon
Ik heb geen id hoe ik dat van die delay moet instellen bij php.


Die delay moet je inbouwen in je login systeem waarbij mensen die inloggen onder hetzelfde IP 10 seconden moeten wachten om opnieuw in te loggen indien ze een fout wachtwoord gaven. Als men dan gaat brute-forcen dan kan men maar 6 keer proberen per minuut. Je kan dan ook nog doen dat je na 6 foute antwoorden een half uurtje moet wachten natuurlijk.

Re: Volledige md5 database

Geplaatst: ma 12 nov 2007, 22:22
door MRDavidSingh3
Ik heb weinig ervaring met het bouwen van php login systemen, maar ik ga ervanuit dat ik sessies gebruik om de tijd te meten?

Verder heb ik geen idee hoe ik eraan begin, kan iemand me helpen?

Re: Volledige md5 database

Geplaatst: di 13 nov 2007, 12:21
door Miels
Overigens denk ik dat je dan handiger een keer een woordenboek, een namenboek en varianten van datums in een md5-database kan zetten. Een beperking tot "logische" combinaties is veel minder werk dan brute-force alle mogelijke combinaties gebruiken. Ik heb de vrees en het vermoeden dat dat in (ruim?) 90% van de gevallen al werkt.

Re: Volledige md5 database

Geplaatst: di 13 nov 2007, 21:31
door MRDavidSingh3

Code: Selecteer alles

md5("wachtwoord") 701f33b8d1366cde9cb3822256a62c01 

md5("wachtwoort")  4f7b7b36e2192ddbf40e992f12c0eed9


Dit zijn twee bijna dezelfde strings, die een heel andere md5 waarde krijgen, dus strings die lichtjes of volledig afwijken van een bestaand woord of naam in een woordenboek, zul je niet snel vinden met een gewone woordenboek-aanval.

Re: Volledige md5 database

Geplaatst: vr 16 nov 2007, 17:49
door Cycloon
Overigens denk ik dat je dan handiger een keer een woordenboek, een namenboek en varianten van datums in een md5-database kan zetten. Een beperking tot "logische" combinaties is veel minder werk dan brute-force alle mogelijke combinaties gebruiken. Ik heb de vrees en het vermoeden dat dat in (ruim?) 90% van de gevallen al werkt.


Een brute force vereist helemaal niet dat je hetzelfde wachtwoord gebruikt als de gebruiker heeft opgegeven. Het volstaat om een string in te geven die dezelfde md5 creëert. Je kan bij wijze van spreken dezelfde md5 krijgen bij het woord 'de' als bij het woord 'hottentottententententoonstelling'. Een website die dus een md5 hash gebruikt om wachtwoorden op te slaan kan dus meerdere correcte wachtwoorden hebben per account, daarbij hoef je dus helemaal geen woordenboek ofzo gaan te gebruiken omdat je dezelfde md5 waarde al veel vroeger kan tegenkomen met om het even welke string.