 |
Mycket flitig postare
|
|
Reg.datum: Oct 2004
Inlägg: 751
|
|
Mycket flitig postare
Reg.datum: Oct 2004
Inlägg: 751
|
Citat:
Originally posted by SimonP@Jul 28 2008, 15:05
Det är lite svårt att förklara, egentligen måste man kolla på algoritm-koden för att förstå det helt...
Men t.ex MD5 använder 6 st integers för att spara den interna statusen/contexten inuti algoritmen, varje gång man hashar någonting så är det dessa som ändrar värde, förenklat sagt.
Så om jag hashar saltet "4398jdfshjreg85r9t985dsflkjdsfijl98" kommer att integer:na att se ut ungefär så här efter att md5-algoritmens kärna, md5_update, körts igenom:
state[0] = 0x12452301;
state[1] = 0xbfcddb89;
state[2] = 0x18ba0cfe;
state[3] = 0x78325476;
count1=22
count2=3
Sen lägger jag på lösenordet "mittlösenord", efter att md5_update är klar ändras variablerna då till:
state[0] = 0x18442341;
state[1] = 0xebc4db81;
state[2] = 0x634ba0fb;
state[3] = 0x4ee25498;
count1=11
count2=7
Om inget mer skall hashas kör man den sista funktionen (md5_final) för att för fram den slutgiltiga hashsumman.
Internt så består alla hashfunktioner av 3 funktioner, _init(), _update() och _final()
Så för ovanstående exempel blir det alltså nedanstående för att leta efter lösenordet:
Kod:
MD5_CONTEXT ctx;
bruteforce loop
{
ctx = md5_init(NULL);
md5_update(ctx,"4398jdfshjreg85r9t985dsflkjdsfijl98");
md5_update(ctx,brutestring);
summa = md5_final(ctx);
if (summa == myhash) exit;
}
Om jag nu vill snabba upp en bruteforce-attack sparar jag undan värdena i ctx efter hashningen av saltet:
Kod:
MD5_CONTEXT ctx;
MD5_CONTEXT backupctx;
ctx = md5_init(NULL);
// Hasha saltet
md5_update(ctx,"4398jdfshjreg85r9t985dsflkjdsfijl98");
// Spara undan den interna statusen
backupctx = ctx;
bruteforce loop
{
ctx = md5_init(backupctx);
md5_update(ctx,brutestring);
summa= md5_final(ctx);
if (summa == myhash) exit;
}
-----------Ovanstånde är bara Pseudocode-------
Jag slipper nu att köra md5_update två gånger, vilket innebär att jag sparar CPU-tid.
Om man lägger saltet sist är är det går det ej att spara undan den interna statusen på samma sätt eftersom "brutestring" ändras hela tiden.
|
Härligt bra svar!
|