Last reviewed: July 2026

How We Protect
Your Documents

IDVault is built with security as the foundation, not an afterthought. Every document you store, every link you share, and every login you make is protected by industry-standard cryptography and strict access controls.

🗝️
Zero-Knowledge Encryption
We cannot open your files
🛡️
TOTP Two-Factor Auth
RFC 6238 standard
🔒
HTTPS / TLS
All traffic, always
📋
Full Audit Trail
Every action logged
🗝️Zero-Knowledge Encryption
🗝️
We cannot open your documents — not a policy, a mathematical fact
libsodium / X25519Argon2id key derivationXSalsa20-Poly1305 secretboxper-document keys

Before a document ever leaves your device, it's encrypted in your browser using a key derived from your password — the server only ever receives and stores ciphertext. Every document gets its own random encryption key, which is itself wrapped by your vault's key, which is wrapped by a key only your password can unlock. Your password is never sent to us in a form we could use to decrypt anything; it's run through Argon2id, a deliberately slow key-derivation function, entirely inside your browser.

In plain English This holds even against a compromised server, a leaked cloud credential, a coerced employee, or a legal order — none of them can produce a readable document, because there is no key on our side capable of opening one. Only you can.
📝
Your 24-Word Recovery Phrase
shown oncenever storedyour only backup

Because your password is the key, a normal "forgot password" reset can't work the way it does on other sites — resetting the password without your original one would permanently lock your own documents. Instead, at setup you're shown a 24-word recovery phrase once. It's a second, independent way to unlock the same key, and it's the only way back in if you forget your password. We never see it, and we cannot show it to you again — if it's lost along with your password, recovery requires manual verification with our support team.

In plain English Your password and your recovery phrase both open the same lock. Write the phrase down and keep it somewhere safe — it's the one thing we can never hand back to you.
🔗
Sharing Without Exposing the Key
URL fragmentnever sent to serverper-share key

When you generate a share link, the decryption key is appended to the URL after a # — a part of the address browsers never transmit to any server. The link itself, stored in our database, is useless without that fragment. Whoever holds the full link holds the key; we only ever hold the token.

In plain English The link you copy and the link that gets logged on our servers aren't the same thing — the part that actually unlocks the document never touches us at all.
What's still visible to us:your email address, your name, a document's category and type (e.g. "Passport"), and its expiry date — kept readable so features like search and expiry reminders can work. The document itself, its filename, and any notes you attach are what's encrypted and unreadable to us.
🔑Account Protection
🔐
Password Hashing
bcryptcost factor 12salt per user

Your password is never stored. When you create or change a password, IDVault runs it through bcryptwith a cost factor of 12. bcrypt deliberately takes ~250 ms to compute a single hash and generates a unique random salt for each user. An attacker who obtained a copy of the database would still need to compute billions of hashes — taking centuries — to recover your password.

In plain English Your password is turned into a scrambled fingerprint that cannot be reversed. Even the IDVault team cannot see your password — ever.
🎟️
Session Tokens
JWT HS2567-day expiryserver-verified

After you log in, IDVault issues a JSON Web Token (JWT) signed with HMAC-SHA256. The token encodes your user ID and an expiration timestamp, and is cryptographically signed with a secret key only the server knows. Every API request presents this token; the server verifies its signature and expiry before responding to anything.

In plain English Think of it like a secure ID badge. It's stamped with a hidden seal — if anyone tries to fake or modify it, the server instantly rejects it.
📲Two-Factor Authentication
📲
Time-Based One-Time Passwords (TOTP)
RFC 6238HMAC-SHA130-second window8 backup codes (SHA-256)

IDVault supports TOTP two-factor authentication, compatible with Google Authenticator, Authy, 1Password, and any RFC 6238-compliant app. After enabling 2FA, every login requires your password plus a 6-digit code generated by your device. The code changes every 30 seconds using HMAC-SHA1 keyed to a secret shared at setup time. IDVault also generates 8 one-time backup codes (each hashed with SHA-256 in the database) for account recovery if you lose your device.

