Visa ett inlägg
Oläst 2008-07-28, 16:05 #11
SimonPs avatar
SimonP SimonP är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2006
Inlägg: 832
SimonP SimonP är inte uppkopplad
Mycket flitig postare
SimonPs avatar
 
Reg.datum: May 2006
Inlägg: 832
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.
SimonP är inte uppkopplad   Svara med citatSvara med citat