PQCServer
Complete Guide
Everything you need to send quantum-safe encrypted messages, store files in an encrypted vault, notarize documents, and manage post-quantum cryptographic keys — for both technical and non-technical users.
Quick Navigation
What is PQCServer?
PQCServer is a zero-knowledge post-quantum cryptography platform that lets you send encrypted messages, store files securely, and notarize documents — all using the latest NIST-standardized post-quantum algorithms.
It is part of the OnionSearchEngine LLC privacy ecosystem, alongside OnionMail and OnionDrive.
Why Post-Quantum Cryptography?
Today's most common encryption (RSA, ECC) relies on mathematical problems — like factoring large numbers — that classical computers cannot solve in reasonable time. However, quantum computers can break these algorithms using Shor's Algorithm.
Quantum computers powerful enough to do this don't yet exist at scale, but security agencies and intelligence services are already collecting encrypted traffic today to decrypt it later — the so-called "Harvest Now, Decrypt Later" attack. If your data needs to remain secret for years, you need post-quantum encryption now.
| Year | Event |
|---|---|
| 1994 | Shor's Algorithm published — theoretically breaks RSA/ECC |
| 2016 | NIST launches post-quantum algorithm competition |
| 2024 | NIST finalizes FIPS-203 (ML-KEM) and FIPS-204 (ML-DSA) |
| 2030 | NSA CNSA 2.0 deadline — all US government systems must use PQC |
| 2035 | Estimated Q-Day horizon — quantum computers may break classical encryption |
PQCServer uses ML-KEM (FIPS-203) for key encapsulation and encryption, and ML-DSA (FIPS-204) for digital signatures — the official 2024 NIST standards, not experimental or proprietary algorithms.
Zero-Knowledge Design
PQCServer is designed so that the server never sees your plaintext data. All cryptographic operations happen in your browser before any data is sent to the server.
| Server stores | Server never sees |
|---|---|
| ✓ Encrypted ciphertext (unreadable) | ✗ Plaintext messages |
| ✓ Your public keys (by design — shareable) | ✗ Your private keys |
| ✓ Encrypted file chunks in GridFS | ✗ Original file content |
| ✓ Document hash + timestamp | ✗ The document itself |
| ✓ Username + hashed password | ✗ Your password in plaintext |
Create an Account
You can receive and send encrypted messages without an account — just paste the recipient's public key directly. An account is required to publish your public keys on the key server, use the file vault, and access the document notary.
Step by Step
Example:
alice_smith, bob-privacy, mario2026
Generate Your Keys
PQCServer uses two types of key pairs. Both are generated entirely in your browser — the private keys never leave your device.
Step by Step
ML-KEM-1024 — ~256-bit security, the level this account needs
ML-KEM-768 — ~192-bit security, for interoperability with outside systems only
ML-KEM-512 — ~128-bit security, smallest keys, fastest, least margin
pqc JavaScript library. This happens entirely in your browser — nothing is sent to the server yet.
.txt export is also available for reference.
This is the only copy — store it safely.
Recommended storage locations:
• Encrypted USB drive or hardware wallet
• Password manager (Bitwarden, KeePass, etc.)
• Encrypted disk image (VeraCrypt)
pqcserver.com/u/YOUR_USERNAME
to send you encrypted messages.
Key File Format
The keyfile is JSON. Every key is carried in both encodings, so an importer never has to guess or convert:
The Import an existing keyfile button on the key generation page reads this
format, the older .txt export, and the password-protected backups produced by
PQCMail, PQCChat, PQCDrive and PQCVault. Keys are recognised by their contents rather than by
field name, so a file from any of those services imports without editing.
🔒 Encrypted Messaging
This section is the how-to. For the design rationale, see how encrypted messaging works.
Send end-to-end encrypted messages to anyone. The recipient receives a shortlink
(pqcserver.com/m/xxxxxxxx) they can open in any browser to decrypt the message
using their private key. No app required.
How to Send an Encrypted Message
• Type a PQCServer username — the system fetches their public key automatically
• Paste a public key directly — use the base64 ML-KEM public key
• Use your own username — to save files only you can decrypt
Burn after read — the message is permanently deleted after the first time it's opened. Ideal for one-time sensitive information.
1. Loads the recipient's ML-KEM public key
2. Performs ML-KEM key encapsulation — generates a shared secret + KEM ciphertext
3. Encrypts your message with AES-256-GCM using the shared secret
4. Sends only the ciphertext (never the plaintext) to the server
5. Returns a shortlink
https://pqcserver.com/m/abc12345
The link itself reveals nothing about the content — it is safe to share over any channel, including unencrypted email.
How to Decrypt a Message
secret value.
Paste it in the private key field on the page.
1. Downloads the ciphertext from the server
2. Uses your ML-KEM private key to decapsulate the shared secret
3. Decrypts the message locally with AES-256-GCM
4. Displays the plaintext — which never leaves your browser
📁 Zero-Knowledge File Vault
This section is the how-to. For the design rationale, see how the encrypted vault works.
Store files permanently in your personal encrypted vault. Files are encrypted in your browser before upload — the server only stores ciphertext. Only you can decrypt them using your private key. There are no file size limits — files are split into 3MB chunks and stored in MongoDB GridFS.
Upload a File to Your Vault
work, 2026, contracts.
The note is a short description visible only to you.
pqcserver.com/m/xxxxxxxx).
You can share this link with anyone — but only someone with your ML-KEM private key can decrypt the file.
Manage Your Vault
Download and Decrypt a Vault File
pqcserver.com/m/xxxxxxxx in a browser.🔏 Document Notary
This section is the how-to. For the design rationale, see how document timestamping works.
The Document Notary lets you prove that a specific document existed at a specific time and that it has not been modified since. It works by hashing your document locally and signing the hash with an ML-DSA digital signature. The document itself never leaves your browser.
How the date is proven
A signature proves who signed what, but carries no date. On most timestamping services the date comes from a field in the operator's database — which the operator can change, with nothing in the certificate to show it.
PQCServer links every certificate to the one issued before it, forming an
append-only chain. Each certificate carries its position (seq), the
hash of its predecessor (prev_hash) and its own chain hash. Altering
a certificate changes its hash and breaks the link in every certificate issued
afterwards, so anyone holding a later one can demonstrate the tampering.
The end of the chain is published hourly at pqcserver.com/anchors/ and submitted to OpenTimestamps, whose calendars commit it into the Bitcoin blockchain. Once an anchor is in a block, back-dating a certificate covered by it would require rewriting Bitcoin.
The limit: anchors are hourly, so a certificate is proven to have existed by the time of the next anchor, not to the second. For establishing precedence that bound is what matters; if you need certified time to the second, an accredited Time-Stamping Authority under eIDAS is the right instrument.
Certificates issued before the chain was introduced remain outside it and are reported as such by the verification page. They cannot be added retroactively — writing a history that did not happen is exactly what the chain prevents.
Sign and Notarize a Document
secret value. Paste it in the field.
The browser signs the document hash with your ML-DSA key.
• The document hash (never the document)
• Your ML-DSA signature
• The file name and size, if you chose to record them
It issues a timestamp certificate — a JSON document with an immutable ID (
ts_xxxxxxxxxx), the UTC time, and the certificate's position in the
append-only chain described above.
pqcserver.com/verify.html?id=ts_xxxxxxxxxx — share it with anyone who needs to check.
Verify a Notarized Document
For signed text the match is exact: a trailing space or newline produces a different hash, so copy the text from where you signed it rather than retyping it.
✗ Invalid — the content has been modified since signing, or the certificate does not match its own chain position.
🔑 Key Server
PQCServer doubles as a public key server for post-quantum ML-KEM and ML-DSA keys. When you generate keys and register your profile, your public keys are published and anyone can look them up to send you encrypted messages.
Your Public Profile
Your public profile is at: https://pqcserver.com/u/YOUR_USERNAME
It shows your ML-KEM and ML-DSA public keys and a button to send you an encrypted message.
API — Look Up a Public Key
Any application can fetch a user's public key via the REST API:
Comparison with PGP Key Servers
| Feature | PQCServer | keys.openpgp.org |
|---|---|---|
| Algorithms | ML-KEM + ML-DSA (NIST 2024) | RSA / ECC (pre-quantum) |
| API | REST JSON | HKP Protocol |
| Public profile page | ✓ | ✗ |
| Integrated encryption | ✓ — encrypt from the profile page | ✗ |
| Embeddable widget | ✓ | ✗ |
🔌 Embeddable Widget
Add a "Send Encrypted Message" button to any website with a single line of HTML. The widget opens an inline modal with a 3-step flow: recipient lookup → write message → get shortlink. No redirect, no new tab, no installation for the recipient.
Usage
Automatically fetches Alice's public key. The user just writes the message and gets a link.
Use when the recipient has a public key but no PQCServer account.
The widget shows a recipient lookup step first. The user types a PQCServer username or pastes a public key.
Optional Parameters
| Attribute | Default | Description |
|---|---|---|
data-recipient | — | PQCServer username of recipient |
data-pubkey | — | Base64 ML-KEM public key of recipient |
data-label | 🔒 Send Encrypted Message | Button label text |
data-theme | dark | dark or light |
Integration with OnionMail
The widget is designed to integrate seamlessly with OnionMail. Add it to your OnionMail profile or signature page so anyone visiting your mail profile can send you a quantum-safe encrypted message directly, without knowing your email address.
const BASE variable at the
top of widget.js to point to your own domain.
Self-Hosting
PQCServer is open source under AGPL v3. You can run your own instance on any Ubuntu server. The source code is available at github.com/Onion-Search-Engine/pqcserver.
Requirements
Quick Install
Configuration
Adding a Tor .onion Address
Cryptographic Algorithms
All algorithms used by PQCServer are official NIST post-quantum standards or NIST-approved symmetric primitives.
Key Sizes Reference
| Variant | Security | Public key | Private key | Ciphertext |
|---|---|---|---|---|
| ML-KEM-512 | ~128-bit | 800 bytes | 1,632 bytes | 768 bytes |
| ML-KEM-768 | ~192-bit | 1,184 bytes | 2,400 bytes | 1,088 bytes |
| ML-KEM-1024 | ~256-bit | 1,568 bytes | 3,168 bytes | 1,568 bytes |
Highlighted row = required default (ML-KEM-1024)
Frequently Asked Questions
Do I need an account to send messages?
No. You can send an encrypted message to anyone by going to encrypt.html and entering their public key directly, or their PQCServer username. No account needed.
Do I need an account to decrypt messages?
No. You only need your private key file. Open the shortlink, paste your ML-KEM private key, and decrypt. The private key is used locally and never sent to the server.
What happens if I lose my private key?
There is no recovery. Your private key is the only way to decrypt your data. This is by design — the server cannot help you recover it because the server never had access to it. This is why you must back up your key file in multiple secure locations immediately after generating it.
Can the PQCServer admins read my messages?
No. The server only stores encrypted ciphertext. Without your private key — which never leaves your device — the ciphertext is mathematically indecipherable.
Can PQCServer back-date a notary certificate?
Not without it being detectable. Certificates form an append-only chain whose head is published hourly and committed to the Bitcoin blockchain. Altering one breaks every certificate after it, and rewriting the whole chain no longer matches what was published. See the anchors page for how to check this yourself.
What happens if PQCServer is seized by authorities?
Authorities would obtain only encrypted ciphertext and hashed passwords. Without private keys — which are stored only on users' devices — the data is useless. This is the practical benefit of zero-knowledge design.
Is PQCServer compatible with Tuta or ProtonMail?
PQCServer is not an email provider — it is a cryptographic layer that works alongside any email service. You can send a PQCServer shortlink via Tuta, ProtonMail, or Gmail. The encryption happens in the browser, not in the email itself.
How is this different from PGP?
PGP uses RSA or ECC — classical algorithms that quantum computers can break. PQCServer uses ML-KEM and ML-DSA — quantum-resistant algorithms standardized by NIST in 2024. PQCServer is also much easier to use: no key import/export tools, no keyring management, no email client plugins — just a URL.
Can I use PQCServer over Tor?
Yes. The site is accessible via Tor Browser. For maximum anonymity, access PQCServer via the .onion address (published on the homepage). All features work over Tor.
Is the code audited?
The code is fully open source under AGPL v3 on
GitHub.
Community audit is welcome and encouraged. The cryptographic implementation uses the
pqc JavaScript library
(pure JS implementation of NIST PQC standards) and the browser's native Web Crypto API for AES-256-GCM.
Is it free?
Yes. PQCServer is free to use. The hosted service at pqcserver.com is provided at no cost. You can also self-host your own instance for free.
Glossary
Read next Encrypted messaging · Encrypted vault · Document notary · Key generator · How it works · Pricing · Home
PQCServer — Copyright © 2026 OnionSearchEngine LLC — Released under AGPL v3 — GitHub — PostQuantum.Tools