Fury · Post-quantum file encryption

Encrypt it now. Keep it secret afterwards.

A file encrypted today may be copied today and opened decades later. Fury is built for that: hybrid post-quantum key agreement by default, no classical fallback, and no way to write a private identity unprotected. Then it goes further — signatures, a metadata-private vault, and backups that notice when somebody rewrites history.

  • 2Independent lattice KEMs
  • 0Classical downgrade paths
  • 2Signatures, both required
  • GPLv3Free software
Discover

Harvest now, decrypt later is somebody's actual plan.

Traffic and archives captured today can be stored cheaply and opened when the mathematics catches up. Anything you encrypt with classical public-key cryptography is only confidential for as long as that assumption holds.

Fury starts with one job: turn a file into encrypted data that only the holder of the matching private identity can read, using key agreement chosen to survive that transition. Around that sit the pieces real archives need — who signed it, which recipient set it went to, where it is stored, and whether the backup you are about to restore is the one you left. Every part of it comes with a design document that says plainly what it does not protect against.

Five decisions, made once.

Every other choice in Fury follows from these — including the features it deliberately refuses to offer.

  1. I

    Post-quantum only

    No classical public-key recipients and no silent downgrade path. There is no negotiation an attacker can push towards the weaker option, because the weaker option was never shipped.

  2. II

    Conservative hybrid

    The default suite combines FrodoKEM-640-SHAKE with ML-KEM-768 — two different lattice families. Your file stays confidential unless both assumptions fail for the same target.

  3. III

    Agility with permanence

    New suites can become the default without old files becoming unreadable. Suite identifiers and stanza tags are wire constants and are never reused, so every shipped suite remains decryptable.

  4. IV

    No unprotected identities

    Private encryption and signing identities serialise only with a passphrase. There is no API, and no flag, for writing one in the clear — because the one that exists is the one that eventually leaks.

  5. V

    Pure Go

    Static binaries, no cgo requirement, nothing to install alongside. Copy the binary to the machine that needs it and it works.

What Fury gives you.

Four commands. One does the everyday encryption work; the others make identities, inspect files, and keep your key off the machines you do not trust.

02

Key agreement

Two lattice families, one file key.

FrodoKEM-640-SHAKE and ML-KEM-768 both wrap the same file key. Breaking one is not enough — an attacker needs both to fall, for the same recipient, on the same day.

  • Suite identity embedded in every key and file
  • Decryption dispatches on the stanza tag it finds
  • 256-bit keys preserve a post-quantum symmetric floor
03

Identities

Protected on disk, always.

Private identities are encrypted with Argon2id and XChaCha20-Poly1305 before they touch the filesystem. Change the passphrase whenever you like; inspect and manage unlock methods without exporting anything.

  • Multi-slot format with passphrase and security-key recovery
  • Existing identities migrate in place
  • Public keys as fury1…, fingerprints as furyfp1…
04

Authorship

Sign it, and prove both ways at once.

A separate signing identity produces a detached signature that is only valid when Ed25519 and ML-DSA-65 both verify. Neither component can be stripped, and neither can be downgraded to on its own.

  • Signing keys are independent of encryption identities
  • Signs the file digest and, optionally, the intended policy
  • Keys as furysig1…, fingerprints as furysigfp1…
05

Teams

Name a recipient set once, rotate it later.

A policy is a strictly parsed snapshot of up to 256 public keys with its own furypolicy1… digest. Encrypt to the policy, and when the team changes, rekey the ciphertext to a new one without re-encrypting the payload.

  • Rekey authenticates every payload chunk before it rewrites the header
  • Canonical member order; duplicate and unknown fields rejected
  • Rotation, not revocation — an old copy stays readable to whoever kept it
06

Trust

Bind a person to their keys, and notice when that changes.

A signed profile ties a subject to exact encryption and signing keys, validity dates, a sequence number and revocation state, under an issuer you trust. Fury keeps durable local state and refuses anything that contradicts it.

  • Rollback, equivocation and unlinked updates rejected
  • Issuer-key changes need a deliberate trust migration
  • Revocation is recorded before encryption is refused, so replay fails too
07

Private Vault

A store where the filenames are secrets too.

Names, exact sizes, modes, timestamps and history live only inside encrypted records. On disk there are random identifiers and size-bucketed objects — locally or over SSH. Add, list, get, rename and delete, with every change recorded inside the encrypted catalogue.

  • Authenticated mode signs each record, so writers are attributable
  • fury audit reads back who changed what, and when they said so
  • Retained, not permanent: the Reaper prunes old history on purpose
08

Backup

Snapshots that cannot be quietly rewritten.

Every snapshot manifest is encrypted, composite-signed and chained to its predecessor. The trust anchor lives outside the repository, so a rollback, a fork or a replaced snapshot is detected rather than accepted.

  • Per-file objects — restore one path without unpacking the archive
  • A second traversal catches files that moved while they were read
  • Restore drills issue signed receipts bound to the exact snapshot
09

Hardware

Unlock with a security key.

Enrol a FIDO2 security key as an unlock method, so opening a file needs a physical touch as well as a passphrase — and losing the laptop is no longer the same as losing the archive.

  • The key unwraps the container, it does not hold the identity
  • Passphrase recovery is always retained, so a lost key is survivable
  • Native helper built against libfido2; stubs are refused
10

Remote work

Decrypt on the server without shipping your key to it.

