No Identity

Share in the shadows.
Trace every leak.

ShadowSign lets you anonymously distribute confidential files โ€” while giving each recipient a cryptographically unique copy. If any copy leaks, you'll know exactly who leaked it.

01 ยท IDENTITY
Your Cryptographic Identity
Generate a 4096-bit RSA keypair. Your Public Key is your shareable address. Your Private Key stays secret and decrypts files sent to you. No account or email needed.
02 ยท ENCRYPT
Per-Recipient Fingerprinting
Each recipient gets a unique AES-256 encrypted copy with an HMAC-SHA256 fingerprint derived from their Public Key. The file contents are identical โ€” the fingerprints are not.
03 ยท DELIVER
Encrypted JSON Packages
Each package is a self-contained JSON file: encrypted payload + encrypted key + embedded fingerprint. Send it over any channel โ€” email, Signal, USB, cloud. ShadowSign is transport-agnostic.
04 ยท TRACE
Forensic Leak Attribution
Upload a leaked package + your attribution map + your HMAC secret. ShadowSign recomputes fingerprints for all known recipients and flags the match in seconds.
Cryptographic Primitives
RSA-OAEP 4096Key generation, public-key encryption of per-file AES keys
AES-GCM 256Symmetric encryption of the file payload (unique key per recipient)
HMAC-SHA256Deterministic per-recipient fingerprint = HMAC(secret, pubkey + filehash)
Web Crypto APINative browser implementation โ€” no libraries, no dependencies, no trust required
โ„น
ShadowSign has no backend. All keys, encryption, and fingerprinting happen locally in your browser tab. Nothing is transmitted to any server.
Security Properties
โœ“ Sender Anonymity
The platform โ€” and any observer โ€” learns nothing about who sent the file. No identity is required to package or distribute.
โœ“ Recipient Accountability
Every copy carries an unforgeable fingerprint unique to the recipient's cryptographic key. Recipients can't forge another's fingerprint.
โœ“ End-to-End Encryption
File contents are encrypted before packaging. Only the intended recipient (with their Private Key) can decrypt and read the file.
โœ“ Zero Trust Required
No server, no account, no trust in any third party. The cryptography is verifiable and runs in your browser using standard Web APIs.
๐Ÿ‘ป
Your identity is a cryptographic keypair. Think of it like a PGP key โ€” your Public Key is your address (share it freely), and your Private Key is your secret (never share it). Anyone can encrypt files to you using your Public Key. Only you can decrypt them with your Private Key.
Generate New Keypair

This creates a fresh 4096-bit RSA-OAEP keypair directly in your browser. Generation takes a few seconds. If you already have an identity, generating a new one will replace it in this session โ€” always export first if you want to keep it.

โš 
Your keys are not stored anywhere by ShadowSign. If you close this tab without exporting, your identity is gone. Use the "Export Identity" button below to save your keypair as a JSON file.
Import Existing Identity

Already have a ShadowSign identity? Paste the JSON you exported previously to restore it in this session.

Identity JSON
How Keypairs Work โ€” Quick Explainer
๐Ÿ’ก
RSA-OAEP is an asymmetric encryption scheme. Two mathematically linked keys are generated together:

โ€ข Public Key โ†’ Encrypts data. Safe to publish. Used by senders.
โ€ข Private Key โ†’ Decrypts data. Must stay secret. Used by you to open packages.

When a sender creates a package for you, they generate a random AES-256 key, encrypt your file with it, then encrypt that AES key using your Public Key. Only your Private Key can recover the AES key โ€” and therefore the file.
Encrypt and package a file for one or more recipients.
๐Ÿ“ค
Sending creates unique encrypted packages per recipient. Each package has the same encrypted file but a different fingerprint. Only the correct recipient can decrypt their package โ€” and you can always trace which copy leaked.
Step 1 โ€” Select File
๐Ÿ“
Drop any file here, or click to browse
PDF, images, documents, archives, binaries โ€” any file type ยท Max depends on your browser RAM
๐Ÿ”’
Your file is never uploaded anywhere. It's read into browser memory, encrypted with AES-256, and packaged locally. The original file is not modified.
Step 2 โ€” Add Recipients

Each recipient needs to provide you with their ShadowSign Public Key. Paste each key below. Add a label (e.g. their name) to keep track.

โ„น
Each recipient will receive a different encrypted package. The file contents are the same, but the fingerprint embedded in each package is unique to that person's Public Key. This is how leak attribution works.
Public Key (PEM format) Label / Name
๐Ÿ’ก
To get a recipient's Public Key, ask them to visit ShadowSign, generate their identity, and share their Public Key with you. It starts with -----BEGIN PUBLIC KEY-----
Step 3 โ€” Signing Secret & Note
HMAC Signing Secret (required)
?
This secret is used to generate the unique fingerprint for each recipient. It's like a private password only you know. You'll need it again during forensic analysis to verify a leaked copy. Never share it.
โš  Keep this safe. You'll need it to run forensic analysis if a file leaks. Anyone with this secret and the attribution map can trace leaks. Store it somewhere secure (password manager recommended).
Sender Note (optional, encrypted)
?
This message is encrypted alongside the file and included in every package. Only recipients who decrypt the package can read it. It could be instructions, context, or a verification phrase.
This note is AES-encrypted โ€” it cannot be read without decrypting the package first. Good for adding context or a warning to recipients.
Decrypt a package sent to you.
๐Ÿ“ฅ
You received an encrypted ShadowSign package. To decrypt it, you need your Private Key (from your identity). The package was encrypted specifically for your Public Key โ€” no one else can open it.
Step 1 โ€” Load Your Private Key

