🛡️ Protocol v1.0 Updated: September 2026 20/20 Tests Passing

When All Your Devices Are Gone, How Do You Recover Your Identity?

ID Recovery Kit is an open-source, cold-start disaster-recovery protocol. It encapsulates your password manager emergency tokens, single-use 2SV backup codes, seed phrases, and live TOTP authenticators inside a self-contained, offline AES-GCM-256 encrypted terminal that you can unlock on any borrowed browser with nothing more than your memory.

~/identity-recovery — deploy.sh

$ ./scripts/deploy.sh payload.json --provider cloudflare

[1/7] Running pre-flight security checks...

✓ Valid JSON payload with required credentials.

[2/7] Enter 6-word Diceware passphrase: ******

✓ Sufficient Diceware entropy detected (~77.5 bits).

[3/7] Encrypting with PBKDF2-SHA256 (600,000 rounds) + AES-GCM-256...

✓ Zero Git Persistence: Staged in ephemeral staging directory.

[4/7] Synchronizing Cloudflare DNS TXT dead-drop (sos.yourdomain.com)...

✓ DNS TXT record published worldwide. Queryable via DoH anywhere.

🚀 Recovery terminal live worldwide at https://sos.yourdomain.com

Why Traditional Password Managers Fail in a Crisis

Modern password managers are fantastic, until physical disaster strikes. What happens when you are stranded with zero primary devices?

The Cold-Start Catch-22

You are traveling and your backpack with your phone, laptop, and hardware security key (YubiKey) is stolen.

You walk into a hotel business center or library. You know your master password, but your password manager requires an emergency secret key or token (which was on your laptop), and your primary email account requires a hardware key or 2SV prompt (which was on your phone).

Without your devices, you cannot log in. Without logging in, you cannot retrieve your devices.

  • 1
    Walk up to any browser Navigate to your recovery URL (or query the DNS dead-drop via DoH).
  • 2
    Enter your memorized Diceware passphrase (≥6 words) PBKDF2 derives the key locally in WebCrypto with 600,000 rounds (~80 bits entropy). No backend server ever sees your passphrase.
  • 3
    Restore access immediately Copy your password manager emergency credentials, generate live TOTP codes, and use 2SV backup codes to sign in.
Interactive Cryptography Tool

Test Diceware Passphrase Entropy

Type words separated by spaces to estimate security against offline brute-force attacks via PBKDF2 (600,000 rounds):

Word Count
8 words
Entropy Estimate
~103.4 bits
Offline Crack Time
> 100M Years
Security Rating
Extremely Strong

600,000 PBKDF2 Iterations

Key derivation exceeds OWASP recommendations by 300,000 rounds. Encrypted via AES-GCM-256 with 96-bit CSPRNG initialization vectors.

DNS Dead-Drop Fallback

If your web domain is blocked, censored, or unreachable, your ciphertext is queryable as a DNS TXT record via Cloudflare & Google DoH.

Learn how it works →

Modular Cards & BIP-39 Seeds

Store multiple password managers (1Password, Bitwarden, KeePassXC), BIP-39 12/24-word cryptocurrency cold storage seeds, and custom secrets.

Zero Runtime Dependencies

Strictly self-contained single-file HTML. No external npm libraries, zero third-party CDNs, and a strict Content Security Policy (CSP).

Multi-Provider Edge Hosting

Deploy with automated header parity across Cloudflare Pages, Netlify, and Vercel with no-store caching and clickjacking protection.

Live TOTP & QR Engine

Built-in WebCrypto HMAC-SHA1 engine generates 30-second live 2FA codes directly in browser, with offline QR code generation for mobile re-enrollment.

Panic Button & Auto-Scrub

Pressing Escape x3 instantly flushes all decrypted secrets from DOM memory. System clipboard auto-clears after 45 seconds.

Offline Air-Gap Portability

Save the HTML file to a USB thumbdrive or paper printout. Functions 100% offline without needing an active internet connection.

Secondary DNS TXT Dead-Drop

When web browsing is blocked, firewalled, or edge CDNs experience an outage, your recovery vault remains accessible worldwide over raw DNS (port 53 UDP) and DNS-over-HTTPS (DoH).

Tier 1 • Primary Web Edge

Web Terminal UI

https://sos.<yourdomain>.com

Full graphical recovery terminal hosted on Cloudflare Pages, Netlify, or Vercel. Features client-side WebCrypto decryption, live 30-second TOTP generation, single-use 2SV backup code strikethrough tracking, and panic auto-scrubbing.

