1 unstable release
0.2.0 | Dec 14, 2020 |
---|
#1258 in Filesystem
74KB
2K
SLoC
x79d8
Portable directory encryption.
Encrypted files are stored on the host OS filesystem. Decrypted files are served via a local FTP service.
Features
- Portable. Use FTP. Most systems support FTP.
- Dynamic sized. Space usage grows or shrinks based on usage.
- Industry encryption. AES256 for data encryption. scrypt for key derivation.
Installation
cargo install x79d8
Note: Follow instructions from the aesni crate to
enable hardware acceleration. In short, you might need to set RUSTFLAGS
to -C target-feature=+aes
during installation.
Usage
Initializing a new directory
Initialize x79d8 configs in an empty directory:
x79d8 init
Serve the directory. This will prompt for a new password:
x79d8 serve
Upload files to ftp://127.0.0.2:2121
. Press Ctrl+C to store the encrypted
files on disk.
Serving an existing directory
Serve the directory. This will prompt for the password and will only serve the right content if the password is correct:
x79d8 serve
Encryption
x79d8 uses AES256-CFB to encrypt blocks. A block has an integer block_id
,
which is the file name on the host OS filesystem. The header of a block has a
random 128-bit integer count
. The IV used for encrypting that block is
blake2s(key, count, block_id)
. The count
will be changed whenever the
block is written. If a block is deleted and re-added, its count
will be
re-initialized by the OS rng. The OS RNG must be secure to eliminate IV reuse
in that case.
By default, a block is 1MB. Smaller files will be grouped into one block.
Larger files are will span across multiple blocks. This behavior can be changed
by the --block-size-kb
option during init
.
x79d8 uses scrypt to calculate the key from password. Its strength can be
changed by the --scrypt-log-n
option during init
.
x79d8 assumes it's a local service and there are no untrusted traffic. For example, it does not use AEAD (authenticated encryption with associated data). Do not expose x79d8 features to untrusted network! Do not allow untrusted users to edit the encrypted files (in particular, they can replace a block to its previous version to trick an IV-reuse case, if the OS RNG is also insecure)!
Durability
x79d8 starts to write changes to disk after 5 seconds. It uses WAL to ensure data consistency.
Background
I've been looking for TrueCrypt alternatives since its discontinuation. I'd like the alternative to have dynamic space usage, is trustworthy (open-source, audited or simple enough to audit), and cross-platform. Unfortunately, it's not easy to find a good alternative. The RustCrypto libraries seem serious enough to DIY a solution, and libunftp simplifies the "cross-platform" part a lot.
x79d8 is only about 2k lines. The main encryption logic (enc.rs
) is only
about 160 lines.
Dependencies
~26–39MB
~721K SLoC