inmystash.
Whitepaper

In My Stash Security Architecture

How In My Stash connects to banks read-only, encrypts everything, and is designed so that no party — including us — holds more of your financial data than strictly necessary.

DocumentSecurity WhitepaperVersion1.0
Published2026-07-15Next review2027-07-15 (at least annually)
OwnerFounder / Security LeadContactsecurity@inmystash.com

1. Design philosophy

In My Stash answers one question — "stash it, or spend it?" — from your real bank balance. To do that it needs to read your balances and transactions. Everything in the design flows from three principles:

2. Components

ComponentWhat it isWhat it holds
In My Stash appA single-file web/mobile app running on the user's deviceAll budget data — encrypted on-device when the app lock is enabled
RelayA stateless Cloudflare Worker + KV storeOnly an encrypted, read-only bank access token + minimal metadata — never transactions or balances
AggregatorsPlaid and SimpleFINRead-only access to the user's bank, established via the bank's own login

3. Connection flows

In My Stash supports two read-only aggregators. In both, the user authenticates directly with their bank — In My Stash never receives bank credentials — and the result is a read-only access credential held encrypted by the relay.

3.1 Plaid

  1. The relay requests a Plaid link_token using server-side Plaid credentials.
  2. The user completes Plaid Link — logging into their bank (with the bank's own MFA) inside Plaid's interface.
  3. Plaid returns a short-lived public_token; the relay exchanges it for a long-lived read-only access_token.
  4. The access token is encrypted and stored; balances/transactions are fetched on demand and returned to the device.

3.2 SimpleFIN

  1. The user connects their bank at the SimpleFIN Bridge and obtains a one-time setup token.
  2. The relay claims the setup token for a read-only access URL.
  3. The access URL is encrypted and stored; balances/transactions are fetched on demand and returned to the device.

SimpleFIN is read-only by architecture — it can report data but cannot move money. Plaid access is scoped to read-only products only (Transactions and Balance).

4. Encryption & key model

4.1 In transit

All communication uses TLS 1.2 or better — between the app and the relay, the relay and the aggregators, and the app and its encrypted backup destination.

4.2 At rest — the relay

Every record stored in the relay's KV is encrypted with AES-256-GCM under a master key held only as a platform secret. There is no plaintext at rest — not institution names, not masked account numbers.

The bank access credential carries an additional envelope:

LayerKeyEffect
InnerDevice vault key (on the user's device)The relay cannot decrypt the token without the user present
OuterRelay master key (platform secret)A store compromise alone yields nothing usable

Because the inner layer requires the device's key, the relay is on-demand: it can read a user's finances only while that user is actively using the app, and never unattended.

4.3 At rest — the device

Financial data lives on the user's device. With the app lock enabled, the on-device store is encrypted with AES-GCM. Optional encrypted backup is end-to-end encrypted before it leaves the device; In My Stash cannot read it and does not hold the key.

5. Data minimization & retention

6. Access control & operations

7. Compliance posture

Detailed internal policies are summarized on the Security Policies page and available to partners and auditors on request.

8. Incident response

On suspected compromise we (1) rotate affected secrets, (2) revoke affected tokens/connections, (3) assess scope from logs, (4) notify affected users where their data may be affected, and (5) meet applicable breach-notification duties. By design, a relay compromise exposes no financial data and no usable token.


Contact security@inmystash.com for security questions, partner due-diligence, or vulnerability reports.