Veracrypt question

If you make a volume with a good 64char random password and move the mouse to max entropy on the bar and also use a keyfile with also max entropy, and you upload this volume to the internet with your important documentation, what are the odds your data ends up accessed by someone?

They would need to crack the cloud storage service (layer 1) + the 64char (I think maximum) veracrypt volume (layer2) + somehow manage to guess the missing data that the keyfile deliver (layer 3) which is never uploaded into the internet but kept safe on a FDE linux drive.

So basically, could you sleep well at night that important data will not be accessed?

Even if they somehow got the cloud + actual veracrypt passwords, what does it mean if they miss the keyfile? does this impose an actual physical limtation because the header is incomplete without the keyfile thus rendering the volume useless without the keyfile, or is it theoretically possible to guess the missing data that is located on the keyfile?

Also, when creating a keyfile what settings should you use? I used whatever was set there in default.

Im asking this because I have seen people that were anti cloud storage lose all of their files (including financial data, all passwords, everything) because they were paranoid about hosting files online because of potential copies being stored there indefinitely even if you delete them and eventually with quantum computers they may be recoverable. I mean, okay great, this may be a realistic scenario in the future, but having learned about keyfiles, if they require the keyfile, they would be able to access the data without it?

I was considering splitting the volume in half and hosting it in two different providers or something, since I think that makes volume parts useless unless you got both, but the thing is, if a small keyfile does the same, then im set. I just want to know the details on how this works. Please let me know so I can think of the best way to go about it. It would be real handy if you could just store a small keyfile that makes the volume useless without it even in some crazy quantum computer eventual scenario.

1 Like

With a strong password and secure keyfile, your VeraCrypt volume is almost impossible to access without the keyfile, even for advanced attackers. For most people, this setup is overkill unless targeted by high-level threats. It’s incredibly safe for average users. I’d even go as far as to say that it’s an over-sacrifice of convenience if you access it often.

2 Likes

Even without the keyfile, a 64 character password alone would be effectively impossible to crack, even by the most powerful computers known to man kind. That said, that doesn’t mean not to use a key file. Keyfiles can protect against attacks like keyloggers which could record your passwords or malware that only exfiltrates passwords and the likes.

As a side note: obviously do not store your keyfile with the volume itself. You could store it locally on a drive, hide it (like using a random image/text file) in a different cloud storage.

You do not need to split your volume, it obviously would make it harder for your adversary to access, but even the NSA using all resources against a 64 character password and a keyfile would struggle with that alone. You also shouldn’t worry about quantum computers either:

Grover’s algorithm gives a quadratic speed-up against brute-force on symmetric keys: it turns an n-bit key into an effective n/2-bit key. AES-256 (256-bit) thus offers ~128-bit security even against a quantum adversary—far beyond any practical reach today or in the near future.

Header keys are stretched via PBKDF2 (SHA-512) with hundreds of thousands of iterations. A quantum adversary still must run Grover’s search per hash iteration, so your high iteration count multiplies their work just like it does classically.

You have covered your bases well. This is, for all intents and purposes, unbreakable.

3 Likes

So you recommend leaving the default settings for the keyfile creation?

There’s a video on youtube called “Veracrypt Keyfiles and PIM Tutorial | Protect Your Encrypted Data” by “KMDTech” and he changes the default “keyfiles size” from 64 to 1024. I left it at 64. Should I recreate the keyfile with 1024? I guess I will need a new volume.

He also adds an additional 2 keyfiles, an image and audio file. I guess this is overkill and with the randomly generated keyfile is enough, I mean you don’t want those files corrupted and the more keyfiles the higher chances that happen.

And he also adds the PIN as well. I guess this is also not needed with a strong 64+char password and the keyfile. Btw, does veracrypt support 128 char password? There’s some wierd thing I keep reading, about how this works for windows for some reason but for not linux, but I think I tried yesterday with a 128 char password and it did work so maybe they have fixed this.

Then the other question would have been, what about the hashing algorithm for the volumes? Thoughts on cascaded algos? aes+2fish+serpent one sounds good.

