ATS-OPSEC-Suite

File-centric OPSEC toolkit β€” cinematic TUI, post-quantum crypto, steganography, air-gap QR transfer (Rust)

GitHubRustBatchfile
πŸ‘ 68 vuesSync GitHub: 11/7/2026

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 .aos container 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 in docs/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:

ToolModern cryptoPost-quantumStegoAir-gapTUI
age / rageβœ…βŒβŒβŒβŒ
Picocryptβœ…βŒβŒβŒβŒ
VeraCryptβœ…βŒβŒβŒβŒ
steghideβŒβŒβœ…βŒβŒ
ATS-OPSEC-Suitecascade + STREAMhybrid X25519+ML-KEMdispersed + self-analysisQR fountaincyberpunk 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-6 or click to navigate: DASH (host profile, OPSEC score, prefs, local time) Β· CRYPT Β· STEGO Β· SHRED (real multi-pass overwrite) Β· KEYS Β· LOGS.
  • CRYPT tab β€” TARGETS queue (drop multiple files/folders β†’ one packed .aos), OPERATIONS buttons (encrypt / decrypt / audit) and a clickable OPTIONS panel: 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 .aos container onto KEYS to decrypt it with a keyring secret key. j types a path directly.
  • Input modals β€” masked passphrase entry with live zxcvbn strength meter; long ops run in background workers with progress.
  • p panic screen β€” instant decoy (innocent PowerShell session).
  • ? help overlay, t theme cycle (cyber/amber/ice/crimson), q/ctrl+c quit.

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 .aos marked packed: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

CommandEffect
cargo builddebug build
cargo build --releaseoptimized binary in target/release/
cargo testunit + render tests (TestBackend)
cargo clippy -- -D warningslint
cargo fmtformat

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.