Unlocking a vault
Passphrase, FIDO2, TPM 2.0, Secure Enclave, hybrid-PQ and deniable unlock from the GUI.
The Unlock view appears when you open an existing vault, click a
recent-vault entry, use Type path manually..., or launch
luksbox-gui /path/to/my.lbx. It has three parts:
- At the top, the vault path (editable, with Browse...) and the Unlock button on the right.
- On the left, the Sidecars section (detached header, anchor, recovery mode, deniable header), the Method list, and below it the fields the selected method needs.
- On the right, the KEYSLOTS IN THIS VAULT panel.

Choosing the unlock method
Whenever the vault path in the form changes (a recent entry, Browse... or a typed path), LUKSbox reads the vault's keyslot table from its unencrypted header and (0.6.0+):
- lists every slot in use in the KEYSLOTS IN THIS VAULT panel, for
example
slot 0: passphrase, with unlock with: ... under it naming the method that opens that slot (or cannot be opened on this operating system, for example a TPM slot on macOS); - switches the Method to one that opens one of the slots, when the selected method opens none of them;
- if you then pick a method that opens none of the slots, warns under the method list: None of this vault's keyslots opens with this method; use "..."., with a Switch to it button.
| Method | Opens these slots |
|---|---|
| Passphrase | passphrase |
| FIDO2 security key | FIDO2 (wrap), FIDO2-direct |
| Hybrid passphrase + ML-KEM (post-quantum) | passphrase + ML-KEM-768 / ML-KEM-1024 |
| Hybrid FIDO2 + ML-KEM (post-quantum, authenticator + .kyber) | FIDO2 + ML-KEM-768 / ML-KEM-1024 |
| TPM 2.0 (this machine) | TPM 2.0 |
| TPM 2.0 + PIN (this machine + memorised PIN) | TPM 2.0 + PIN |
| TPM 2.0 + FIDO2 (this machine AND this authenticator) | TPM 2.0 + FIDO2 |
| Hybrid TPM 2.0 + ML-KEM (PQ + machine-bound) | TPM 2.0 + ML-KEM-768 / ML-KEM-1024 |
| Hybrid TPM 2.0 + FIDO2 + ML-KEM (3 factors) | TPM 2.0 + FIDO2 + ML-KEM-768 / ML-KEM-1024 |
| Secure Enclave (this Mac; also its Touch ID, + FIDO2 and + passphrase slots) | Secure Enclave, Secure Enclave + biometry, and the Secure Enclave + FIDO2 / + passphrase slots |
| Hybrid Secure Enclave + ML-KEM (also its + FIDO2 and + passphrase slots) | the same slots with ML-KEM-768 / ML-KEM-1024 |
Methods this build cannot use are not listed: the TPM 2.0 methods need
a Linux or Windows build with the TPM backend, the Secure Enclave
methods a macOS build with it, the FIDO2 methods a build with FIDO2
support. The ML-KEM parameter set (768 or 1024) is read from the
.hybrid sidecar; you never choose it.
Passphrase unlock
- Check the vault path at the top.
- Type your passphrase in the Passphrase field.
- Click Unlock, or press
Enterin the field. Argon2id runs (0.5 to 4 seconds depending on the vault's KDF preset) while a "Working..." overlay is shown. - On success, you land in the Browser view.
A wrong passphrase gives "no keyslot accepted the provided unlock material". The GUI deliberately doesn't say which slot failed, matching the crypto layer, which tries every keyslot the same way.
FIDO2 unlock
For FIDO2 (wrap) and FIDO2-direct slots: method FIDO2 security key.

- Check the authenticator selected in the sidebar's FIDO2 AUTHENTICATOR picker. Click (refresh) Re-detect if you plugged a key in after starting LUKSbox.
- Type the FIDO2 PIN. On Windows there is no PIN field (0.6.1+): the view shows FIDO2 PIN: Windows asks for it in its own security-key prompt., and you type the PIN there. (Older versions showed a PIN field whose value Windows ignored, so you were asked twice.)
- Click Unlock, then touch the authenticator when asked. Every FIDO2 slot's credential goes into one request, so one touch (on Windows, one prompt) covers whichever enrolled key you present.
- On success, you land in the Browser.
LUKSbox never guesses which authenticator to talk to: the PIN goes only to the one selected in the sidebar (0.6.0+). With more than one plugged in, the picker preselects the first one detected, so check that it is the key you mean before typing the PIN. With none selected the unlock is refused ("... FIDO2 authenticators are present; select one explicitly ..."), and a key unplugged since you picked it gives "selected FIDO2 device (...) is no longer plugged in; re-detect or pick another".
A wrong PIN stops the unlock at once (0.6.0+) instead of moving on to the next FIDO2 slot, which would spend another of the authenticator's 8 PIN retries.
If the vault also has a passphrase keyslot (a backup), pick Passphrase in the method list to use it instead, for example when you lost the key.
Hybrid-PQ unlock
For slots that add an ML-KEM .kyber seed file to a passphrase, a
FIDO2 key, a TPM or a Secure Enclave. Every hybrid method asks for
Path to the .kyber seed file (with Browse...); the classical
factor and the seed file are both required, either alone won't unlock.

- Hybrid passphrase + ML-KEM: Slot passphrase, then the .kyber seed-file passphrase: fill it only if you set a distinct seed-file passphrase when the slot was made, leave it blank to reuse the slot passphrase.
- Hybrid FIDO2 + ML-KEM: FIDO2 PIN (not on Windows, see above), Seed-file passphrase (encrypts the .kyber seed), and Extra slot passphrase (only if one was set when the slot was added; usually blank). The wizard can bind such an extra passphrase into this kind of slot; slots made that way open in the GUI from 0.6.0.
- Hybrid TPM 2.0 + ML-KEM and Hybrid TPM 2.0 + FIDO2 + ML-KEM: the seed-file passphrase (plus the FIDO2 PIN for the 3-factor kind).
Click Unlock; ML-KEM decapsulation, Argon2id and the AEAD unwrap run in sequence.
TPM 2.0 and Secure Enclave unlock
- TPM 2.0 (this machine): nothing to type, the TPM of this machine
unseals the key. On Linux you need access to
/dev/tpmrm0(usually through thetssgroup); Windows needs no setup. - TPM 2.0 + PIN: type the TPM PIN. Wrong PINs count toward the TPM's dictionary-attack lockout. The PIN is sent only to the PIN-protected slots, so a vault with both kinds no longer costs a lockout strike per unlock (0.6.0+).
- Secure Enclave (macOS): plain slots need nothing, Touch ID slots show the Touch ID prompt. For a Secure Enclave + FIDO2 slot fill FIDO2 PIN (only for Secure Enclave + FIDO2 slots); for a Secure Enclave + passphrase slot fill Slot passphrase (only for Secure Enclave + passphrase slots). A vault with plain and fused Secure Enclave slots opens through whichever slot the fields you filled reach (0.6.0+).
- Hybrid Secure Enclave + ML-KEM: the seed-file passphrase and
.kyberpath, plus the FIDO2 PIN or slot passphrase for the fused kinds (a blank slot passphrase reuses the seed-file passphrase).
When a TPM or Secure Enclave unseal fails, the error ends with the reason in parentheses (0.6.0+), for example that the TPM is in dictionary-attack lockout, that the TPM's storage root key does not match the one a pinned slot was sealed under, that Touch ID was cancelled, or that the TPM PIN was wrong.
Deniable open
If the vault was created with deniable mode, tick This vault uses a deniable header (advanced) in the Sidecars section. A deniable vault has no readable header, so the GUI cannot detect it; you tick the box yourself. The form then asks for the Cipher suite (must match create time) and the Argon2id strength (must match create time): in deniable mode these values are part of the secret. The detached-header option is hidden (deniable vaults do not support one); the anchor option stays.
Every method then asks for the envelope passphrase (the Envelope passphrase (deniable - required) field, or the Passphrase field of the Passphrase method). The FIDO2 credential, the hmac salt and the TPM sealed blob are stored inside the slot envelope, so there is nothing else to paste in; you only bring the device (FIDO2 key, TPM, Secure Enclave) the credential uses. Two extra methods, Secure Enclave + FIDO2 (deniable) and Hybrid Secure Enclave + FIDO2 + ML-KEM (deniable), appear only in deniable mode.
Which method? Identify keyslot
The keyslot panel explains that the slot table of a deniable vault is
encrypted, so nothing about it can be read without the envelope
passphrase (0.6.0+). Type the envelope passphrase and choose the cipher
and Argon2id strength, then click Identify keyslot: LUKSbox derives
the envelope key (a few seconds), lists the envelopes that passphrase
opens with their credential type (for example
slot 1: passphrase + FIDO2) and the method to use, and switches to
it. With several envelopes, Use this one picks another. For a TPM
envelope it adds (or TPM 2.0 + PIN if a PIN was set at creation).
Nothing is unlocked or written.
If nothing opens: no envelope opens with this passphrase, cipher and KDF strength (or the file is not a deniable vault).
Errors on the deniable path
- When the passphrase opens an envelope of another credential type
than the selected method, the error names both (0.6.0+):
this passphrase opens a passphrase + FIDO2 envelope (slot 1), not the one the "Passphrase" method expects: choose "FIDO2 security key". - Every other failure (wrong passphrase, wrong cipher, wrong Argon2id strength, corrupted header) gives the same opaque "unlock failed". There is no oracle telling these cases apart.
- Anchor problems are reported specifically: a missing, symlinked or wrong-size anchor file is refused before unlocking, and an anchor that does not belong to the vault gives "Anchor verification failed for ...: the file is the right size but does not decrypt under this vault's master key", so you know which file to swap.
For hybrid-PQ deniable variants the seed-file passphrase field defaults to blank, meaning "reuse the envelope passphrase". Leave it blank if you took the default at create time; fill it if you set a distinct seed-file passphrase for defence in depth.
Recovery mode (read-only, skips broken files)
If a vault that used to open suddenly refuses with metadata blob deserialization failed or per-inode AEAD errors (the
v0.2.1 durability bug
fixed in v0.2.2), tick the "Recovery mode (read-only, skips
broken files)" checkbox on the Open form before clicking Unlock.
The toleration flag installs broken inodes as 0-byte placeholders
during open instead of refusing the whole vault. On success a
modal lists every broken file's path + original size + AEAD-
failure reason so you know what to re-source. The mount is
read-only; the GUI refuses every flush while the recovery report
is active, so the broken inodes are never persisted back to disk
over the original on-disk metadata. Future brute-force recovery
against the original chunks_external pointers stays possible.
Treat recovery mode as a one-shot escape hatch: open, copy out
everything that reads, close, run the broken-vault forensics
workflow on the original .lbx (see the
recovery operations page
for the full flow). The CLI equivalent is
LUKSBOX_TOLERATE_BAD_CHUNK_LISTS=1 luksbox mount ...; the
wizard prompts "Try opening in recovery mode?" on the same
failure.
Errors you might see
| Error | Meaning |
|---|---|
| "no keyslot accepted the provided unlock material" | Wrong passphrase, PIN or key, or a method that matches none of the slots |
| "... (TPM in lockout ...)" and other reasons in parentheses | A TPM or Secure Enclave unseal failed; the reason says why (see above) |
| "unlock failed" | Deniable path: wrong passphrase, cipher, Argon2id strength or file |
| "hybrid mode requires the .kyber seed file path" | A hybrid method with an empty seed-file path |
| "selected FIDO2 device (...) is no longer plugged in" | The authenticator picked in the sidebar was unplugged; re-detect or pick another |
| "Rollback detected: anchor at gen ... > vault at gen ..." | With an anchor: the vault file is an older copy than the one the anchor last saw |
| "header rollback detected: ..." | With an anchor and header format v3: the keyslot table was replaced by an older copy (for example a header backup taken before a revoke) |
| "vault locked by another process" | Another luksbox (CLI or GUI) instance has the vault open and holds its lock |
Performance notes
Unlock time is dominated by Argon2id (the KDF). Typical figures:
- Interactive preset (default for most vaults): 500 ms - 1 sec
- Sensitive preset: 3 - 5 sec
- Custom calibrated (via
--kdf-target-timeat create): whatever was targeted
FIDO2 touch + assert adds 200 ms on top of the KDF. Hybrid-PQ adds another 100 ms for the ML-KEM decapsulation.
If unlock takes much longer than expected (e.g. 10+ seconds for an interactive preset), suspect either disk I/O contention or that the vault was created with a custom high-m_cost target on a faster machine than the one you're unlocking from.