The agent unlocks a header and returns only its file key, over a local or explicitly forwarded Unix socket. Identities, passphrases and plaintext never cross the protocol, and each request needs confirmation.

  • Requests bound to a verified SSH session; unbound ones denied by default
  • Optional policies per transport, host-key chain, identity and expiry
  • Hash-linked local audit log, verifiable with fury-agent audit verify
11

Inspection

Check it before you rely on it.

Describe an encrypted file — its suite, its recipient stanzas, its shape — without decrypting a byte. Then run the preflight: installation, identity permissions, recovery methods and authenticated backup continuity, all read-only.

  • No passphrase needed to look, no security key touched by the preflight
  • Signed drill receipts checked against the snapshot actually present
  • --json --strict for monitoring that should page somebody
12

For developers

A file format and a Go library, not just a binary.

The format is documented end to end — intro line, stanzas, header MAC, chunked payload, armour — and the same behaviour is available as a library, with the private-identity rule enforced in the API itself.

  • Stable v1 wire format with published compatibility rules
  • Reproducible release builds and a British-English handbook
  • GPLv3, so you can read every line before trusting it

What Fury does not claim

Fury is not unbreakable, military-grade or zero-knowledge, and it does not use those words. A .fury file protects contents, not filenames and not exact sizes; there is no forward secrecy, so a compromised identity exposes every ciphertext already sent to it; and rekeying rotates a recipient set rather than revoking anyone who kept the old copy. A vault hides names and timestamps but still leaks size buckets, object counts and access timing, and nothing detects hostile storage that deletes, withholds or replays records. Backups detect forks and rollback only through the trust anchor you keep outside the repository. Fingerprints authenticate keys, not people — verify important ones through a separate channel. And Go cannot guarantee key material is erased from memory, which Fury states rather than glosses over.

Four steps, and the mathematics is somebody else's problem.

The whole model fits in a paragraph, which is the point. Cryptography people do not understand is cryptography people use wrongly.

  1. I

    Create an identity

    One command produces your private identity and its matching public key. Choose a long passphrase, then back the identity up somewhere you would trust with the files it protects.

  2. II

    Share the public half

    Give the public key — or just its short fingerprint — to whoever needs to send you something. It is not a secret and never was.

  3. III

    They encrypt

    One command against the public key produces an encrypted file. Point it at a policy instead when a whole team needs access; each recipient gets their own wrapped copy of the file key.

  4. IV

    You open it

    Your identity and its passphrase — plus a touch of a security key, if you enrolled one — restore the original file. Everything else is detail you can read at leisure.

Reach for Fury when…

01The material must stay confidential for years, not months.

02You assume an adversary who stores everything and waits.

03Your archive backups leave your control the moment they leave the building.

04The filenames would give the game away on their own.

05Somebody needs to prove they produced a release, not merely encrypt it.

06You need a decryption key on a server you do not entirely trust.

07Your compliance position now names post-quantum readiness.

08You want to read the design document before you rely on the tool.

Questions worth asking.

Why hybrid, rather than one post-quantum algorithm?

Because post-quantum cryptanalysis is young. Combining two different lattice families means the file key survives unless both assumptions fail for the same target. It costs a little size and time, and buys a great deal of margin. The signatures work the same way: Ed25519 and ML-DSA-65 must both verify, so neither can be stripped away.

Does it prove who sent the file?

Not by itself, and deliberately so. Encryption gives confidentiality; anyone holding your public key can encrypt to you, which is what a public key is for. When authorship matters, sign the file with a separate signing identity — the signature is what authenticates the author. Even then, a fingerprint authenticates key bytes; a signed recipient profile is what binds those bytes to a named subject under an issuer you trust.

What happens to my old files when the default suite changes?

They keep opening. Decryption dispatches on the tag written into each file, suite identifiers are never reused, and every suite Fury has shipped stays decryptable. Agility was designed in from the start rather than bolted on at the first migration.

A vault or a backup — which do I want?

A vault is a working store where the metadata is secret: names, sizes and timestamps are encrypted, and you add, replace and delete files over time. A backup is an immutable signed chain of snapshots you restore from, with fork and rollback detection anchored outside the repository. Different jobs; most teams that need one eventually want both.

Can I lose access to my own files?

Yes — and that is the honest answer for any tool worth using. Lose the private identity and its passphrase, and nothing recovers the data. Lose a backup's trust anchor and Fury forgets what that repository is meant to look like. Back both up, choose a passphrase you will still know next year, enrol a second unlock method before you need it, and run a restore drill while it is still a drill.

How is it licensed?

Fury is free software under version 3 or later of the GNU General Public Licence. Read it, audit it, build it yourself — it needs Go 1.26.6 or newer, which is a security requirement rather than a preference — and get in touch if you would like help deploying it across a team.

Also from Alchementary.

Independent products, built because they should exist.

01

4ensics Leviathan

Drop a file. See everything.

A complete binary analysis, reverse-engineering and digital-forensics workbench, running inside a browser tab with your artefacts kept local.

See Leviathan
02

Blackwall

Passwordless identity for everything you ship.

OAuth 2.1 and OpenID Connect with passkeys only, an integrity-chained audit log and signed project licences — in a single binary.

See Blackwall
03

NeoCMS

Keep the website. Lose the database.

Controlled visual editing, drafts and publishing for an existing static website — with ordinary HTML still served to the public.

See NeoCMS

Make it unreadable to the future.

Ask about rolling Fury out across a team, standing up a vault or a signed backup repository, integrating the library, or whether post-quantum encryption is genuinely the right answer to the problem in front of you.