Before you continue

almin™ Seal is provided for educational use only, as is and without warranty of any kind. It has not been independently audited.

The author, Almin Ibrahimovic, accepts no responsibility or liability for any loss of data, loss of access to data, or any damage or consequential loss arising from the use or misuse of this software.

A sealed file can only be opened with the matching private key and its passphrase. There is no recovery mechanism. Keep independent backups of anything you seal.

Choose a security profile before you create a key (switch in the top bar). Max security, hybrid is the default: ML-KEM-1024 and X25519 together, so an attacker has to break both. ASD / PQC only uses ML-KEM-1024 alone, with no classical partner, following the direction of ASD’s published cryptography guidance. Neither profile has been independently audited or assessed against any government standard, and the page changes colour so you always know which one is active.

almin™ SealFree

☕ Buy me a coffee

Checking browser capabilities
Keynot open
ModeSeal
Recipientnot chosen
Filesnone yet

Seal for

Drop files here or click to choose. Any size, any number.
How this works, and what it does not promise

Key agreement. For every file a fresh secret is agreed using two independent methods: ML-KEM (the NIST FIPS 203 lattice-based standard, implemented here from the specification; ML-KEM-768 is Security Category 3, ML-KEM-1024 is Category 5, chosen when the key is created) and X25519 elliptic-curve Diffie-Hellman. ML-KEM is mixed into the file key unconditionally, with no mode that derives it from X25519 alone; an unseal that is missing the ML-KEM half, or whose ML-KEM half is rejected, fails. The two shared secrets are combined through HKDF-SHA-256 with an info string that names the product, the container version, the exact ML-KEM parameter set, and whether X25519 is mixed in: AlminSeal/PQF1/KDFv2/<ML-KEM-768|ML-KEM-1024>/<hybrid+X25519|kem-only>/<layer>, published in full in the About panel and asserted in the test log. An attacker must break both secrets, so a flaw in either one on its own is not enough.

Content. HKDF derives a 256-bit AES-256-GCM key from the key agreement. The file is processed in 4 MiB blocks, each sealed with AES-256-GCM with its own authentication tag bound to the header, the block's position, and whether it is last, so truncation, reordering, substitution and bit-flips are all rejected. Files are read and written in a stream, so size is limited by your disk, not by memory. This edition can also open files sealed by almin™ Seal | Pro with its optional second cipher layer.

Harvest now, decrypt later. Data captured today and stored until a quantum computer exists is the threat this design addresses: the lattice half of the key agreement is not known to be breakable by Shor's algorithm. Nothing in this page is a "new quantum algorithm"; new cryptography that has not survived years of public analysis is precisely what you should not trust, so this page uses the standardised primitives instead.

Limits, honestly stated. This implementation has been tested against an independent ML-KEM reference and checked against tampering, but it has not had a professional security audit. JavaScript cannot guarantee constant-time execution, so a hostile process sharing your machine is out of scope. Passphrase protection (Argon2id or PBKDF2-SHA-256) raises the cost of each guess against a stolen key file; it does not make guessing impossible. It is only as strong as the passphrase itself, so four or more random words, or a similar amount of genuine randomness, is what actually does the protecting. Sealed files hide their contents and original name but not their approximate size. With an ML-KEM-1024 key the lattice half reaches Category 5, but the X25519 half remains a 128-bit classical component; the post-quantum margin rises, the classical fallback does not.

Other FIPS 203 tools. FIPS 203 defines only the key encapsulation step, not a file format, so a file sealed by another application cannot be opened here unless that application's container is implemented too. What does work across tools is the key itself: this page accepts ML-KEM-768 and ML-KEM-1024 public keys in PEM, DER, base64 or hex from OpenSSL and similar, and sealing for such a key uses ML-KEM only (no X25519 half).

Format. .pqf container, version 1: magic, flags (hybrid, ML-KEM-1024, double seal for files from Pro, and the key-derivation info string below), 8-byte recipient key id, ML-KEM ciphertext (1088 bytes for ML-KEM-768, 1568 for ML-KEM-1024, chosen by a flag), X25519 ephemeral key (zero when the profile is ASD / PQC only), HKDF salt, block size, length, encrypted metadata, then the authenticated blocks (16 bytes of tag per block). A reader rejects any flag bit it does not recognise rather than guessing. The HKDF info string for new seals is AlminSeal/PQF1/KDFv2/<ML-KEM-768|ML-KEM-1024>/<hybrid+X25519|kem-only>/outer-AES-256-GCM.

Free and Pro editions

You are using the free edition

almin™ Seal is free to use. It gives you post-quantum sealing for files of any size, fully offline, in one HTML file, with a choice of two profiles: Max security, hybrid (ML-KEM with X25519) and ASD / PQC only (ML-KEM-1024 alone). The software remains proprietary: no right to copy, modify or redistribute it is granted without written permission.

What Pro adds. Double seal (a second, independent cipher layer, ChaCha20-Poly1305 inside AES-256-GCM), sealed messages (short text as one pasteable line), re-seal (move files and messages to a new key) and ML-DSA signatures (FIPS 204). Pro is a licensed product; for pricing and terms contact sales@almin.co.uk.

Get almin™ Seal | Pro

FreePro
ML-KEM/X25519 hybrid post-quantum sealingYesYes
ASD / PQC-only profileYesYes
Any file size, fully offline, one HTML fileYesYes
Opens double-sealed files from ProYesYes
Double seal, independent second cipher layerNoYes
Sealed messages, single pasteable lineNoYes
Re-seal to a new keyNoYes
ML-DSA signaturesNoYes
LicenceFreeContact sales