Keyfile size beyond 1MB doesn’t matter in Veracrypt.

From VeraCrypt documentation":

The maximum size of a keyfile is not limited; however, only its first 1,048,576 bytes (1 MiB) are processed (all remaining bytes are ignored due to performance issues connected with processing extremely large files). The user can supply one or more keyfiles (the number of keyfiles is not limited).

Given this, “keyfile size” is not the metric that matters. What matters is the entropy of the secret you add via keyfiles plus your password, and the work factor of the KDF. A truly random 64-bit keyfile already makes brute-force infeasible; a “1024-bit keyfile” doesn’t buy you anything practical beyond that, and in VeraCrypt the effective added entropy from keyfiles is capped by the 512‑bit keyfile pool and the KDF anyway. Quantum computers would at best square-root the effort, which still leaves a 64-bit truly random secret far beyond practical attack. So, in essence, you’re fine where you are. It doesn’t matter in any practical sense.

As for the additional keyfiles, that’s completely up to you. I don’t think it’s necessary but based on your threat model you might think it’s very necessary. Before adding more keyfiles, think about where you would store them. You ideally want to store all of them in separate locations and with random data. So for an image, storing them with hundreds of other images would be ideal. Do not make them distinguishable from the other images, ideally you would know exactly which one is your keyfile while following a specific naming convention that if an adversary were to see would not give away that it’s a keyfile.

On top of that, I’d make backups of all the keyfiles you have if you want to be sure you can access that volume.

Personal Iterations Multiplier’s are a great tool for 2 reasons. It acts as a mini secret while also making it more difficult to brute-force your container. If you don’t enter the correct PIM when attempting to mount, even with the right keyfiles and password, it will fail.

  • If using PBKDF2 (SHA‑512/256/BLAKE2s/etc.), PIM scales the number of
    hash iterations.
  • If using Argon2id, PIM scales the memory used and/or the number of passes.

This is how it makes brute-forcing more difficult. Each guess to open the container would be more computationally expensive. Argon2id (if you chose it) adds memory hardness. High PIM can force large memory use per guess, which cripples GPUs/ASICs that rely on massive parallelism.

All containers have default PIMs which are a safe medium.

From VeraCrypt documentation:

When a PIM value is specified, the number of iterations is calculated as follows:

  • For system encryption that doesn’t use SHA-512 or Whirlpool: Iterations = PIM x 2048

  • For system encryption that uses SHA-512 or Whirlpool: Iterations = 15000 + (PIM x 1000)

  • For non-system encryption and file containers: Iterations = 15000 + (PIM x 1000)

If no PIM value is specified, VeraCrypt will use the default number of iterations used in versions prior to 1.12 (see Header Key Derivation). This can be summarized as follows:

  • For system partition encryption (boot encryption) that uses SHA-256, BLAKE2s-256 or Streebog, 200000 iterations are used which is equivalent to a PIM value of 98.

  • For system encryption that uses SHA-512 or Whirlpool, 500000 iterations are used which is equivalent to a PIM value of 485.

  • For non-system encryption and file containers, all derivation algorithms will use 500000 iterations which is equivalent to a PIM value of 485.

So if you do want to harden it, make sure the PIM is above the default. For example, a PIM value of above 485.

Containers and non‑system partitions (Windows, macOS, Linux) allow passwords up to 128 characters on all OSes for standard (non‑system) volumes.

Windows system drive/partition (pre‑boot authentication) only accepts passwords up to 64 characters because it must be entered in the VeraCrypt bootloader before Windows starts.

Cascading algorithms only protect against an encryption algorithm being broken. For example, if there was a weakness discovered in AES, you would still have Two-fish and Serpent to fallback on and your container would be safe (assuming the vulnerability doesn’t exist in those algos as well) from the vulnerability. It doesn’t add any reasonable defenses against brute-forcing.

Hope this helps!

2 Likes