Your Private Key is the one you generated (or imported) in the Identity tab. It starts with -----BEGIN PRIVATE KEY-----

Your Private Key (PEM format)
If you generated an identity earlier in this session, click the button above to auto-fill. Otherwise paste your exported Private Key here.
Step 2 โ€” Load the Encrypted Package

Drop the .json package file directly, or paste its contents below.

๐Ÿ“ฆ
Drop your .json package here, or click to browse
The shadowsign-RecipientName.json file the sender gave you
or paste JSON manually
Encrypted Package JSON
๐Ÿ’ก
The package contains your encrypted file, an AES key locked to your Public Key, your unique forensic fingerprint, and an optional sender note. None of it is readable without your Private Key.
Trace a leak using any evidence you have.
๐Ÿ”
Three ways to trace a leak. Use Mode A if you have your attribution map. Use Mode B if you have the leaked JSON package but lost the map โ€” every package embeds a hash of the recipient's public key so you can verify any suspect directly. Use Mode C if you only have the raw leaked file (PDF, TXT, etc.) โ€” forensic metadata is invisibly baked into the decrypted file itself using binary append, zero-width Unicode, and PDF XMP.
Step 1 โ€” Load the Leaked Package JSON

Drop the shadowsign-*.json package file, or paste its contents. The key fields are plaintext โ€” no decryption needed.

๐Ÿ“„
Drop the leaked .json package here, or click to browse
shadowsign-RecipientName.json
or paste JSON manually
Leaked Package JSON
Step 2A โ€” Load Your Attribution Map

Drop the shadowsign-attribution-map.json file you exported when sending, or paste its contents.

๐Ÿ—‚๏ธ
Drop the attribution map here, or click to browse
shadowsign-attribution-map.json
or paste JSON manually
Attribution Map JSON
Step 3A โ€” Enter Signing Secret
HMAC Signing Secret
Used to verify the fingerprint match is genuine and wasn't tampered with.
Three layers of forensic evidence โ€” stacked for resilience
๐Ÿงฑ
Layer 1 โ€” JSON package fingerprint + recipientKeyHash (Mode A/B)
Layer 2 โ€” Binary append SHDWSGN marker + payload after EOF (ALL files, Mode C)
Layer 3 โ€” Zero-width invisible Unicode in text body (TXT/MD/HTML, Mode C)
Layer 4 โ€” PDF XMP custom metadata block in PDF stream (PDF only, Mode C)

payload = {fp, kh, kp, rl, fn, ts} โ€” fingerprint, key hash, key preview, label, filename, timestamp
ShadowSign โ€” Complete User Guide

Everything you need to know to send, receive, and forensically analyse ShadowSign packages.

๐ŸŽญ
Example Scenario: You're a manager who needs to share a confidential report with 4 people. You want to ensure that if it leaks to the press, you can prove exactly which of those 4 was the source. ShadowSign solves this with cryptographic certainty.
1
Setting Up Your Identity (Do This Once)
โ–ผ
โ„น
Your identity is a 4096-bit RSA keypair. This is a one-time setup. Once generated, export it and store it safely โ€” you'll use the same identity for all future ShadowSign activity.
  1. Go to the Identity tab.
  2. Click Generate 4096-bit RSA Keypair. Wait 2โ€“5 seconds for generation to complete.
  3. Your Public Key and Private Key will appear. The Private Key is blurred โ€” click it to reveal.
  4. Click Export Identity (JSON) immediately. Save the file in a secure location (encrypted drive, password manager).
  5. Copy your Public Key using the Copy button. Share this key with anyone who may need to send you encrypted files.
โš 
Do not close the tab without exporting. ShadowSign does not store your keys. If you close the tab, your keypair is gone forever and you'll lose access to any files encrypted to it.
2
Sending a Confidential File
โ–ผ
โ„น
Sending creates one unique encrypted package per recipient. Each package contains the same file but has a different fingerprint. You can send files without having your own identity โ€” only recipients need one.
  1. Go to the Send File tab.
  2. Drop your file into the upload zone (or click to browse). Any file type is supported.
  3. Collect each recipient's Public Key (ask them to generate one at ShadowSign and share it with you). Paste each key into a recipient row and give them a label (e.g. their name).
  4. Enter your HMAC Signing Secret โ€” this can be any phrase. Write it down or store it in a password manager. You'll need it to run forensics later.
  5. Optionally write a Sender Note โ€” this is encrypted alongside the file (e.g. "Do not distribute. This copy is traced to you.").
  6. Click Encrypt & Generate Unique Packages. This may take a few seconds per recipient.
  7. Download or copy each package. Send the correct package to each recipient โ€” do not mix them up. Each package's label matches the recipient.
  8. Export the Attribution Map and store it privately alongside your HMAC secret. This is your forensics kit.
