Signatures that hold up. Documents that stay private.
Sigil signs PDFs with a key that never leaves its PKCS#11 token, encrypts every file before it is stored, and seals a receipt of who received and signed what, to the second.
Registration is by invitation.
- PAdES-B-T
- RFC 3161 timestamps
- PKCS#11 key custody
- ECDSA P-384
- ML-DSA-65
- AES-256-GCM
How it works
The life of a signed document
Follow one file from upload to receipt: what happens at every step, and what is recorded. Nothing is stored in the clear, and nothing happens without a trace.
-
Step 01
09:14:02 UTC
Step 01 · 09:14:02 UTC
Uploaded and encrypted
document.uploadedThe PDF is encrypted the moment it arrives. Storage never sees a readable byte.
- A fresh 256-bit key for this version, AES-256-GCM
- A keyed SHA-384 fingerprint pins exactly these bytes
- Only ciphertext is written to object storage
-
Step 02
09:14:02 UTC
Step 02 · 09:14:02 UTC
The key is locked away
Envelope encryptionThe file key is never stored as it is. It is wrapped inside your own key, and yours inside the root key.
- File key wrapped under your personal key (KEK)
- Your key wrapped by a root key held in a PKCS#11 token
- The database only ever holds wrapped keys
-
Step 03
09:20:45 UTC
Step 03 · 09:20:45 UTC
Signers are asked, in order
signing_request.createdYou choose who signs and in which order. Access is handed out one turn at a time, never up front.
- Every signer is checked for a verified account and a valid certificate
- Only the first signer is granted the key, by re-wrapping it rather than copying the file
- Everyone after them cannot open the document yet
-
Step 04
11:02:17 UTC
Step 04 · 11:02:17 UTC
Signed inside the token
document.signedThe signer reads the document, enters their PIN, and the signature is made inside their own token.
- The PIN opens the token for this one signature, then is discarded
- The private key signs the hash and never leaves the token
- An RFC 3161 authority timestamps it; the result is a new version with its own key
-
Step 05
11:02:18 UTC
Step 05 · 11:02:18 UTC
The turn passes on
signing_request.turn_advancedOnly now can the next signer decrypt the document, and only the version that was just signed.
- The next signer is granted the new version
- Anyone may decline instead, with or without a reason
- A missed deadline closes the request on its own
-
Step 06
15:47:09 UTC
Step 06 · 15:47:09 UTC
A sealed receipt
receipt.sealedWhen the request closes, Sigil seals a receipt of who received the document, who signed it and when.
- Sealed with Sigil's own electronic seal, as a PAdES PDF
- Every participant gets a copy they can check a file against
- Every step above sits in a hash-chained audit log
Root key · PKCS#11 token
Your key (KEK)
File key (DEK) · one per version
Your document
AES-256-GCM · 7c1e04b9a2…
Encryption
Three keys deep, so no single leak opens a file
Sigil uses envelope encryption. The database only ever holds keys that are themselves encrypted, and the key at the top never sits in the database at all.
-
A key for every version
Each upload and each signed version gets its own 256-bit key. Old versions are kept, each sealed separately, so the record is never overwritten.
-
Access is a re-wrap, not a copy
When someone is asked to sign, their key wraps the file key. The stored file is never decrypted or duplicated to hand it over.
-
Quantum-resistant at rest
Storage is purely symmetric AES-256. Signatures can already use ML-DSA-65, the post-quantum NIST standard.
Signing
A signature that stands on its own
Signed files open in Adobe Reader or any PAdES validator. No Sigil account is needed to check them.
Keys stay in the token
Your signing key is generated inside a PKCS#11 token and is never exported: not to disk, not to the application, not to us.
Your PIN is never kept
It opens the token for one signature and is discarded. Only a salted hash remains, to count wrong guesses.
Independent timestamps
An RFC 3161 time-stamping authority countersigns every signature, so the moment it was made can be proven later.
Key custody
Signing keys kept the way an HSM keeps them
Every private key lives in a PKCS#11 cryptographic token, the industry standard interface of hardware security modules. Keys are created inside their token and stay there for life. The application never holds a key; it can only ask the token to sign.
-
Born inside, never exported
Each key is generated in its token and flagged sensitive and non-extractable, so the token itself refuses to hand it out.
-
One token per person
Your signing key sits in a token of its own and is opened only with your PIN, for one signature at a time.
-
Guarded against guessing
Five wrong PINs within an hour lock signing. Your PIN is never stored, only a peppered Argon2id hash of it.
-
Separated by duty
The root key, the certificate authority and the receipt seal each have their own token, so no key can ever stand in for another.
Key vault · PKCS#11
All keys sealed-
non-extractable
Your signing key
ECDSA P-384 or ML-DSA-65 · opened by your PIN
-
non-extractable
Root key
AES-256 · wraps every personal encryption key
-
non-extractable
Certificate authority
Issues and revokes signing certificates
-
non-extractable
Receipt seal
Seals every delivery receipt
Ready to sign something that holds up?
Upload a PDF, sign it yourself, ask others to sign in order, or serve it on someone with a sealed receipt.
Create account Sign in