ATS-OPSEC-Suite
File-centric OPSEC toolkit β encrypt, hide, transfer and destroy specific files with surgical granularity, from a cinematic terminal UI.
β οΈ v0.2 β crypto engine live but unaudited. The
.aoscontainer format, streaming AEAD, Argon2id KDF, hybrid post-quantum KEM (X-Wing: X25519+ML-KEM-768), keyring and shredding are implemented and tested (26 tests). This is not a security-audited codebase β design rationale indocs/SPEC.md. Use for real secrets at your own risk.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ATS SECURE BOOTLOADER β integrity check in progress β
β β
β ββββββ βββββββββββββββββ βββββββ βββββββ ββββββββββββββββ β
β βββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββ β
β ββββββββ βββ ββββββββ βββ βββββββββββββββββββββββββ β
β ββββββββ βββ ββββββββ βββ ββββββββββ ββββββββββββββ β
β βββ βββ βββ ββββββββ ββββββββββββ ββββββββββββββββ β
β βββ βββ βββ ββββββββ βββββββ βββ ββββββββββββββββ β
β β
β [ OK ] csprng entropy pool ............. SEEDED 256b β
β [ OK ] host capability probe ........... windows Β· x86_64 β
β [ OK ] cpu feature matrix .............. AES-NI AVX2 SSE4.2 β
β [ OK ] secure memory lock .............. VIRTUALLOCK β
β [WARN] environment integrity ........... HYPERVISOR PRESENT β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Why this exists
No existing tool combines these pillars in a single interface:
| Tool | Modern crypto | Post-quantum | Stego | Air-gap | TUI |
|---|---|---|---|---|---|
| age / rage | β | β | β | β | β |
| Picocrypt | β | β | β | β | β |
| VeraCrypt | β | β | β | β | β |
| steghide | β | β | β | β | β |
| ATS-OPSEC-Suite | cascade + STREAM | hybrid X25519+ML-KEM | dispersed + self-analysis | QR fountain | cyberpunk TUI |
Quickstart
cargo install --path .
ats-opsec # launch the TUI (boot animation + dashboard)
ats-opsec --no-anim # skip the boot sequence
ats-opsec probe # host capability report (real syscalls)
# encryption β single file, folder, or many inputs (tar-packed)
ats-opsec encrypt secrets.zip # β secrets.zip.aos (argon2id)
ats-opsec encrypt a.txt b.txt dir/ # β a.txt.aos (packed)
ats-opsec encrypt big.iso --ciphers xchacha20,aes256gcm # ordered cascade
ats-opsec encrypt notes.txt --ciphers ascon --compress --pad
ats-opsec decrypt secrets.zip.aos # β secrets.zip
ats-opsec info secrets.zip.aos # audit container header
# hybrid post-quantum recipients (X-Wing: x25519 + ml-kem-768)
ats-opsec keys gen alice # β %APPDATA%/ats-opsec/keys/
ats-opsec encrypt report.pdf --to @alice # no password needed
ats-opsec decrypt report.pdf.aos --key alice
ats-opsec keys passphrase -n 7 # diceware (~90 bits)
ats-opsec shred secrets.zip -p 3 # best-effort secure erase
ats-opsec bench # argon2 calib + aead speed
TUI
- Boot sequence β matrix rain, decoding ASCII logo, module init checklist fed by a real system probe (CSPRNG, CPUID features, hypervisor bit, memory locking, filesystem type, tracer detection).
- 6 keyboard-and-mouse modules β
ββ/tab/1-6or click to navigate: DASH (host profile, OPSEC score, prefs, local time) Β· CRYPT Β· STEGO Β· SHRED (real multi-pass overwrite) Β· KEYS Β· LOGS. - CRYPT tab β
TARGETSqueue (drop multiple files/folders β one packed.aos),OPERATIONSbuttons (encrypt / decrypt / audit) and a clickableOPTIONSpanel: auth mode (passphrase β recipient keys), 8 AEAD layers checked in cascade order (ββreorders), compress / pad-size / shred-orig flags. - Drag & drop everywhere β drop files onto CRYPT or SHRED to queue
them; drop a
.aoscontainer onto KEYS to decrypt it with a keyring secret key.jtypes a path directly. - Input modals β masked passphrase entry with live zxcvbn strength meter; long ops run in background workers with progress.
ppanic screen β instant decoy (innocent PowerShell session).?help overlay,ttheme cycle (cyber/amber/ice/crimson),q/ctrl+cquit.
Keys vs passwords β the two ways to lock a file
Every encryption needs a key. Where it comes from defines two modes:
Passphrase mode (symmetric) β your passphrase is the key, stretched through Argon2id (~1.6 s, 64 MiB β brute-force gets expensive fast). Use it for your own files, or when you can whisper the secret to the recipient.
Recipient mode (asymmetric, post-quantum) β each keyring entry is an X-Wing pair: a public key (an open padlock you hand out β anyone can lock a file for you, nobody can open it) and a secret key (yours alone, the only thing that unlocks). To send a file without sharing any password:
you: ats-opsec keys pub alice β give alice the .pub file / hex
alice: ats-opsec encrypt report.pdf --to alice # locks to YOUR padlock
you: ats-opsec decrypt report.pdf.aos --key alice # only YOUR sec key opens it
X-Wing combines X25519 + ML-KEM-768 (FIPS 203): safe even if one half is broken β including by future quantum computers (protects against "harvest now, decrypt later" collection of today's ciphertext).
.aos container (v1)
"AOS1" | header_len u32 | header JSON | chunk stream | random padding?
chunk := u32 LE (bit31 = LAST) | ciphertext (plaintext + 16B AEAD tag)
- KDF: Argon2id (64 MiB / t3 / p4 default; up to 2 GiB in expert mode)
- HKDF-SHA256 subkeys β header salt + params stored, authenticated.
- AEAD: 8 ciphers usable alone or in an ordered cascade β XChaCha20-Poly1305, AES-256-GCM, AES-128-GCM, AES-256-GCM-SIV, AES-256-EAX, Deoxys-II-256-128, Ascon-128, AEGIS-256 β each layer gets its own HKDF key + derived per-chunk nonce (independent failure domains). Header bound via AAD (tamper-proof metadata).
- STREAM: chunked (256 KiB default) β wrong password fails on the first chunk, truncation is detected, multi-GB files don't touch RAM.
- Packed mode: multiple files/directories are tar-streamed through
a pipe (no temporary file, no full-buffer RAM) into one
.aosmarkedpacked:true; extraction re-blocks path traversal. - Recipients: X-Wing hybrid KEM (X25519 + ML-KEM-768 per draft-irtf-cfrg-xwing) β secure even if one half breaks; multi-recipient slots wrap a random 32B file key.
- Options: keyfiles (BLAKE3 mixed), Zstandard pre-encryption, 4 KiB-quantized + jittered size padding, shred-original.
- Measured (Ryzen-class, release): ~1.1 GiB/s per AEAD layer, ~0.63 GiB/s cascade. Argon2id 64 MiB β 1.6 s.
CLI
ats-opsec encrypt <files...> [--ciphers a,b,...] # layers: xchacha20 aes256gcm
# aes128gcm gcm-siv eax deoxys ascon aegis
[--to @name | --to-pub hex] [--keyfile f]
[--compress] [--pad] [--shred] [-m/-t/-p argon2]
ats-opsec decrypt <file.aos> [--key name] [--keyfile f] [-o out]
ats-opsec info <file.aos> [--json] container audit
ats-opsec shred <file> [-p N] N-pass overwrite + rename + unlink
ats-opsec keys gen|list|pub|export|import|delete|passphrase
ats-opsec bench [--argon-only|--aead-only] [--mib N]
ats-opsec stego|qr staged (v0.3)
ats-opsec probe [--json] Β· config show|path
Stack
Rust 2024 Β· ratatui+crossterm (TUI + mouse) Β· clap Β· serde/toml Β·
windows-sys/libc (OS probes) Β· blake3 Β· argon2 Β·
hkdf/sha2/sha3 Β· chacha20poly1305 + aes-gcm + aes-gcm-siv +
eax + deoxys + ascon-aead + aegis (8 AEAD, cascade) Β·
ml-kem (FIPS 203) + x25519-dalek Β· tar (streaming pack) Β·
zstd Β· zeroize + subtle Β· zxcvbn Β· chrono.
Roadmap crates (SPEC Β§4): ml-dsa, serpent, raptorq, image, hound,
sssa, entropy.
Commands
| Command | Effect |
|---|---|
cargo build | debug build |
cargo build --release | optimized binary in target/release/ |
cargo test | unit + render tests (TestBackend) |
cargo clippy -- -D warnings | lint |
cargo fmt | format |
Security model (honest)
- Secrets in RAM:
zeroize+mlock/VirtualLockβ but swap, hibernation and crash dumps can still reach disk. - File shredding is not guaranteed on SSD (TRIM/wear-leveling), journaled or CoW filesystems β the UI says so instead of pretending.
- Plausible deniability is a forensic bet, not a legal defense (UK RIPA Β§49, FR art. 434-15-2 compel key disclosure).
- Nothing is "undetectable" β stego is scored with self-analysis, and VM/tracer indicators are surfaced as warnings.
Legal
For legitimate privacy, research and security work only. You are responsible for complying with your jurisdiction's laws on encryption, steganography and data destruction.
License
MIT β see LICENSE.