In plain English Even if someone steals your password, they still can't log in without your phone. The 6-digit code expires every 30 seconds — so stolen codes are instantly useless.
🔒Data Encryption
☁️
Encryption at Rest
client-side XSalsa20-Poly1305per-document keysAWS S3 + AES-256 SSE

Your files are encrypted in your browser — with a key derived from your password — before they're ever uploaded. What reaches Amazon S3 is already unreadable ciphertext; S3's own Server-Side Encryption (SSE-S3) then wraps it a second time as an additional layer of defense-in-depth. The important part isn't where the file is stored — it's that the storage layer never has a key capable of opening it.

In plain English Your files are locked before they leave your device, using a key only you have. Amazon's own encryption is a second lock on top — but even Amazon can't open the first one.
🌐
Encryption in Transit
TLS 1.2 / 1.3HTTPS-onlyHSTS

All communication between your browser and IDVault servers uses Transport Layer Security (TLS) — the same standard used by online banking. HTTP connections are rejected or redirected to HTTPS. The Content-Security-Policy header and strict CORS configuration prevent your credentials or documents from being intercepted by third-party scripts.

In plain English Everything you send to IDVault — logins, uploads, documents — travels through an encrypted tunnel. No one in the middle can read it, even on public Wi-Fi.
🧬File Integrity & Safety
🔍
Magic Byte Validation
file-type detectionheader inspectionruns in your browser

Every uploaded file is inspected at the binary level before it's accepted — in your browser, before encryption. IDVault reads the first bytes of the file — known as magic bytes — to confirm the file is actually what it claims to be. A renamed .exe disguised as a PDF is detected and rejected immediately, regardless of what the filename says. Because the server only ever receives ciphertext, this check has to happen on your device — it's the only place the real file bytes ever exist outside your own hands.

In plain English The scanner looks inside every file — not just the name — right on your own device, before it's locked and sent. A dangerous file disguised as a document never even leaves your browser.
🧹
PDF Sanitization
pdf-libOpenAction stripJavaScript removalruns in your browser

PDFs can embed executable JavaScript, automatic actions (OpenAction), and event handlers (AA) that execute code when a file is opened. Before your PDF is encrypted, IDVault parses it — client-side, on your device — and removes all of these active-content entries from the PDF catalog and Names dictionary. The sanitized file is then re-serialized with a clean object stream and only that version is ever encrypted and uploaded.

In plain English PDFs can contain hidden scripts that run when you open them. IDVault strips all of those out on your own device, before the file is even locked — so what gets stored is already a clean, safe document.
🔗Secure Document Sharing
🎲
Cryptographic Share Tokens
crypto.randomBytes256-bit entropyhex-encoded

Share link tokens are generated using Node's crypto.randomBytes(32), producing 256 bits of cryptographically secure randomness. This makes tokens computationally impossible to guess or enumerate. Each token maps to exactly one document and one owner in the database.

In plain English Every share link has a unique, random secret built into it. Guessing the link by trying possibilities would take longer than the age of the universe.
⏱️
Expiring & One-Time Links
configurable TTLone-time burninstant revocation

Every share link carries a server-enforced expiry timestamp. After the deadline, the link returns HTTP 410 Gone — the document is no longer accessible. One-time links are burned on first access: the usedAt field is set atomically, preventing replay access. Links can also be revoked at any time before expiry.

In plain English You decide when a shared link stops working — in 15 minutes, 24 hours, or a week. One-time links go dark the moment they're opened. You can also kill any link instantly.
💧
PDF Watermarking
diagonal overlayunique per-link referenceapplied after decryption

When a shared document is opened, IDVault can apply diagonal watermarks across every page of the PDF, along with a short reference code unique to that share link. Because the server only ever holds ciphertext, watermarking now happens in the recipient's browser — right after their key decrypts the file, and before it's rendered — so the server never needs, or gets, a readable copy just to stamp it. Downloads can still be blocked entirely for sensitive documents.

In plain English Shared documents can carry a visible watermark and a short reference code on every page — the code matches the specific share link in your dashboard, so if a document ever leaks, you can identify which link it came from. It doesn't reveal who the recipient is, only which link you sent. You can also block downloads entirely — the recipient can only view it.
🏗️Platform & Infrastructure Hardening
📋
Full Audit Logging
immutable logtimestampedper-action

