Private Build — Pablo

PocketVault

A portable, offline encryption app for a USB drive. Your files are sealed with AES-256-GCM behind an Argon2id-derived key and cryptographically bound to the physical drive — so a copy of the files on any other disk is just noise. No accounts, no cloud, no telemetry. Built in Python with a native desktop UI and packaged as a single Windows executable that lives on the stick itself.

Request Access →
PocketVault unlock screen
AES-256
GCM Cipher
Argon2id
Key Derivation
3K+
Lines of Python
0
Network Calls
100%
Offline
USB
Hardware-Bound

At a glance

256-bit
Encryption keys
64–256MB
Argon2 memory cost
0 bytes
Plaintext at rest
1 file
Portable executable

PocketVault is a self-contained encrypted store you carry on a USB drive. Drop files in, and they're written back out as authenticated AES-256-GCM blobs with no recoverable filenames, structure, or metadata in the clear. The encryption key never touches the disk — it's derived from your password every time you unlock and discarded the moment you lock. Everything runs locally; the app makes zero network requests and stores nothing about you anywhere but the drive in your pocket.

PocketVault main screen — encrypted file list
Main vault — your encrypted files, decrypted in memory only when opened.
Exporting a decrypted file from PocketVault
Reading and exporting a file — nothing is written in the clear unless you choose to.

Architecture

The app is split into three clean layers: a native desktop UI, a self-contained crypto engine with no UI knowledge, and a storage layer that only ever sees opaque ciphertext. Keys flow downward and are held only in memory; nothing above the crypto engine ever sees a plaintext key, and nothing below it ever sees plaintext data.

Interface
Desktop UI Setup wizard · unlock · file browser · settings
↓ password
Crypto engine
Key derivation Argon2id · per-vault salt · tunable cost
AES-256-GCM Authenticated encrypt / decrypt
Hardware binding Mixes a drive secret into every key
↓ ciphertext only
Storage (on the USB)
Encrypted blobs Hashed filenames · no plaintext metadata
Sealed state Lockout + integrity, separately encrypted
Atomic writes temp file → fsync → os.replace
The key never hits the disk. Your password is run through Argon2id to derive a 256-bit key in memory, that key decrypts the vault, and it's wiped on lock or idle-timeout. There is no key file, no keychain entry, and no recovery path that doesn't go through either your password or the one-time master recovery key you save at setup.

On-disk file format

Every stored file is wrapped in a single self-describing envelope. The salt makes each file's key unique even under the same password; the GCM tag means any tampering with a single byte fails the decrypt instead of returning garbage.

File envelope
salt16 random bytes — feeds the Argon2id key for this file
nonce12 random bytes — unique per write, never reused
ciphertextAES-256-GCM encrypted file contents
tag128-bit authentication tag — detects any tampering
What an outsider sees
namesRandom-looking hex — no original filenames or extensions
contentIndistinguishable from random — no headers, no magic bytes
keysNever written to disk in any form
tamperingAny single-byte change fails authentication on unlock

Cryptography

The crypto is deliberately boring — standard, well-reviewed primitives wired together carefully, with no home-rolled algorithms. The interesting part is the cost tuning: you choose how hard your password is to attack, trading unlock speed for brute-force resistance.

Cipher

AES-256-GCM

Authenticated encryption everywhere. Confidentiality and integrity in one pass — a modified ciphertext fails to decrypt rather than yielding corrupted plaintext.

Key derivation

Argon2id

Memory-hard password hashing, the current best-practice choice. Each unlock re-derives the key; nothing reusable is stored.

Tunable cost

Three KDF profiles

Balanced, Strong, and Paranoid map to 64 MB / 128 MB / 256 MB of Argon2 memory. You pick your point on the speed-versus-resistance curve at setup.

Randomness

CSPRNG everywhere

Every salt, nonce, and internal key comes from the OS cryptographic RNG. No predictable counters, no reused nonces.

Recovery

Master recovery key

A 128-bit key shown once at setup escrows the drive secret, so a damaged or reformatted stick is still recoverable — by you, with the key, and no one else.

Constant work

Uniform unlock timing

Unlock does the same cryptographic work and enforces a minimum response time whether the password is right or wrong, so timing tells an attacker nothing.

Hardware binding

This is the feature that makes PocketVault more than "encrypted files in a folder." A secret is mixed into every key and stored sealed against the drive itself — so copying the vault's files onto a different stick produces something that cannot be decrypted, even with the correct password. Crucially, the binding follows the drive, not the computer: the same USB unlocks on any machine you plug it into.