Thanks. I would use a PIM, but that would be yet another thing to remember, even tho it’s just 3 numbers.
As far hidding keyfiles, you would also need to remember where you place them, and if you type where they are located somewhere, that is a single point of failure.. so I have to think about how to sort this out in a way that is manageable. For now, securing keyfiles inside FDE copies of Linux is it, but I would need to think about how do I put them somewhere in a random folder where they don’t stand out. Could you add a filename extension to them?

But in any case, aren’t these files easy to find by a reasonably sophisticated attacker? kind of like how you can find Veracrypt volumes with some software (haven’t tried it) that finds for randomness in files, and lists thinks that could be volumes (this is assuming they accessed your Linux FDE drive, that is.)

And as far as the 64bit key, the next time I make a volume, I will use 1024 there on the keyfile option, just as good ol paranoid approach to max out all settings.

And when it comes to using actual, normal files (like an image) as keyfiles, I guess this is easy to hide, since they are just regular files, but are not as strong as proper random data with a lot of entropy as the keyfiles you can create with Veracrypt.. so I see this tradeoff of choosing between files that look like something encryption related (a proper random keyfile) vs a regular keyfile that is just a regular file and easy to hide.

For cloud storage, any free email provider with reasonable features or any cloud storage service, I guess could do to store keyfiles, since they are useless by themselves, and then in a completely separated service, you can host the encrypted volumes, which are also useless without the keyfiles (and obviously, the passwords) where you may potential need to pay if you host a lot of data.

In this context, do you recommend any cloud storage services? Ideally, if you could pay in crypto it would be best. And it would be even better if you can buy a lifetime plan so you aren’t worried about how if you forget to pay they may delete your files or something.

I don’t need a ton of space, since it’s just documents, but now having learned about keyfiles, im more confident about hosting data online for a potential scenario in which you may lose all your data like a flood, fire or whatnot, so I was looking into how to clone your encrypted drive, which has a password, and then put it inside an encrypted Veracrypt volume, which has another password, which also requires a keyfile, which is hosted in another cloud storage, both cloud storage accounts having different passwords. I think this is a reasonable solution to store data without having to rely on a physical location, which at the end of the day is one big single point of failure.

Sure, but I’d triple-check everything first and take Xanax.

1 Like

Yes, keyfiles can be named anything with any extension. It would be useless to really do that for a VeraCrypt generated keyfile, as like you said any reasonable attacker would know that it’s a keyfile. If not that its a keyfile, at the very least they would know it is most certainly not a photo/video file. That being said, using custom keyfiles, like a photo or regular text file, CAN be hidden in plain sight. Or even better, having a photo in an encrypted partition (hidden partition if super paranoid) that is named just like every other photo that only you know is a keyfile.

Yes, there is a trade off. You said it perfectly. To mitigate this, you could use multiple keyfiles. It is up to you what you think is the best approach but you are understanding it correctly from what I see and what you said.

As for recommendations, I like Filen.io. There are also others like Mega.io, Internxt.com, and Proton Drive. As for lifetime plans, be careful as they can be cancelled at any point or if the company shuts down. Lifetime plans are notoriously known to be unprofitable for companies for the vast majority of users who purchase them. That said, I do trust that Filen.io’s lifetime plan is trustworthy and worth it. It’s 30 euro for 100GB. The reasons I believe it to be trustworthy is because it’s a small amount of storage for them at a decent price. It’s not like they are offering terabytes of storage for 200 euros or something.

Hope that helps.

1 Like

About cloud storage services: Do you trust these brand softwares, or do you log in into the websites and drag and drop the files in there? I’ve just seen all these fancy software apps that each company tends to release, and im not sure if there’s a point. As long as your files are encrypted, + you enable encryption on your cloud storage service, I do not see the role of these programs, specially if closed source which obviously I wouldn’t run and I assume they are all open source.

Myself, I just use the web version. It has everything you need for your use case. The application is more for if you access it a lot and for convenience.

1 Like

Hi, just to be sure when understanding PIM. So what you are saying is, if the value of PIM is below 485 you are actually decreasing the strength of the setup? This seems crazy to me. How is this not warned with big letters during creation of a volume?

I mean, what if you have no idea and just type 20 or something?

