KeyNesta: a two factor authenticator that survives hundreds of codes

A two factor authenticator for people whose list of six digit codes outgrew their phone.

LiveTwo factor authenticator with encrypted backup and sync

Open keynesta.com
KeyNesta, captured from the live site at 1440 by 900

Our role

What BitsSolved did

  • Product and backend
  • Web app
  • Native iOS app
  • Native Android app
  • Encrypted sync
  • Product website, docs and policies

Why authenticator apps break at scale

Every authenticator app is designed for the person with five codes: a bank, an email account, one login for work. Scroll once and you are there. Open the same app as someone running a business, an agency, or a set of accounts on behalf of clients, and it is a flat alphabetical list of two hundred identical six digit numbers, with nothing to tell a client’s production console apart from a personal shopping account.

The second problem is the more serious one. Those codes are the last thing standing between an attacker and every account they protect, so any backup a provider can read is a single place from which all of them can be taken at once. A number of authenticators solve the convenience problem precisely by giving that up, and the user is rarely told which trade they just made.

KeyNesta had to solve both at the same time: organisation that still works at hundreds of entries, and a backup and sync that the company hosting it cannot decrypt.

Sector
Security and identity software
Platforms
Web, native iOS, native Android
Model
Encrypted on the device before sync
Scope
Product, platform apps and backend

What we built

  • Vaults, spaces and groups

    Three levels of organisation instead of one flat list, so codes can be arranged the way the accounts actually are: personal apart from work, each client apart from the next.

  • Encryption on the device

    Secrets are encrypted before they leave the device. What the sync service stores is ciphertext it has no key for, which means a breach of the service is not a breach of the codes.

  • Sync across three platforms

    The same vault on a laptop, an iPhone and an Android phone, with the phone still generating valid codes when there is no network at all.

  • One tap import

    Existing codes come across from Google Authenticator in a single import, rather than being re-enrolled one account at a time, which is the reason most people never move.

  • Multiple vaults

    Separate vaults for separate contexts, so a shared work vault does not have to sit in the same place as personal accounts.

  • A real website behind it

    Product pages, documentation and policies built to the same standard as the app, because a security product that looks unfinished does not get installed.

The decisions that shaped it

  1. 01

    Encrypt first, and accept what that costs

    Encrypting on the device before sync is the whole product, and it removes options that make a product easier to sell. There is no server side search across entries, no password reset that recovers a vault, and no support process that can read a user’s codes to help them. Every one of those is a feature request that will eventually arrive, and every one of them has to be answered no. Deciding that at the start is much cheaper than deciding it later.

  2. 02

    Three groupings, not one folder

    A single folder level solves the problem for about thirty entries and then fails again. Vaults separate contexts that should never mix, spaces separate areas of work, and groups do the ordinary tidying inside them. The structure was designed against the hardest case, somebody holding client credentials, rather than against the demo.

  3. 03

    Native on both phones, one backend

    An authenticator lives in the moments where a person is already irritated: mid login, one hand, thirty seconds on the clock. That is where a wrapped web app is noticeably worse, so both phone apps are native and share one Go backend. The advice is not always this, and on a content or forms product we say so, but here the interaction is the product.

How it is built

Web
Mobile
Backend
Security

How the engagement ran

  1. 01

    Discovery

    A working session on your product and its architecture, written up as scope, screens and a fixed quote for the first phase. Nothing is chargeable before that document exists.

  2. 02

    Build in the open

    Working software you can open while it is being built, instead of a status report, so the brief can change while changing it is still cheap.

  3. 03

    Launch

    Deployment with monitoring, backups, TLS and security headers, on infrastructure the client owns.

  4. 04

    Scale

    A maintenance window for fixes, monitoring and improvements, or a full handover to your own engineers with documentation. You can stop after any phase and keep everything built so far.

If security is the product, not a feature

Building software where a breach is the failure mode is a different engagement from building software where a bug is the failure mode. The decisions arrive earlier, there are fewer of them available, and most of them cannot be reversed after launch.

  • Decide the trust model first

    What your servers can read determines your support process, your recovery flow and your marketing. It is not an implementation detail to settle later.

  • Design against the hardest user

    The person with three hundred entries finds every weakness in the structure. The person with five finds none of them.

  • Plan the migration in

    A security product that cannot import from the one it replaces does not get adopted, however much better it is.

The services behind it:Mobile App DevelopmentCustom SaaS DevelopmentCloud and DevOps

Questions people ask before starting one of these

Yes. KeyNesta is the reference build: TOTP generation, on-device encryption, encrypted sync and native apps on both platforms. Work of that kind runs as mobile app development with SaaS product development where there is a web product alongside it.

Yes, and the important part of that answer is the conversation before the build. Encrypting on the device removes server side search, account recovery and any support path that reads user content. Those constraints have to be designed into the product and into the business, not discovered after launch.

It depends on what the app does. Camera, offline, animation heavy or platform integrated apps earn native, and KeyNesta is one of those. Content, forms and dashboards are usually dramatically cheaper as a Capacitor build over an existing web application, and we say so even when the honest answer is the smaller engagement. The mobile app development page sets out both.

You do. Apps publish under your own Apple and Google developer accounts. Leaving an agency should never cost you your listing, your reviews or your users.

Completely. It lives in your repository, runs on your infrastructure, and handover includes documentation.

Want something like this built?

The first call is free and is mostly us asking questions. After it you get the scope in writing and a fixed quote for the first phase.

What happens next

  1. You send the formTell us the problem.
  2. We reply by emailWith any questions.
  3. A free first callThen the scope in writing.
Based inTamil Nadu, India
First callFree, and mostly us asking questions