Every sensitive action — document upload, deletion, share creation, password change, 2FA enable/disable, billing update, account export — is recorded in an immutable audit log with a UTC timestamp and full metadata. This trail is used for internal security monitoring and, if requested, can be included in your data export for your own records.

In plain English IDVault keeps a detailed record of everything important that happens on your account — like a security camera that never stops recording. You can request this log at any time.
🛡️
Security Headers
Helmet.jsCSPX-Frame-Options: DENYPermissions-Policy

Every HTTP response from IDVault includes a hardened set of security headers enforced by Helmet.js and Next.js configuration: a Content-Security-Policy that blocks unauthorized scripts and iframes; X-Frame-Options: DENY to prevent clickjacking; X-Content-Type-Options: nosniff; and a Permissions-Policy that restricts microphone and geolocation access to none.

In plain English Every page IDVault serves includes invisible instructions that tell your browser: block untrusted scripts, block pop-under frames, and never let third parties access your microphone or location.
Rate Limiting & Abuse Prevention
200 req/min globalper-route limitsIP-based

A global rate limiter caps all API traffic at 200 requests per minute per IP address. Authentication endpoints, upload routes, and other sensitive paths carry stricter per-route limits. Requests that exceed the limit receive HTTP 429 and must wait. This prevents brute-force login attacks, credential stuffing, and automated scraping.

In plain English IDVault watches for bots trying to guess passwords or flood the system. If too many requests come in too fast from the same place, they're automatically blocked.
🌍
CORS & Origin Control
allowlist-basedcredentials: trueno wildcard

IDVault's API uses a strict CORS allowlist — only requests originating from the official myidvault.io domain are accepted. No wildcard (*) origins are permitted. This prevents malicious websites from silently making authenticated requests to the API on behalf of logged-in users (cross-site request forgery via CORS).

In plain English Only the real IDVault website can talk to the IDVault server. A fake or malicious website trying to access your account is automatically blocked.
⚖️Your Rights & Data Control
📦
Data Portability Export
JSON formatGDPR-alignedon-demand

You can export a complete copy of everything IDVault stores about you at any time from the Settings page. The export is a structured JSON file that includes your profile information, account metadata, share link history, and a complete activity log. Document files are stored separately in encrypted cloud storage and are noted in the export with their metadata.

In plain English You own your data. You can download a full copy of everything we know about you — your profile, your history, your activity — at any time, with one click.
✉️
Email Verification & Change Flow
crypto.randomBytes(32)24-hour tokenconfirmed before apply

Account registration requires email verification via a cryptographically random 256-bit token sent to your address, valid for 24 hours. Email address changes follow the same pattern — a confirmation link is sent to both the old and new address, and the change is only applied after the new address is confirmed. This prevents account takeover via email-change attacks.

In plain English Before you can upload anything, your email is confirmed. If someone tries to change your email, they'd need access to both your old and new inbox first.
🔍Independent Audits

IDVault has not yet undergone a formal third-party security audit or SOC 2 certification. As a self-funded, early-stage product, an independent audit is a planned investment as revenue grows — not something being skipped indefinitely. In the meantime, every claim on this page is verifiable in the actual code running in production, and vulnerability reports through the process below are taken just as seriously as they would be at an already-audited company.

In plain English We haven't paid for an outside firm to audit IDVault yet — that costs real money we're reinvesting into the product first. We'd rather tell you that directly than stay quiet about it.
🔎Responsible Disclosure

If you discover a security vulnerability in IDVault, please report it responsibly. Do not publicly disclose the vulnerability until we have had a reasonable opportunity to investigate and respond. We take all reports seriously and will work to resolve confirmed issues as quickly as possible.

📧 support@myidvault.io
MYIDVAULT LLC
418 Broadway STE N
Albany, NY 12207
United States
support@myidvault.io
HTTPSZero-KnowledgeTOTP 2FAAudit Log
← Back to Home