Technical Documentation

Security Whitepaper

A complete technical overview of how Inventry protects your data using zero-knowledge, end-to-end encryption.

Last updated: December 2024 · v1.0

What Inventry Cannot See

Due to our zero-knowledge encryption, we have no access to:

  • Your serial numbers
  • Your VINs
  • What you own
  • How many items you have
  • Your photos
  • Your purchase history
  • Your notes or descriptions
  • Asset values or locations

This is by design. Even if compelled by law enforcement, we cannot produce data we don't have. Your encrypted data is indecipherable without your key—which only exists on your device.

1Overview

Inventry is built on a zero-knowledge security model. This means:

  • Your asset data is encrypted on your device before it ever leaves your phone.
  • Inventry's servers never see your unencrypted data.
  • Even if our database is breached, attackers get indecipherable ciphertext.
  • We cannot comply with data requests for your asset details—we don't have them.

The tradeoff: if you lose your password and recovery key, your data is unrecoverable. There is no "forgot password" backdoor.

2Zero-Knowledge Architecture

Your Device
Encryption happens here
AES-256 encrypted
Inventry Servers
Sees only ciphertext

The encryption key never leaves your device. Our servers store only the encrypted blobs. Without your key, the data is meaningless noise.

3Encryption Specification

Algorithm:      AES-256 (Advanced Encryption Standard)
Mode:           CBC (Cipher Block Chaining)
Padding:        PKCS7
Key Size:       256 bits
IV:             128-bit random IV per encryption operation
Library:        crypto-js (JavaScript, runs on-device)

AES-256 is the gold standard for symmetric encryption. It's the same algorithm used by:

    US Government
    Top Secret data
    Signal
    Messaging
    1Password
    Password vaults
    ProtonMail
    Email

4Key Derivation

Your encryption key is derived from your password using PBKDF2 (Password-Based Key Derivation Function 2). This process makes brute-force attacks computationally infeasible.

Function:       PBKDF2
Hash:           SHA-256
Iterations:     100,000
Salt:           256-bit random (unique per user)
Output:         256-bit encryption key

⚠️ Why 100,000 iterations?

Each iteration adds computational cost. At 100,000 iterations, a brute-force attack testing 1 billion passwords/second would take ~3,170 years to crack a moderately complex password.

5Vault Sharing

Sharing a vault with a family member without compromising security is complex. Here's how we do it:

1

Vault Key Generation

When you create a Vault, the app generates a random 256-bit Vault Key (VK). This key encrypts all assets in that vault.

2

Owner's Copy

The VK is encrypted with your Master Key (derived from your password) and stored on our servers. Only you can decrypt it.

3

Sharing

When you share with your spouse, their app generates a Public/Private key pair. Your app fetches their Public Key, encrypts the VK with it, and uploads the result.

4

Recipient Access

Your spouse downloads the encrypted VK and decrypts it with their Private Key. Now they have the VK and can decrypt the vault contents.

// Vault Sharing Flow (Pseudocode)
VaultKey = random(256 bits)
EncryptedVK_Owner = AES(VaultKey, OwnerMasterKey)
EncryptedVK_Spouse = RSA(VaultKey, SpousePublicKey)

// Spouse decrypts:
VaultKey = RSA_Decrypt(EncryptedVK_Spouse, SpousePrivateKey)
AssetData = AES_Decrypt(EncryptedAsset, VaultKey)

6Data Storage

What's Encrypted

  • • Asset titles & descriptions
  • • Serial numbers & VINs
  • • Purchase prices & dates
  • • Notes & custom fields
  • • Photo metadata

What's NOT Encrypted

  • • Your email address
  • • Subscription status
  • • Category labels (for filtering)
  • • Timestamps (for sync)

Photos are stored as encrypted blobs. The actual images are encrypted before upload using the same Vault Key as the asset metadata.

7Password & Recovery

✓ Change Password (Logged In)

If you're logged in and want a new password, you can change it. The app will:

  1. Verify your current password
  2. Decrypt all your data with the old key
  3. Re-encrypt everything with the new key
  4. Update your password securely

✓ Forgot Password

If you forgot your password, you can reset it via email. Here's how it works:

  1. Request password reset via email
  2. Click the secure link in your email
  3. Set a new password
  4. Your encryption key is re-derived using your stored salt

Your encryption salt is securely stored on our servers, enabling password reset while keeping your data encrypted.

Recovery Kit (Estate Planning)

For estate planning purposes, you can generate a Recovery Kit—a printable document containing your encryption salt. Store it in a safe, safe deposit box, or with your estate documents.

Recovery Kit includes:
Your Account ID and Encryption Salt

With the Recovery Kit + your password, a family member can restore your vault on a new device if something happens to you.

8Libraries & Audit

We use industry-standard, well-audited libraries. We do not implement our own cryptographic primitives.

LibraryPurposeVersion
crypto-jsAES encryption, PBKDF2, SHA-2564.2.0
expo-cryptoSecure random number generation14.0.x
expo-secure-storeiOS Keychain / Android Keystore14.0.x

9Transparency

Warrant Canary

As of January 1, 2026, Inventry has:

  • ✓ Received 0 National Security Letters
  • ✓ Received 0 FISA court orders
  • ✓ Received 0 gag orders preventing disclosure
  • ✓ Received 0 government requests for user data
  • ✓ Never placed any backdoors in our software
  • ✓ Never provided user encryption keys to anyone

This canary is updated monthly. If this section disappears or is not updated, assume we have been legally compelled to remain silent.

Our Commitment

  • 1No data sales. We will never sell, share, or monetize your data. Our business model is subscriptions, not advertising.
  • 2No analytics on asset content. We don't know what you own, what categories you use most, or anything about your collection.
  • 3Open to audit. We welcome security researchers to test our implementation. Contact [email protected] for our bug bounty program.