Visa ett inlägg
Oläst 2008-07-28, 16:28 #12
jimmies avatar
jimmie jimmie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 751
jimmie jimmie är inte uppkopplad
Mycket flitig postare
jimmies avatar
 
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!
jimmie är inte uppkopplad   Svara med citatSvara med citat