About almin™ Seal (free edition)

Version
2026.10.07 (calendar-versioned: year.month.day of release)
Author
Almin Ibrahimovic, almin.co.uk
Copyright
Copyright © 2026 Almin Ibrahimovic. All rights reserved. almin is a trade mark of Almin Ibrahimovic.
Licence
Free to use. The software remains proprietary: no licence is granted to copy, modify, redistribute or create derivative works without written permission from the copyright holder.
Third-party code
None. This file contains no code under the MIT, GNU or any other third-party licence and loads nothing at runtime. SHA-3 (FIPS 202), ML-KEM (FIPS 203), Blake2b (RFC 7693), Argon2id (RFC 9106) and ChaCha20-Poly1305 (RFC 8439) were implemented from their published specifications. AES-GCM, X25519, HKDF and PBKDF2 are provided by the browser's Web Cryptography API, which does not support Argon2id. Correctness was checked during development against independent open-source references, against the official RFC 9106 test vector for Argon2id, and against the RFC 8439 test vectors and an independent implementation for ChaCha20-Poly1305; none of those references are included in, or needed by, this file.
Standards
NIST FIPS 203 (ML-KEM-768, ML-KEM-1024), FIPS 202 (SHA3-256, SHA3-512, SHAKE128, SHAKE256), FIPS 197 and SP 800-38D (AES-256-GCM), RFC 7748 (X25519), RFC 5869 (HKDF), RFC 8018 (PBKDF2), RFC 8439 (ChaCha20-Poly1305), RFC 9106 (Argon2id) and RFC 7693 (Blake2b, which Argon2id is built on).
Security profiles
The switch in the top bar chooses between two configurations. Max security, hybrid (the default) seals with ML-KEM and X25519 together, then AES-256-GCM. ASD / PQC only seals with ML-KEM-1024 alone and AES-256-GCM, and creates keys with no X25519 half, following the direction of ASD’s published cryptography guidance, which prefers post-quantum algorithms without a classical partner. The profile changes what this page creates; it can still open files from either profile. It is a configuration, not an assessment: this tool has not been assessed against the ISM or independently audited, and has no FIPS 140 validation.
Test evidence
The ML-KEM implementation was checked against the official C2SP Wycheproof vectors (1,155 for ML-KEM-768 and ML-KEM-1024) and cross-checked against an independent open-source implementation. Passing test vectors shows the algorithm is implemented to the specification; it is not an independent security audit, a side-channel review or a FIPS 140 validation, and this build has none of those.
Support
almin™ Seal is free. If it is useful to you, you can ☕ buy me a coffee through PayPal. Donations are optional, do not unlock anything and are not payment for a licence.
Pro edition
almin™ Seal | Pro adds double seal, sealed messages, re-seal and ML-DSA signatures. It is a licensed product: almin.co.uk/seal/pro or sales@almin.co.uk. This edition opens files sealed by Pro, including double-sealed ones, but cannot create them.
Key derivation
From 2026.10, every new seal's HKDF-SHA-256 info string explicitly names the product, the container format version, the ML-KEM parameter set in use, and whether X25519 is mixed in, following the NIST SP 800-227 guidance to label a hybrid combiner's inputs rather than concatenate them blind: AlminSeal/PQF1/KDFv2/<ML-KEM-768|ML-KEM-1024>/<hybrid+X25519|kem-only>/outer-AES-256-GCM (Pro adds an inner-ChaCha20-Poly1305 label for its second layer). Containers sealed before this change keep working: they carry no such flag, and are opened with the fixed info string almin™ Seal always used.
Check a copy
Choose any copy of this file to see its SHA-256 checksum, which you can compare with the checksum published by the author or with sha256sum on the command line. A matching checksum means the copy is byte-for-byte the file the checksum was taken from. The page cannot vouch for itself, so take the reference checksum from a source you trust, not from the copy being checked.
Privacy
No data leaves your device. The page makes no network requests and works with the network disconnected.
Compatibility
Every key file and sealed .pqf container carries its own format version, independent of the application's calendar version above; a later release of almin™ Seal keeps reading key files and containers made by an earlier one. Creating a key also downloads a copy of almin™ Seal itself, named with the version that made it, so you can keep that exact copy alongside the key as a working offline reader for it, whatever changes online later.
Cryptanalysis watch
Last checked: 2026.10.03 (calendar-versioned, same as the release above). Algorithm in use: ML-KEM (FIPS 203), category 3 or 5 depending on the key. As of this check, NIST has not withdrawn or flagged ML-KEM, and no practical key-recovery attack against it has been published. In July 2026, HAWK, a separate NIST candidate digital signature scheme built on the Lattice Isomorphism Problem, was withdrawn from standardisation after a key-recovery attack was found against its specific construction; NIST and the researchers confirmed this does not affect ML-KEM or ML-DSA, which rest on the separate Module-LWE problem and were not attacked. This is a manually maintained note, not an automated check the page runs on itself; it will be updated at each release, and if ML-KEM were ever withdrawn or broken this record would say so plainly rather than being quietly left as is.

Educational use only. This software is provided as is, without warranty of any kind, express or implied. It has not been independently audited or certified. The author accepts no responsibility or liability for any loss of data, loss of access to data, or any damage or consequential loss arising from its use or misuse. There is no recovery for a lost private key or passphrase; keep independent backups of anything you seal.

almin™ Seal is the free edition. For double seal, sealed messages, re-seal and ML-DSA signatures, see almin™ Seal | Pro.

almin.co.uk/seal/pro