Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Commitant committed Oct 26, 2017
1 parent 45f1ef5 commit 7856b7b
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Check out the [How To Use](https://github.com/eflite/RabbitHole/wiki/How-To-Use)
Inspired by TrueCrypt and similar software, this application offers serious encryption for your files through a command line tool for Windows. It's uses [BouncyCastle 1.8.1](https://en.wikipedia.org/wiki/Bouncy_Castle_(cryptography)), an acclaimed crypto library providing strong encryption. Because your file archive is first populated with random data, any encrypted volumes you create inside are indistinguishable from the random data. Thus there is no way to ascertain whether you have 0, 1, 2 or 20 volumes within your archive. This gives you [plausible deniability](https://en.wikipedia.org/wiki/Plausible_deniability#Use_in_cryptography), so that an adversary cannot prove or be sure that any encrypted volume exists. A typical way to use this is to create at least 2 volumes, one that you can safely decrypt and reveal should you be forced to, and one that contains your real secrets and which existence you can plausibly deny. For a cryptography tool to have any value we believe is has to be open source software, so users and experts can inspect the code and make sure no vulnerabilities or back doors exist. That is why this project is released under the open source GPLv3 lisence. For maximum security, download the source code, download the [Bouncy Castle crypto library for C#](https://www.nuget.org/packages/BouncyCastle.Crypto.dll/) and compile it yourself.

## How it works
When you create a new file archive with RabbitHole you specify the file name and total archive size, and a new file is created and filled with random data. The Sha512 Bouncy Castle random generator, a cryptographically secure pseudo random function [(a CSPRF)](https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator) is used and seeded with entropy collected from the keyboard though keystroke timings. When you later create logical volumes within the archive, there is no way of distinguishing these from garbage random data from the random generator. There is no header information within the archive specifying the number or the sizes of the logical volumes. The only thing that identifies a volume is the password you chose for it, and this is obviously not written to the file. Rather, when opening an archive and entering the password for the volume you want to open, the application tries to read data at different positions and decrypt it with your password. It will first try to read at the start of the archive with an offset calculated from the hash of the password, then it will try at half way through the file plus the offset, then at half way of the remaing part of the file plus the offset etc, etc. It will repeat this process until a volume decrypts successfully or the file is exhausted.
When you create a new file archive with RabbitHole you specify the file name and total archive size, and a new file is created and filled with random data. The Sha512 Bouncy Castle random generator, a cryptographically secure pseudo random function [(a CSPRF)](https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator) is used and seeded with entropy collected from the keyboard through keystroke timings. When you later create logical volumes within the archive, there is no way of distinguishing these from garbage random data from the random generator. There is no header information within the archive specifying the number or the sizes of the logical volumes. The only thing that identifies a volume is the password you chose for it, and this is obviously not written to the file. Rather, when opening an archive and entering the password for the volume you want to open, the application tries to read data at different positions and decrypt it with your password. It will first try to read at the start of the archive with an offset calculated from the hash of the password, then it will try at half way through the file plus the offset, then at half way of the remaing part of the file plus the offset etc, etc. It will repeat this process until a volume decrypts successfully or the file is exhausted.
As the start positions are halved for every volume you create, the allocated space for each volume is also halved. This means that if you create an archive of size N bytes, your first volume can occupy n/2 bytes, your second volume can occupy n/4 bytes, your third can occupy n/8 bytes etc. Because each volume requires at least 1068 bytes, a 1 MB archive allows for 10 volumes, a 10 MB archive allows for 14 volumes, and a 100 MB archive allows for 17 volumes etc.

![diagram1](https://github.com/eflite/RabbitHole/blob/master/RabbitHoleDiagram1.png)
Expand Down

0 comments on commit 7856b7b

Please sign in to comment.