ReVault – new secure archive format

1 points by bsutto ↗ HN
reVault is a new, secure-by-default archive format called a lockbox, designed to be simple to use.

I've been working on reVault for about 2 years. It was originally written in Dart, but with the improvements in AI, I decided to port it to Rust using AI.

It's now in beta, so I'm looking for feedback, particularly around the different language bindings.

A lockbox is encrypted, signed and compressed by default. Each can be disabled selectively.

  - Hybrid post-quantum or passphrase encryption, including metadata.
  - Zstd compression.
  - Pure Rust libraries wherever possible.
We intend to phase out remaining C code as alternatives become available. The project has been scanned using OpenAI's Daybreak cyber security tools.

The manual is a work in progress: https://docs.revault.onepub.dev/

reVault supports Linux, macOS and Windows, x64 and arm64, plus Wasm. The core is Rust, with bindings for C/C++, Java, Dart, Python, Ruby, JS/TypeScript, Go, C#, Kotlin, Lua, PHP and Swift.

Within a lockbox you can store:

  - Files, directories, permissions and symlinks.
  - Variables.
  - Forms.
Variables, forms and the lockbox itself can have descriptions.

reVault uses a portable vault (just another lockbox with structured content) to hold your keys, contacts' keys, lockbox aliases and form definitions.

It ties into your platform's secure store, so logging into your desktop unlocks your vault. You don't have to enter a passphrase every time you access a lockbox. You can disable this.

There are lots of shortcuts. Creating a lockbox stores an alias in your vault, based on its filename or a name you choose:

  lbx create /some/path/mybox.lbox
  lbx mybox open --duration 1h
  lbx mybox var set KEY VALUE
Set a default lockbox and you can leave its name out:

  lbx session default mybox
  lbx var get KEY
You can mirror a directory tree into a lockbox and update it when the directory changes:

  lbx store.lbox mirrors project create --from ./project --to /projects/project
  lbx store.lbox mirrors update
The API lets you read, write and seek within files without extracting them to the filesystem. Each lockbox has a table of contents, so extracting a single file from a multi-gigabyte lockbox is fast.

Recovery

Updates are transactional, with automatic rollback for failed updates. The format is designed for recovery: content is stored in pages, allowing unaffected content to be recovered if part of a lockbox is corrupted.

Sharing

An encrypted lockbox is more useful if you can share it.

reVault has an open-source keyserver for exchanging public keys, with validation through a second trusted channel. It's still experimental.

OnePub has donated a server to run a single keyserver. If you're interested in donating resources, I'd like to bring up a second redundant server. It's pure Rust, uses under 100 MB RSS and supports rate limits.

To publish your default profile's public key:

  lbx vault profiles email you@example.com
  lbx vault profiles publish
Give the publish code to your contact. They can import your key:

  lbx vault contacts receive <publish-code> <contact-name>
Display your profile's fingerprint and exchange it through a second trusted channel:

  lbx vault profiles fingerprint
Repeat the process in the opposite direction to get their key. Once you have it, grant them access to your default lockbox:

  lbx access grant alice
You can then email the encrypted lockbox to Alice.

To install the CLI and get started:

  cargo install revault_cli
  lbx vault init
  lbx completion install
Completion installation detects your shell. To diagnose issues:

  lbx doctor
The language bindings are published t...

12 comments

[ 5.0 ms ] story [ 48.3 ms ] thread
sorry my first post to hackernews in a long time so I managed to post it twice.
No matter how good it is, some people will auto-hate this because you used AI :(
Nice to see some Dart around here, even if it migrated to Rust eventually (as I am also wont to do). Just posting the github repo link for those that are lazy like me and want to go directly to the source: https://github.com/onepub-dev/reVault
I'm a big Dart (I'm one of the founders of https://onepub.dev - a dart private repository).

All my UI is dart/flutter as well as any scripting (I'm the author of the dart package dcli https://pub.dev/packages/dcli).

I'm converting all of my back end stuff to Rust (using AI) for the performance and reduced memory.

We run a monitoring agent on our servers, porting from dart to rust reduced memory from around 450MB to about 30MB at about 50% of the CPU.

What does "Hybrid post-quantum encryption" mean?
It wraps the content keys with a standard pub/priv algo then wraps that in a post quantum algo.

post quantum being an alog which we believe to be resilient in the face of emerging quantum computers.

The wrapping is done because the post quantum algos are new and might be flawed, so if that is broken (and we aren't post quantum) then the standard algo will still protect the content.

NIST recommend the use of these hybrid keys:

https://csrc.nist.gov/pubs/ir/8547/ipd

Isn't that similar to a Veracrypt volume as a file?
Compared with veracrypt:

It's not a filesystem, its an archive designed to be shared.

It has compression built in .

A lockbox is signed not just encrypted- so you can verify identity and data integrity,

You can store variables and forms and can expand them in a script.

Supports multiple identities and and is designed to be shared by 'granting' other access using their public key.

It's designed to be portable rather than for local file access.

A browser can upload and open a lockbox via our wasm support.