Cracking WiFi… Faster!
David Hulton <dhulton@openciphers.org>
Johnny Cache <johnycsh@gmail.com>
Beetle <beetle@shmoo.com>
April 16, 2006
2006 © The OpenCiphers Project
Cracking WiFi… Faster!
coWPAtty
Church of WiFi Introduction
WPA Overview
Precomputing tables
Performance
Airbase
jc-aircrack
jc-wepcrack
pico-wepcrack
Performance
Conclusion
Church of Wifi Presentation
April 16, 2006
2006 © The OpenCiphers Project
Introduction to WPA
WiFi Protected Access
April 16, 2006
2006 © The OpenCiphers Project
Introduction to WPA
PSK
MK is your passphrase
It’s run through PBKDF2
to generate the PMK
April 16, 2006
2006 © The OpenCiphers Project
Introduction to WPA
PSK
MK is your passphrase
It’s run through PBKDF2
to generate the PMK
April 16, 2006
2006 © The OpenCiphers Project
Introduction to WPA
PSK
MK is your passphrase
It’s run through PBKDF2
to generate the PMK
April 16, 2006
2006 © The OpenCiphers Project
Introduction to WPA
PBKDF2
unsigned char hash[32];
t = sha1_hmac(MK, SSID, 1);
for(i = 1; i < 4096; i++)
t = sha1_hmac(MK, t);
memcpy(hash, &t, 20);
t = sha1_hmac(MK, SSID, 1);
for(i = 1; i < 4096; i++)
t = sha1_hmac(MK, t);
memcpy(hash + 20, &t, 12);
April 16, 2006
2006 © The OpenCiphers Project
Introduction to WPA
sha1_hmac
sha1(MK ^ 0x5c, sha1(MK ^ 0x36, t));
sha1init(ctx);
ctx = sha1update(ctx, MK ^ 0x36);
ctx = sha1update(ctx, t);
innersha1_ctx = sha1final(ctx);
sha1init(ctx);
ctx = sha1update(ctx, MK ^ 0x5c);
ctx = sha1update(ctx, innersha1_ctx);
outersha1_ctx = sha1final(ctx);
April 16, 2006
2006 © The OpenCiphers Project
Introduction to WPA
sha1_hmac
sha1(MK ^ 0x5c, sha1(MK ^ 0x36, t));
sha1init(ctx);
ctx = sha1update(ctx, MK ^ 0x36);
You can cache
ctx = sha1update(ctx, t);
some of the state
innersha1_ctx = sha1final(ctx);
to reduce the number
of required SHA1’s
sha1init(ctx);
ctx = sha1update(ctx, MK ^ 0x5c);
ctx = sha1update(ctx, innersha1_ctx);
outersha1_ctx = sha1final(ctx);
April 16, 2006
2006 © The OpenCiphers Project
Introduction to WPA
For every possible PMK compute PTK and see