Security model

Exactly what Aevumex encrypts, how the keys work, which data our server does see, what we cannot do and where the zero-knowledge promise ends. Written to be checked, not to persuade.

Last updated: 19 September 2026 · applies to app version 0.1.4 and later

This document describes honestly what the app does with your data. It is for people who do not want to take "zero-knowledge" on trust. Wherever something is a limit or an open point, it says so.

In one paragraph

Your vault (every coin, bar, purchase price, receipt and note) is encrypted on your device with a key that exists only on your device and is derived from your recovery phrase. Our server stores nothing but encrypted blobs and cannot read them. What the server does see in plain text: your e-mail address, the number of vault items, your price alerts, and everything you post on the marketplace or write in a chat. There is no tracking, no ad network and no crash reporting. There is also, as yet, no independent audit.

What is encrypted

  • Every vault item as one blob: metal, weight and fineness, quantity, purchase price, date and time, notes, serial numbers, storage location, sale details and the list of receipts. Of an item the server sees only the encrypted blob, a version number and timestamps.
  • Receipts (photos) are stored as separately encrypted files, locally and, when you are signed in, in private storage on the server. Never as a readable photo.
  • The local cache on your device (prices, preferences, the last loaded vault) lives in an encrypted database whose key sits in the operating system's keychain.

How the keys work

  1. When you create your vault the app generates a 12-word recovery phrase (BIP39, 128 bits of randomness). The phrase is stored nowhere; only you have it.
  2. From the phrase a seed is computed per the BIP39 standard (PBKDF2), and from that, with HKDF-SHA256, the 256-bit master key. The same phrase always yields the same key, so the phrase alone restores everything on a new device.
  3. The master key sits on your device in the iOS Keychain or Android Keystore, marked "this device only" (it is not included in backups) and, if you enable biometrics, released only after Face ID, Touch ID or a fingerprint. On Android only the strongest biometric class counts; weaker face unlock is refused rather than silently downgraded.
  4. Your PIN (6 to 8 digits) only unlocks the app. It is hashed with Argon2id and is not part of the encryption: whoever breaks into the server gains nothing from the PIN, and whoever guesses the PIN still does not have the key.
  5. Each item is encrypted with AES-256-GCM, with a unique nonce and with the item id and your account id as additional authenticated data. A blob from one account cannot be placed under another account or item without decryption failing.
  6. The key never leaves your device. The app has no function to send it to us, and the server has no table to keep it in.

What the server does see

Zero-knowledge applies to the vault. Other features only work if the server knows something. This is the complete list.

DataVisible to usWhy
E-mail address, sign-in times, whether you sign in with Apple or GoogleYesAccount and sign-in
Number of vault items, when they were created or changed, size of each encrypted blobYes (metadata only)Sync and the five-item limit of the free version
Contents of vault items and receiptsNoEncrypted on the device
Price alerts: metal, threshold price, directionYes, in plain textThe server checks every minute whether a threshold was hit and sends the push. A portfolio alert (say "warn me at €10,000") is converted on your device into one threshold price; the server sees that price and the metal, not your holdings
Marketplace: listings, offers, chat messages, reviews, reports, blocks, saved searchesYes, in plain textDeliberately: reporting and blocking, moderation and app-store obligations do not work on encrypted content. Never put anything in a listing or chat that you would not want to tell us
Your device's push token and the app languageYesSending notifications in your language
Subscription status (Pro or not), Apple or Google transaction idYes, via RevenueCatUnlocking Pro features. We see no payment details
Title of a listing for which you request an AI illustrationYes, forwarded to Google GeminiMarketplace only; vault items never get a server-generated image
Usage statistics, device identifiers, crash reports, advertising idsNoThe app contains no analytics, advertising or crash-reporting SDK

Prices, history and news are fetched from the same public tables this website uses; those requests carry no data about your holdings.

What we cannot do

  • Read your vault, not even at your request, an heir's or an authority's. We can only hand over encrypted blobs.
  • Recover your recovery phrase or reset your PIN. Losing the phrase and the device means losing the vault. That is why the app asks you to write the phrase down before anything is in the vault.
  • Restore an item you deleted after the deletion has synced.

Where the promise ends

These are the limits you need to know to weigh the promise.

  • You trust the app code. The app decrypts your vault on your device, so code we ship could abuse that too. This is true of every app with on-device encryption. What we do about it: your vault is only ever decrypted on your own device and the key never leaves it, so even a malicious update could not fetch anything from our servers. What is missing: signed over-the-air updates, and reproducible builds so you could verify yourself that the binary matches the source. The latter is not practically achievable on iOS. On iOS that is not practically achievable.
  • Metadata reveals something. From the item count and price-alert thresholds someone with database access could infer that you own precious metals and roughly which metal weighs most. Not how much, not which coins.
  • Your device is the boundary. An unlocked device in the wrong hands, a screen recording, malware on a jailbroken or rooted device, or someone reading your recovery phrase over your shoulder: encryption does not protect against those. The app locks automatically after the time you choose and hides amounts on request.
  • No independent audit. The key logic is isolated and fully tested, but not yet reviewed by an external party. We therefore never call the app "audited" or "verified". Once that happens, the report will be on this page.
  • Standard building blocks, no home-made crypto. AES-GCM, HKDF, Argon2 and BIP39 come from the noble and scure libraries, which have been audited themselves. We invented no algorithms.

Server and infrastructure

The backend runs on Supabase (PostgreSQL, region EU-West, Ireland) with row-level security: every table has rules enforcing that an account can only read and write its own rows, and limits such as "five items free" are enforced in the database, not just in the app. Prices come from metals.dev; that API key lives only on the server. This website reads prices with a public, read-only key and sets no cookies.

Reporting a vulnerability

Found something above that is wrong, or a leak? E-mail support@aevumex.com (also listed in security.txt). We acknowledge within five working days, keep you informed and take no legal action against anyone who reports in good faith, does not access other people's data and gives us time to fix. There is no bounty programme yet.

Changes to this document

  • 19 September 2026: first version. security.txt published.
  • 21 September 2026: the claim about signed over-the-air updates has been withdrawn. The measure was configured but never became active in a shipped app: no update was ever signed and no installed version verifies signatures. What was written here was not true and has been removed.