Tier 2 • Out-of-Band Dead-Drop

RFC 1035 DNS TXT Record

recovery.<yourdomain>.com (TXT)

Completely decoupled from web servers and HTTP availability. Your encrypted ciphertext is stored directly in DNS Anycast nameservers worldwide. Queryable from any minimalist terminal using standard tools (dig, nslookup, or DoH JSON APIs).

Fetch and clean your encrypted ciphertext from any terminal without opening a web browser:

# Query secondary dead-drop via DNS UDP port 53:
dig +short TXT recovery.yourdomain.com | tr -d ' "\n'

Manual DNS Provider Configuration

If configuring manually in your DNS provider (Cloudflare, AWS Route 53, Namecheap, Porkbun, etc.):

Field Value Purpose & Operational Rationale
Type TXT Standard RFC 1035 text record; supported universally across all DNS providers.
Host / Name recovery Subdomain (e.g. recovery.yourdomain.com) matching your configured RECOVERY_DOMAIN.
TTL 120 (2 min) Low TTL guarantees rapid propagation across global recursive resolvers during vault rotation.
Value / Content "<base64-ciphertext>" Standard Base64 string produced by encrypt.js or the offline Web Builder.
⚡ 100% Automated Cloudflare Sync: You don't have to manually paste DNS records! When rotating via ./scripts/deploy.sh or the offline web builder, the Cloudflare DNS API v4 automatically synchronizes the TXT dead-drop with 120s TTL and handles all RFC 1035 255-byte chunk splitting automatically.

Deploy via Automated CLI

Automate encryption, verification tests, and zero-persistence direct edge deployment in seconds.

# 1. Clone repository
git clone https://github.com/janhrabcak/identity-recovery.git
cd identity-recovery

# 2. Copy sample payload and populate credentials
cp templates/sample-payload.json payload.json
chmod 600 payload.json
vim payload.json

# 3. Direct Edge Upload to Cloudflare Pages (Zero Git Secrets)
./scripts/deploy.sh payload.json --provider cloudflare --project identity-recovery

Prefer Not to Use the Terminal?

You can create, test, and download your encrypted single-file recovery vault completely inside your browser using our zero-dependency web generator.

🚀 Open In-Browser Vault Builder

Frequently Asked Questions

Everything you need to know about the cryptographic primitives, threat model, and zero-dependency guarantees.

Universal, native zero-dependency browser compatibility. The standard W3C Web Cryptography API (window.crypto.subtle) natively implements PBKDF2 across 100% of modern browsers without requiring external WebAssembly (WASM) binaries or JavaScript polyfills. Argon2 is not part of native WebCrypto, which would require downloading an external 1–2MB WASM binary or third-party bundle.

By setting PBKDF2 to 600,000 rounds (exceeding OWASP's 2023 recommendation of 310,000 by nearly 2x), the terminal achieves rock-solid brute-force resistance while remaining a strictly self-contained single file that can execute completely air-gapped on any browser.

No. It is mathematically impossible. The vault is encrypted entirely on your local machine using AES-GCM-256 with a 96-bit CSPRNG initialization vector before any data is sent over the network. Hosting providers and DNS nameservers only store and serve opaque, authenticated ciphertext.

Key derivation and decryption execute strictly inside the volatile memory of your browser tab. Strict Content Security Policy (CSP) headers (default-src 'none') forbid outbound network requests during and after decryption.

True zero-knowledge cryptography has no backdoors. There are no server resets, emergency bypasses, SMS recovery, or administrative overrides. If your memorized passphrase is lost, the vault cannot be decrypted.

We recommend choosing a 6- to 8-word passphrase generated via high-entropy Diceware words and practicing memorization using spaced repetition before traveling.

If your primary web domain is unreachable or blocked by a local captive network, your recovery ciphertext is queryable as RFC 1035 TXT records from Anycast DNS servers worldwide. You can fetch your ciphertext using standard UDP port 53 (dig +short TXT recovery.yourdomain.com), via HTTPS over Cloudflare/Google DoH JSON resolvers, or by appending ?dns=recovery.yourdomain.com to any offline copy of the recovery HTML.

When operating on an untrusted or hotel business center computer, pressing Escape 3 times in rapid succession instantly triggers the emergency panic routine. This overwrites decrypted variables in memory, scrubs clipboard history with blank whitespace, and reloads the locked terminal state.

Additionally, an automatic 45-second clipboard scrub timer and visibilitychange / pagehide listeners ensure that sensitive tokens are purged even if you switch tabs or close the browser window.