
secure vault for your files
📄 Technical paper: SecureVault_Technical_Paper_v3.5.0.pdf · Cite on Zenodo
Local-first file encryption for Windows, secured by a physical USB key instead of a password.
⚠️ v3.5.0 includes a breaking security fix — see CHANGELOG.md before updating from an earlier version.
Secure Vault encrypts individual files (or folders) on your Windows machine using AES-256-GCM. Instead of protecting the encryption key with just a password, the key is generated randomly and stored on a USB flash drive you choose. To decrypt anything later, that same USB drive has to be physically plugged in.
Passwords can be guessed, phished, keylogged, or brute-forced. A physical key can't be remotely stolen the way a password can. Trade-offs to understand before you rely on this:
SecureVaultSetup-x.x.x.exe.Program Files\SecureVault (or your chosen location)nodemailer, used only for the optional email feature)No manual steps, no command line required for a normal install.
The very first thing to do after installing is register a USB drive as your master key. Nothing can be encrypted or decrypted until this is done.
masterE: (see Troubleshooting if this fails)..vault_master.key file to the root of that drive. Do not delete this file, and do not lose this drive.Optional but recommended: copy that .vault_master.key file to a second, safely-stored USB drive as a backup, in case the primary one is ever lost or damaged.
Launch the app via the Start Menu / Desktop shortcut to get the interactive menu:
========================================
SECURE VAULT
========================================
1. Encrypt a file
2. Decrypt a file
3. Register USB
4. View devices
5. View backups
6. Restore file
7. Configure email
8. Install right-click menu
9. Exit
Choose option 1, then enter the full path to the file or folder. Your registered USB drive must be plugged in. The output is a .vault file; the original is securely deleted (overwritten 3 times) after a successful encryption and backup.
Choose option 2, enter the path to the .vault file. Your registered USB drive must be plugged in — decryption is impossible without it.
Covered in First-time setup above. You can also register additional per-device keys (choose device instead of master) if you want a separate key for a second machine while keeping one master key overall.
Lists every USB key (master and device) currently registered, pulled from config/registered-devices.json.
Every time you encrypt a file, Secure Vault automatically saves an encrypted backup copy locally (rotated — keeps the 5 most recent, auto-expires after 30 days). Option 5 lets you list and view these.
Restores a file from one of those local backups, in case you need the pre-encryption version back without going through decrypt.
Optional. Sends you an email whenever a vault action happens (encrypt/decrypt), including which file, which computer, and when.
Setup requires a Gmail App Password — not your normal Gmail password. Steps:
Enable email alerts? (y/n) → yYour Gmail address → the account you generated the App Password forGmail App Password → paste the 16-character code (not your real Gmail password)Alert recipient email → where you want alerts sent (can be the same address)Notes:
smtp.gmail.com).config/settings.json on your machine — don't share that file, and don't commit it with real credentials to a public repository.n skips it, and everything else works identically.Adds "Encrypt with Secure Vault" / "Decrypt with Secure Vault" to the Windows Explorer right-click menu, so you can encrypt/decrypt without opening the app menu first.
Everything is also available without the interactive menu:
node secure-vault-launcher.js encrypt "C:\path\to\file"
node secure-vault-launcher.js decrypt "C:\path\to\file.vault"
node secure-vault-launcher.js register master E:
node secure-vault-launcher.js register device F:
node secure-vault-launcher.js devices
node secure-vault-launcher.js backup list
node secure-vault-launcher.js backup view <name>
node secure-vault-launcher.js backup view-latest
node secure-vault-launcher.js restore list
node secure-vault-launcher.js restore restore "C:\path\to\file"
node secure-vault-launcher.js email
node secure-vault-launcher.js rightclick
node secure-vault-launcher.js help
Run this from the install folder (e.g. C:\Program Files\SecureVault).
| File | Purpose |
|---|---|
config/settings.json | Email alert settings (address, App Password, enabled flag) |
config/registered-devices.json | List of registered USB devices |
These are created with safe placeholder values on install and update automatically as you use the app — no manual editing required.
Requires Inno Setup 6 if building locally on Windows:
iscc installer.iss
Output: dist/SecureVaultSetup-<version>.exe
Or let GitHub Actions build it for you (no Windows machine needed) — push a version tag:
git tag v3.5.0
git push origin v3.5.0
The workflow in .github/workflows/build.yml builds the installer on a Windows runner and automatically attaches it to a GitHub Release.
crypto module: AES-256-GCM with scrypt key derivation, random salts and IVs per operation, and authentication tags to detect tampering.execFileSync with arguments passed as an array, not a shell string — this closes a command-injection risk present in earlier versions, where a maliciously crafted file/folder name could have broken out of shell quoting.Buffers (not JS strings) and explicitly zeroed (.fill(0)) as soon as each use is finished — as of v3.5.0, this now also includes the decrypted plaintext file content itself, not just key material. This is a real improvement but not an absolute guarantee — Node.js/V8 may retain other copies internally (e.g. during garbage collection, or if memory was paged to disk by the OS) that application code cannot reach or control..exe."Enter drive" — what format should I use?
Any of E, e, E:, or E:\ work — Secure Vault normalizes it automatically and verifies the drive exists before writing anything.
ENOENT error mentioning a folder like e\.vault_master.key inside your install directory
This was a bug in older versions where a drive letter typed without a colon (e.g. just e) was misread as a relative folder name instead of a real drive. Fixed as of this version — update to the latest release if you still see this.
Email alerts aren't sending
SmartScreen blocks the installer Click "More info," then "Run anyway." This is expected for an unsigned installer — see Security notes.
Node.js / 7-Zip install seems to hang Check for a Windows UAC ("Do you want to allow this app to make changes?") prompt, possibly hidden behind other windows — the silent installers still require this one confirmation click.
MIT — see LICENSE.