TL;DR When opening the container with the master key directly is magnitudes faster than processing the passphrase, why would you continue brute forcing the passphrase above the master key size?
Consider the following…
Create a small image file for the LUKS container…
root@svala:~# dd if=/dev/zero bs=512 count=$((1024*1024)) > luks.container
1048576+0 records in
1048576+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.09705 s, 489 MB/s
Create a stupidly high entropy passphrase (a 96 character length passphrase randomly generated from a 92 character set (~626bit entropy)…
root@svala:~# LC_ALL=C tr -dc 'a-zA-Z0-9!@#$%&*()+=_,./<>?;:"|[]{}~`'"'-" < /dev/random | head -c 96 | tee passphrase; echo
wX"p";2P3Usg&$[hLC3bVz3FP,VFVWpriBFWH0uxj~aR-c%7}z:,Ch@D5]JhlEHo'W(O3(T/#bt`Nc{HH}RV:bGm._$!`6!<
Format the LUKS container…
root@svala:~# cryptsetup luksFormat -q --pbkdf argon2id --key-size 512 luks.container passphrase
Check the header for cipher key size (512bit) etc,…
root@svala:~# cryptsetup luksDump luks.container
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: e678c1a4-510c-4615-97a9-946b7884d9d2
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2id
Time cost: 5
Memory: 1048576
Threads: 4
Salt: 2c bc f0 4c ce 98 67 ca cb b0 b5 ba f6 e4 f5 72
8c 97 2c 0e 69 8e 05 4c 2e 47 c4 b3 14 6c 54 bf
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 144830
Salt: 8c 68 ed 1b 5c 32 a7 7b 59 dd f5 49 7f 3f 84 85
f9 4d 61 33 b6 f6 cb 76 db 37 fe d5 80 01 14 77
Digest: fe 76 ec bb 1c c1 cc 50 e9 44 17 e1 69 f3 6b 4e
d6 7f db 67 bb d7 a0 7e c4 6d 99 78 ed fb 69 ac
Extract the LUKS container master key…
root@svala:~# cryptsetup luksDump -q --key-file passphrase --dump-master-key --master-key-file masterkey.bin luks.container
LUKS header information for luks.container
Cipher name: aes
Cipher mode: xts-plain64
Payload offset: 32768
UUID: e678c1a4-510c-4615-97a9-946b7884d9d2
MK bits: 512
Key stored to file masterkey.bin.
Check master key as readable hex (128 characters from a character set size of 16 (a-f + 0-9) confirms 512bit)…
root@svala:~# xxd -p -c 64 < masterkey.bin
794ed357c17233232034a5e989d130eed5c558f4edfe871d1900ec4990b02e1c98a42576f4153d85b44e981a4e0e09db0af38914e3bcf01c1a4ef2952a18a387
Time passphrase processing by open LUKS container with passphrase…
root@svala:~# time cryptsetup open --key-file passphrase luks.container luks_opened
real 0m1.857s
user 0m5.466s
sys 0m0.272s
root@svala:~# cryptsetup close luks_opened
Time opening of LUKS container using master key directly…
root@svala:~# time cryptsetup open --master-key-file masterkey.bin luks.container luks_opened
real 0m0.213s
user 0m0.108s
sys 0m0.016s
root@svala:~# cryptsetup close luks_opened
Regardless of whether you use “real” or “user” metrics, opening the container with the master key directly is magnitudes faster than processing the passphrase, why would you continue brute forcing the passphrase above 512bit incurring a time penalty that doesn’t exist if you went directly with the master key?