So recently I found an old harddisk I used years ago which is encrypted with LUKS. Bad enough I knew that LUKS is pretty hard to crack, but worse when you don’t remember the passphrase (or password) and you suspect some valuable gems on this disk.
How does LUKS work
What makes LUKS so hard to crack is that PBKDF2 is used to process the passphrase. This means that the passphrase gets hashed over and over again (iteration) to slow down any bruteforcing. On my Fedora 25 workstation I found that my main disk uses over 400'000 iterations. Now let’s see how fast this roughly is.
$ cryptsetup benchmark PBKDF2-sha1 663655 iterations per second for 256-bit key PBKDF2-sha256 905506 iterations per second for 256-bit key PBKDF2-sha512 699983 iterations per second for 256-bit key PBKDF2-ripemd160 402061 iterations per second for 256-bit key PBKDF2-whirlpool 295207 iterations per second for 256-bit key
So we will never get to millions of hashes per second on a CPU. That is good for security and bad for my terrible memory.
How to get hashcat running
I have a NVIDIA GTX 980 running with the
First we need an image of the disk to crack:
sudo dd if=/dev/sdx of=image.dd bs=4M status=progress
(The status=progress flag is purely to show you the remaining time. And how many cups of coffee you can drink.)
Since I’m lazy I choose
kpartx to do the nasty work of finding the offsets
and mounting the image as loopdevice. However, fear not, this will NOT mount
the partitions it will only create the device nodes.
sudo kpartx -v -a image.dd
Now we can investigate the LUKS settings of the partition we are interested in.
$ sudo cryptsetup luksDump /dev/mapper/loop0p2 LUKS header information for /dev/mapper/loop0p2 Version: 1 Cipher name: aes Cipher mode: xts-plain64 Hash spec: sha1 Payload offset: 4096 MK bits: 512 MK digest: 5d 07 88 [...] MK salt: aa b1 c5 [...] MK iterations: 43750 UUID: 10c96981-[...] Key Slot 0: ENABLED Iterations: 175314 Salt: 43 2b d0 [...] Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED
As we see here this older installation of Fedora used a lot fewer iterations (43750) which will obviously be a lot faster than if I had to crack my current installation.
Hashcat received the ability to crack LUKS in 2017. Lucky me I wasn’t interested beforehand in this drive. Also good thing is that Hashcat doesn’t need the whole partition but just its header.
sudo dd if=/dev/mapper/loop0p2 of=luks.header bs=512 count=4097
This header then we can feed to hashcat and in my lack of better options run a full bruteforce attack.
hashcat -a 3 -m 14600 header.luks [...] [s]tatus [p]ause [r]esume [b]ypass [c]heckpoint [q]uit => s Session..........: hashcat Status...........: Running Hash.Type........: LUKS Hash.Target......: header.luks Time.Started.....: Sat May 13 10:48:33 2017 (55 mins, 56 secs) Time.Estimated...: Sat May 13 17:18:28 2017 (5 hours, 33 mins) Guess.Mask.......: ?1?2?2?2?2  Guess.Charset....: -1 ?l?d?u, -2 ?l?d, -3 ?l?d*!$@_, -4 Undefined Guess.Queue......: 5/15 (33.33%) Speed.Dev.#1.....: 2258 H/s (4.71ms) Recovered........: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts Progress.........: 58884096/104136192 (56.55%) Rejected.........: 0/58884096 (0.00%) Restore.Point....: 942080/1679616 (56.09%) Candidates.#1....: Yf86p -> Y58a0 HWMon.Dev.#1.....: Temp: 80c Fan: 83% Util: 97% Core:1316MHz Mem:3004MHz Bus:16
To be honest the time is not really correct since I stopped the processing, rebooted the computer and resumed the processing.
But what we see here is that even though a GTX 980 is crunching the numbers we barely are over 2000 hashes per second. So LUKS should be safe, at least from home cracking and other usual suspects that could steal your harddrive and be interested in getting to your data.
The only thing is of course: The length of the passphrase matters a lot. The longer the more impossible it becomes to crack it provided the algorithm is not broken, the implementation not flawed etc.
My personal highlight though is that I now have a cozy warm place because the GPU is fully blowing out a steady 80°C warm breeze.