Security Model

Understanding how Pass It Around protects your secrets, and what its limitations are.

Encryption

All encryption and decryption happens in your browser using the Web Crypto API, which is built into every modern browser.

Property Details
Algorithm AES-256-GCM (authenticated encryption)
Key derivation PBKDF2 with 600,000 iterations (when a password is used)
Key size 256 bits
IV (nonce) Random 12 bytes per chunk
Chunked encryption Large files are encrypted in 1 MB chunks, each with its own IV

What the Server Knows vs. Does Not Know

Server knows Server does NOT know
An encrypted blob was stored What the secret says
The size of the encrypted data Whether it is text or a file (encrypted identically)
When the secret was created The encryption key
When the secret expires The password (only a hash of a hash is stored)
How many views remain File names or file types
Whether a password is set (yes/no) Who created or viewed the secret

How the Key Stays Private

The encryption key is placed in the URL fragment (the part after the # symbol). By design, browsers never send URL fragments to servers. When you share a link like:

https://example.com/#/s/abc123/secretKeyHere

The server only receives a request for /. The #/s/abc123/secretKeyHere part stays entirely in the browser. This is a fundamental property of how URLs work, enforced by all browsers.

Password Protection

When you set a password, Pass It Around uses double hashing:

  1. Your browser hashes the password using PBKDF2 (600,000 iterations) to derive an encryption key and a password hash.
  2. The password hash is sent to the server, which hashes it again (SHA-256) before storing it.
  3. To retrieve the secret, the recipient's browser performs the same PBKDF2 derivation and sends the hash to the server for verification.

This means even if the server's storage is compromised, the attacker gets a hash of a hash, which cannot be used to derive the encryption key.

Rate Limiting

The server enforces rate limiting on password attempts to prevent brute-force attacks. After several failed password attempts, further attempts are temporarily blocked.

Passkey Encryption for Stored Links

When you store secret links in local storage (via "My Items") or save notification URLs (via "Remember notification settings"), that data contains sensitive information. To protect against someone with physical access to your browser reading it, you can enable passkey encryption.

This uses the WebAuthn PRF extension to derive an AES-256-GCM key from your device's passkey (biometric, security key, or PIN). The derived key encrypts stored link fields and saved notification URLs in local storage. The key itself is held in JavaScript memory only and is cleared when you lock or close the tab.

See Tracking Your Items for setup instructions.

What Pass It Around Does NOT Protect Against

Important limitations to understand:

Compromised Browser or Device

If your device or browser is compromised (malware, keyloggers, malicious browser extensions), the attacker can see your secrets before they are encrypted or after they are decrypted. Pass It Around cannot protect against a compromised endpoint.

Compromised Server Serving Malicious JavaScript

Since the app's JavaScript runs in your browser, you are trusting the server to serve honest code. A compromised server could theoretically serve modified JavaScript that exfiltrates your secrets. This is a limitation of all web-based encryption tools. To mitigate this, you can self-host your own instance.

Link Interception

If someone intercepts the share link (which contains the decryption key), they can decrypt the secret. Using a password adds a second layer that the interceptor would not have. Always consider the security of the channel you use to share links.

Network-Level Metadata

While the secret content is encrypted, an observer can still see that you are using Pass It Around and roughly how much data you are exchanging. Use a VPN or Tor if this metadata is a concern.

Best Practices

Open the App