Encryption needs a key: 32 random bytes. People can't remember 32 random bytes, so tools ask for a passphrase and turn it into a key with a key derivation function (KDF). Which KDF is used decides how hard it is for an attacker to guess your passphrase.
Why it has to be slow
Someone who steals an encrypted file or vault can try passphrases offline, as fast as their hardware allows. A good KDF makes each guess expensive: a fraction of a second for you once, billions of times too slow for an attacker running through a word list.
The three you'll meet
| PBKDF2 | bcrypt | Argon2id | |
|---|---|---|---|
| Age | 2000 | 1999 | 2015 (won the Password Hashing Competition) |
| Slows guessing with | Many iterations | Iterations plus a little memory | Iterations and lots of memory |
| Resistance to GPU and custom hardware | Low | Medium | High |
| Tunable memory | No | No (fixed, small) | Yes |
PBKDF2
Runs a hash function (such as SHA-256) many thousands of times. Simple and widely available, but graphics cards can run huge numbers of these in parallel, because each guess needs almost no memory.
bcrypt
Better than PBKDF2 against GPUs thanks to a small memory requirement, and still a solid choice for website login hashes. Its memory use is fixed and small, and it only uses the first 72 bytes of a password.
Argon2id
Designed so each guess needs a chosen amount of memory (tens or hundreds of megabytes) as well as time. Memory is expensive to multiply on GPUs and custom chips, so attackers lose most of their advantage. The "id" variant mixes two approaches to resist both side-channel and trade-off attacks, and is the recommended default today.
What Potent Cipher uses
Your vault passphrase and every .pcipher file passphrase go through Argon2id, starting at 64 MiB of memory and 3 passes. The settings are stored next to the salt, so they can be raised in the future without breaking older files. A random salt per vault or file means attackers can't precompute guesses once and reuse them on everyone.
The part only you control
No KDF rescues "password123". Argon2id multiplies the cost of each guess; a long, random passphrase multiplies the number of guesses. You need both. The full design is on our security page, and the code is open to read.