By what do they say here, I understand that if your pass is less than 20 characters, then it will always use 485 minimum (even if you enter a lower PIM, it will override it and use 485 for iterations is what they mean?)

Well but what if your password is 20+ chars and you literally type 1 PIM? The way they phrase this here I understand that it actually weakens the encryption:

Motivations behind using a custom PIM value can be:

  • Add an extra secret parameter (PIM) that an attacker will have to guess

  • Increase security level by using large PIM values to thwart future development of brute force attacks.

  • Speeding up booting or mounting through the use of a small PIM value (less than 98 for system encryption that doesn’t use SHA-512 or Whirlpool and less than 485 for the other cases)

So the first point is obvious.. okay 3 more numbers for an attacker to guess. Is this relevant for someone with firepower to bruteforce? I guess it helps.

The second point, I understand you increase protection against bruteforce, as long as it’s longer than 98 or 485 for sha256/sha512.

The third point is what seems shocking. It basically means, use a lower value to decrypt faster (because your encryption protection is weaker). And they should remind that this applies only to passwords shorter than 20 characters if I understood this correctly above. But in any case.. what’s the deal here? I guess most people use around 20+ chars, so this PIM value will have a role in the strength of the encryption. If you go in there on the VeraCrypt volume creation wizard, you are not told that if you enter a value lower than 98 or 485 for sha256 and sha512 respectively, you are actually decreasing the strength of the encryption… wtf. I mean what if you enter a really low value and you have no idea about this? This is pretty lame tbh. Well at least you can tweak the PIM value it seems without having to redo the entire thing (or maybe you do because on the screenshot it looks like it wipes the contents)

I think this wizard should warn the user about this, because one just assumes this is just like a regular PIN number, just 3 numbers that have no impact on the encryption, certainly not potentially decreasing it.

This also adds an interesting/odd dynamic here… like, how many people may just put 999 in there because it’s the max security. So what if someone guesses the 999 number right? Isn’t this less safe than a lower less obvious value? For an attacker it also potentially shortens the number of values from 485 and below because most people may not want to decrease but increase the effectiveness of the encryption (so an attacker has less numbers to guess is what I mean). Just considering all possible angles of this, hope it makes sense?

First of all, it is “PIM(personal iterations multiplier)”, not “PIN”. It has nothing to do with PIN numbers. And it is not VeraCrypt’s fault that someone misreads PIM as PIN.

Second, I’m not sure whether VeraCrypt prevents users from intentionally decreasing the iteration by using a low PIM number. But if you’re unsure about what PIM does, it is best not to modify it. This (seemingly obvious) rule applies to almost everything; do not change something if you’re not sure about it. No software/hardware can prevent a bad OPSEC. At the very least, read the official documentation or simply google “Veracrypt PIM”, and you’ll get enough information in less than 10 minutes.

Third, setting the PIM to 999 is not obvious at all. But even when the PIM value is known to the attacker, bruteforcing with PIM of 999 is harder than default PIM. PIM literally means ‘how many times to iterate the key derivation function’, and higher the value, greater the calculations it requires.

Lastly, I suggest that you first go through the official documentation before asking basic questions. Might seem a bit long, but it’s definitely worth reading it.

Yes, if you set a value less than 485, you are decreasing the brute-force resistance than what the default provides. I presume it is not warned because people are encouraged to look up things they do not understand and read documentation.

Then you are decreasing the brute-force resistance of your volume.

I am unsure what you mean by this. The PIM is completely independent from the password. The PIM doesn’t change based on password length.

No, it doesn’t weaken the encryption itself. A PIM only impacts how difficult it is to derive a key from a password. I will show math below as an example. It is very technical and not super important to understand. Just know that a higher PIM = harder to brute-force password guesses.

Math

Iterations = 15,000 + (PIM×1,000)