ModeBound toWhat it stops
StandardUSB volume identityCasual file copying to another drive. Works on any PC; reformatting releases it (recover with the master key).
Strict (anti-clone)USB controller hardware serialEven a full sector-by-sector clone onto another stick — the clone reports a different hardware serial and won't open.
OffNothingPortable to any disk. For users who only want password protection.
Strict mode is opt-in and self-checking. It can only be enabled when the drive actually exposes a usable unique serial, so it can never put you in a state where your own drive locks you out. Not every flash drive reports one — the app detects this and refuses to enable strict mode rather than risk it.
PocketVault hardware-binding settings
Hardware-binding controls — standard and strict (anti-clone) modes.
PocketVault master recovery key
The master recovery key — your only way back in if the drive changes.

Protections

Encryption is necessary but not sufficient. Around the cipher sits a layer of practical defenses against the ways a vault actually gets compromised — guessing, tampering, shoulder-surfing, and a drive left unlocked on a desk.

Anti-guessing

Brute-force lockout

Wrong guesses trigger escalating timed lockouts. Combined with the memory-hard KDF, online guessing is impractical.

Tamper detection

Integrity baseline

The app fingerprints itself and re-checks against a baseline sealed inside the encrypted vault — so a swapped or modified executable is flagged after you unlock, not silently trusted.

Anti-forensics

Secure deletion

Deleted files are overwritten before removal (best-effort on flash) so the bytes don't simply linger as recoverable free space.

Walk-away safety

Auto-lock

Configurable idle timeout, instant lock on a key press, and an option to lock the moment the window is minimized.

Clipboard hygiene

Auto-clear

Anything you copy out of the vault — including your recovery key — is wiped from the clipboard on a timer.

Crash safety

Atomic writes

Every write goes to a temp file, is flushed to disk, then atomically swapped in — a yanked drive mid-write can't corrupt the vault.

The app

For all the machinery underneath, the surface is a calm, dark native desktop app. A first-run wizard walks you through your password, your security trade-offs, and saving your recovery key; after that it's just unlock, browse, and lock. Files can be viewed in-app (text or hex) without ever writing a decrypted copy to disk.

PocketVault first-run setup wizard
The first-run wizard walks you through setup and your security choices.
PocketVault settings and dashboard
Settings & status — binding mode, auto-lock, and at-a-glance health.
PocketVault integrity / tamper-check screen
Tamper check — the app flags a modified binary before you ever type a password.

Tech stack

Python for the logic, vetted libraries for the cryptography, a native widget toolkit for the UI, and PyInstaller to fold it all into one portable executable that runs straight off the stick with nothing to install.

Python 3 argon2-cffi cryptography (AESGCM) CustomTkinter Tkinter PyInstaller ctypes / Win32 PowerShell interop
🔐
cryptography
AES-256-GCM authenticated encryption
🧮
argon2-cffi
Memory-hard Argon2id key derivation
🪟
CustomTkinter
Native, themed desktop UI
📦
PyInstaller
One-file portable Windows build
⚙️
ctypes / Win32
Reads drive identity for binding

How it's built

The codebase is small on purpose — three modules, one job each. A security tool you can read end-to-end is one you can actually trust.

Crypto engine
Primitives, isolated and testable
All cryptography lives in one module with no UI or storage knowledge: key derivation, the AES-GCM envelope, hardware-fingerprint mixing, and secure-delete helpers. It's pure functions you can exercise headlessly.
Storage manager
State, files, and policy
Owns the on-disk layout, file versioning, brute-force lockout schedule, integrity baseline, settings, and hardware-binding lifecycle — all behind a lock so the UI thread never races the disk.
Interface
A native app that hides the machinery
The UI never touches a raw key or ciphertext — it only asks the manager to unlock, list, read, and write. Long operations run off the UI thread so the window never freezes mid-encrypt.
Tested where it counts. The crypto and storage layers are covered by headless tests that exercise the real round-trip — set up a vault, lock it, re-open it from a fresh process, change a password and confirm old keys stop working, and verify a relocated vault refuses to open. The security-critical paths are validated without ever opening a window.

Status

Working and in active use as a private build. The full loop — set up, unlock, add and view files, bind to hardware, recover, and lock — runs end-to-end, packaged as a single portable executable. It is intentionally not public: a vault's security profile is something we discuss directly rather than publish. Specific internals are kept deliberately undocumented here.

Want access to PocketVault?

PocketVault is a private build with no public download. If you have a use case for a portable, hardware-bound encrypted store — or just want to know more about how it works — reach out and we'll take it from there.

Request Access Other Projects