๐Ÿ’ก
You can send the packages via any channel โ€” email, Signal, Slack, USB drive, shared folder. ShadowSign is transport-agnostic. The package is safe to transit over untrusted networks (it's fully encrypted).
3
Receiving & Decrypting a Package
โ–ผ
โ„น
You can only decrypt a package that was encrypted to your Public Key. You need your Private Key to do this. Make sure you're using the same identity that the sender addressed the package to.
  1. Go to the Receive & Decrypt tab.
  2. Load your Private Key โ€” either click Use My Current Session Key (if you generated/imported one earlier) or paste it manually.
  3. Paste the full encrypted package JSON you received. It should start with {"version":
  4. Click Decrypt Package.
  5. If successful, you'll see your unique fingerprint (the one embedded in your copy), any sender note, and file info.
  6. Click Download Decrypted File to save the original file.
โš 
The fingerprint shown is embedded in your copy. If you share this package, the sender can trace the leak back to you. Treat the package file as confidential.
4
Running Forensic Analysis on a Leak
โ–ผ
โ„น
When a package leaks publicly, you can use the Forensics tool to match its embedded fingerprint against your known recipients. You need the leaked package JSON + your attribution map + your HMAC secret.
  1. Go to the Leak Forensics tab.
  2. Paste the full leaked package JSON โ€” even if you can't decrypt it, the fingerprint field is in plaintext.
  3. Paste your Attribution Map JSON โ€” this is the file you exported after sending.
  4. Enter your HMAC Signing Secret โ€” the same one you used when sending.
  5. Click Run Forensic Analysis.
  6. ShadowSign compares the leaked file's fingerprint against every recipient's stored fingerprint in your map. A match reveals the leaker.
๐Ÿ’ก
What if there's no match? This could mean: (a) the leaker was not in your recipient list, (b) you used a different HMAC secret, or (c) the package was modified. You can also manually compare the leaked fingerprint to any recipient's fingerprint using the formula: HMAC-SHA256(secret, pubkey + filehash)
โš–
The HMAC fingerprint is cryptographically unforgeable โ€” a recipient cannot claim their copy was "tampered with" to change the fingerprint, because they don't know your signing secret.
5
Frequently Asked Questions
โ–ผ
Can a recipient prove they didn't leak it?
Not cryptographically, because they have the decrypted file contents. However, they cannot forge another recipient's fingerprint without the HMAC secret. The fingerprint proves which copy was leaked, not who made the final decision to leak it.
What if a recipient re-encrypts and shares the file (not the package)?
If they strip the ShadowSign packaging and share the raw file, the fingerprint is lost. For high-sensitivity documents, consider embedding a visible or invisible watermark in the document itself before sending through ShadowSign.
Is this admissible as legal evidence?
ShadowSign provides cryptographic evidence, not legal proof. The fingerprint demonstrates which copy was distributed to which key, but establishing that a specific person controls that key requires additional verification. Consult a legal professional for evidentiary use.
How large can files be?
ShadowSign runs in browser memory. Practical limits depend on your device's available RAM, but files up to a few hundred MB should work on most systems. Very large files (1GB+) may cause the tab to crash.
Can I use the same identity for multiple sends?
Yes โ€” your identity (keypair) can be reused across any number of sends and receives. Export it once and import it whenever you need it. Use different HMAC secrets per distribution to keep attribution maps separate.
What if I lose my attribution map?
You'll need to re-create it by re-sending the same file to the same recipients with the same HMAC secret. This regenerates identical fingerprints (since HMAC is deterministic), allowing you to rebuild the map.
Full Cryptographic Flow
// SENDER creates packages
file_bytes โ† read(file)
file_hash โ† SHA-256(file_bytes)

for each recipient:
  aes_key โ† random 256-bit key
  {iv, ciphertext} โ† AES-GCM-256(aes_key, file_bytes)
  fingerprint โ† HMAC-SHA256(secret, recipient.pubkey + file_hash)
  enc_aes_key โ† RSA-OAEP-4096(recipient.pubkey, aes_key)
  package โ† {fingerprint, enc_aes_key, iv, ciphertext, enc_note}
  send package โ†’ recipient

// RECIPIENT decrypts
aes_key โ† RSA-OAEP-4096.decrypt(recipient.privkey, enc_aes_key)
file_bytes โ† AES-GCM-256.decrypt(aes_key, iv, ciphertext)

// FORENSICS on leaked package
leaked_fp โ† leaked_package.fingerprint
for each recipient in attribution_map:
  if recipient.fingerprint == leaked_fp โ†’ LEAKER FOUND