So…

  • PIM 20: 15,000 + 20,000 = 35,000 iterations

  • PIM 100: 15,000 + 100,000 = 115,000 iterations

  • PIM 1000: 15,000 + 1,000,000 = 1,015,000 iterations

  • Memory cost (MiB):
    m_cost(pim) = min(64 MiB + (pim - 1) × 32 MiB, 1024 MiB) — i.e. memory grows by 32 MiB per PIM step until it caps at 1024 MiB. VeraCrypt

  • Time cost (passes / iterations):

    • If PIM ≤ 31: time = 3 + floor((PIM − 1) / 3)

    • If PIM > 31: time = 13 + (PIM − 31)

PIM = 20

  • Memory = 64 + (20−1)*32 = 64 + 608 = 672 MiB

  • Time (passes) = 3 + floor((20−1)/3) = 3 + 6 = 9 passes.

  • Work factor (rough proxy) ≈ 672 MiB × 9 ≈ 6,048 MiB¡passes.

PIM = 100

  • Memory = capped at 1024 MiB.

  • Time = 13 + (100 − 31) = 13 + 69 = 82 passes.

  • Work factor ≈ 1024 × 82 = 83,968 MiB¡passes.

PIM = 1000

  • Memory = capped at 1024 MiB.

  • Time = 13 + (1000 − 31) = 13 + 969 = 982 passes.

  • Work factor ≈ 1024 × 982 = 1,006,208 MiB¡passes.

PIM 20: 6,048 MiB¡passes

PIM 100: 83,968 MiB·passes (~13.9× harder than PIM20)

PIM 1000: 1,006,208 MiB·passes (~167× harder than PIM20).

Using a baseline of 1,000 guesses/second:

Guesses/sec at PIM20 = 1,000 g/s (baseline)
Guesses/sec at PIM100 ≈ 1,000 / 13.9 ≈ 72 g/s
Guesses/sec at PIM1000 ≈ 1,000 / 167 ≈ 6 g/s

Yes, maybe only a little but still helps.

Yes, if your PIM is higher than 485 it will increase the cost to brute-force your password.

Yes, using a lower PIM is only really advised if mounting to older devices that are slower.

No, PIM applies to any password length. If I were to guess where you are messing up is if you have a very long and complex password, it doesn’t matter if your PIM is 1, it will be too difficult to brute-force anyway.

Correct. Like I said, I think the dev expects people to research things they don’t understand. VeraCrypt isn’t meant to be used by grandma. It’s meant for power users who want more control. I never inputted random numbers for anything when I was first learning VC. This is not to diss or anything, I would just research what everything does before touching it.

Yes you can change it and no you do not need to wipe the contents. The PIM information is stored in the header of the container.

No. PIM is not a true secret and shouldn’t be used as one. The main purpose of using a PIM is to maintain a higher cost of brute-forcing your password for the container. It is not meant to be used as a “you’ll never guess this.” because as stated earlier, if your adversary can brute-force at high numbers like a government agency, testing 1,000 PIMS on top of the brute-force isn’t very difficult.

Yes, but it doesn’t matter much. See the last response. The PIM isn’t meant to be a “secret” as much as a technical feature, that’s just it’s secondary “side” feature you could say. Hypothetically speaking, If you had a 128-character password and told the NSA your PIM was 485 OR EVEN 20, they wouldn’t really be able to do much. Brute forcing a 128-character truly random password with a PIM of 1 would exceed the lifetime of the universe by magnitudes of hundreds. It is, practically speaking, impossible.

I get it. It’s very easy to get wrapped up in the technicals of things. Just make sure your password is secure. If you are using a truly random 128-character password, the first weakness I think of is storage. Most people cannot reasonably remember that long of a password, they have to store it somewhere. If I were an adversary, my attack vector would be gaining access to that password.

Piece of paper in a safe? How can I break into that safe without damaging the paper.

Online password manager? How can I get into your password vault exploiting the online nature of it?

Offline password manager? How can I infect your PC with malware to gain access to RAM contents to then exfiltrate your database and access it on my own hardware.

Most people are a lot weaker than their encryption. If your adversary knows they can’t crack the encryption, they will try and crack YOU. Remember this. You are only as strong as your weakest link, and that is usually yourself.

2 Likes