So I read this question about deniable encryption but it left me with a few questions. The first answer describes how you could hide one file system on a drive. The process goes like this:

  1. Fill the drive with random data
  2. Select a random offset and create the encrypted file system there so it's indistinguishable from the random data around it

Now my questions: How would one have multiple of these file systems (independent of another) in a structured way? If we select multiple random numbers for the offsets we might end up with one very large and one very small.

So I thought of a way to solve the first problem: You could divide the disk in equal blocks of say 1 GB to ensure that each block has the same size. Is there a better way?

Even if the ensure that each block has enough space for our purposes we still have the problem of needing to remember the offset and the password for that block. Is there any way to let the user only have to remember the password?

One solution I thought about was deriving the block number from the password, but if the user changes the password he would also have to move the data to that new block (kinda inefficent).

The only solution I found was trying the password on each block and checking for a magic number at the beginning to ensure correct decryption. This seems pretty inefficient though. Is there any other way while still preserving the deniable aspect of it?

The goal is to make it impossible for an attacker to know how much data there is on the disk.


1 Answer 1


There is no better way then checking a magic number.

All the other options have disadvantages that are unacceptable to me. So the creating procedure is the following:

  1. Fill the file or disk with random data
  2. Divide file or disk into blocks of 1 GB
  3. Ask the user for a password
  4. Hash that password with an adequate algorithm
  5. Select a random block and write a header (encrypted with the hash) with the magical number to ensure correct decryption later
  6. Mount the block minus the header as an encrypted file-system (encrypted with the hash).

To get the data back the following procedure needs to be followed:

  1. Ask the user for a password
  2. Hash that password with an adequate algorithm
  3. Divide the file or disk into blocks of 1 GB
  4. Go to the start of each block and decrypt the first n bytes with the hashed password
  5. Check if the decrypted data matches the magical number
  6. Go to the next block if not

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .