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
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
| Data | Visible to us | Why |
|---|---|---|
| E-mail address, sign-in times, whether you sign in with Apple or Google | Yes | Account and sign-in |
| Number of vault items, when they were created or changed, size of each encrypted blob | Yes (metadata only) | Sync and the five-item limit of the free version |
| Contents of vault items and receipts | No | Encrypted on the device |
| Price alerts: metal, threshold price, direction | Yes, in plain text | The 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 searches | Yes, in plain text | Deliberately: 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 language | Yes | Sending notifications in your language |
| Subscription status (Pro or not), Apple or Google transaction id | Yes, via RevenueCat | Unlocking Pro features. We see no payment details |
| Title of a listing for which you request an AI illustration | Yes, forwarded to Google Gemini | Marketplace only; vault items never get a server-generated image |
| Usage statistics, device identifiers, crash reports, advertising ids | No | The 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.