E2E encryption

Your IBAN. Your phone. Your control.

Payment details in Olik Split are encrypted on your device with a key that never leaves your hardware keystore, sent to our server already encrypted, then encrypted again with a separate server key. We literally can't read them. And neither can anyone else.

Why most apps shouldn't have your IBAN

Three uncomfortable truths about how payment data usually gets stored

"Encrypted at rest" isn't enough

Most apps mean: encrypted with a server-side key the company holds. If their database leaks, your IBAN goes with it. If a rogue engineer queries it, they can read every entry.

Group payment lists are sensitive

"How do I pay you back?" is friendly. "Here's a list of every payment method 12 friends have used in 2026" is a target for phishing. The list shouldn't live anywhere readable.

You should never have to "trust us"

Trust is a single point of failure. The better answer: make it technically impossible to read the data, even with full database access. That's what we built.

Double encryption, two different keys

Step 1: on your device, we generate a random 256-bit AES-GCM key and store it in your phone's hardware-backed keystore (Android Keystore / iOS Keychain — backed by the Secure Enclave when present). This key never leaves your phone. We use it to encrypt your payment details before they even touch the network. Step 2: the server receives an already-encrypted blob, and encrypts it a second time with its own server-side key. Two layers, two separate keys, neither knows the other.

Private vs public methods

Mark a payment method private and it's double-encrypted as above — only your own device sees it. Mark it public (e.g. the PayPal you share with your roommate group) and it's encrypted server-side only, with access scoped to specific group members. You decide which.

10 services, one wallet

PayPal, Revolut, Venmo, Cash App, Wise, Monobank, PrivatBank, raw IBAN, raw card number, raw phone — pick what you actually use. Add a label (e.g. "EU IBAN" vs "UK IBAN"), set it as default for a currency, and group members can copy or open the deep-link with one tap when settling up.

How it stacks up

Olik Split Splitwise Tricount
Hardware-backed key on device Yes
Double encryption in transit + at rest Yes
Server can decrypt your data No (private) Yes Yes
Group-scoped sharing Per-method choice

You share rent with three flatmates. You want them to have your IBAN so they can pay you on time every month — but you don't want it sitting in a third-party database that might leak in 2027. So you add it as a public payment method scoped to your roommates group. They see it inside Olik, they can copy it, they can't share it outside. The server stores it encrypted; we couldn't show it to anyone else even with a warrant for that row.

Then you add your private backup card details — separate, encrypted with the device key only you have. You can see it; the server stores it as opaque bytes. If the database is dumped tomorrow, that field is unreadable noise.

AES-GCM-256 device-side encryption
2 independent key layers
0 readable bytes leak in a breach

Common questions

What happens if I lose my phone?

Private (device-encrypted) methods are bound to your phone's hardware key. If the phone is lost and you log in on a new device, those entries show as encrypted blobs and need to be re-entered. Public methods (group-shared) re-sync normally. This is by design — losing the phone means losing the key.

Does the server know my IBAN?

For private methods: no. The server only sees ciphertext encrypted with a key it doesn't have, then encrypts the ciphertext again with its own key. There is no path to decrypt without your device. For public methods: the server can decrypt to deliver to group members, but the value is still encrypted in storage with the server key.

Is the encryption auditable?

Yes. Android encryption code lives in shared/src/androidMain/.../security/AndroidPaymentEncryption.kt, iOS in the equivalent Swift wrapper. Both use platform AES-GCM with hardware-backed key material. We'll publish a security review when we cross 100k installs.

Why double encryption instead of just one strong layer?

Defense in depth. If a future cryptographic flaw breaks the server-side layer, the device-side layer still protects private entries. If the device-side layer's key material leaks (e.g. via a kernel exploit), the server-side layer still protects against unauthorized DB access. The two failures are independent.

Your money. Your keys.

Free, encrypted, no trust required.