Glossary

What is device binding

Device binding ties an account or session to one app installation via a key that stays on the device: what it proves, how it is verified and its lifecycle.

Device binding links an account, a session or a credential to one specific app installation on one device, so that the same credential presented from anywhere else is refused. The app creates a private key that cannot leave the device, registers the matching public key with your server, and signs later requests with it. Binding proves that a request comes from the installation that enrolled. It does not prove who is holding the phone, so it sits alongside user authentication and never replaces it. On Android and iOS the key lives in different platform stores with different lifecycle rules.

What a binding proves

A valid signature shows possession of a key that was created on that installation and has not been exported. That gives your server continuity: this request comes from the same place as the enrolment.

It does not show that the person is the account holder, that the device is free of malware, or that the app calling is your unmodified release. Those questions belong to authentication, to runtime checks and to app attestation.

Android

The app generates the key in Android Keystore. On devices with a trusted execution environment or a StrongBox security chip the key is hardware-backed, and key attestation lets your server check that. A key can require the user’s biometric or screen lock before each use.

iOS

The app generates the key in the Secure Enclave using Apple’s Security framework. The private key cannot be exported, and access control flags can require the device passcode or biometrics before signing.

Challenge, freshness and the server’s decision

Binding is only as strong as its verification step:

  1. Enrol after a strong sign-in. The server stores the public key against the account and a random installation identifier.
  2. Challenge before a sensitive action. The server issues a single-use value with a short lifetime.
  3. Sign in the app. The signature covers the challenge and the key details of the request, such as amount and recipient.
  4. Verify on the server with the stored public key, then mark the challenge as spent.
  5. Decide under your policy. A missing or failed binding can mean step-up authentication rather than a flat refusal.

Signing the request details, not only the challenge, stops a valid signature from being attached to a different transaction.

Lifecycle and data minimisation

EventEffect on the keySensible handling
App reinstall on AndroidKeystore keys are removed with the appRe-enrol with full authentication
App reinstall on iOSKeychain entries may survive deletion, but this is not dependableTreat as a new enrolment
Factory reset or new phoneKeys are goneRe-enrol and revoke the old binding
Restore from backupHardware-bound keys are not restoredDetect the missing key and re-enrol
Key rotationOld key signs approval for the new oneServer swaps keys and logs the change
Lost or stolen phoneKey remains on the lost deviceUser or support revokes the binding

Store the public key, the installation identifier, enrolment and last-use dates. Skip hardware identifiers entirely.

How Otukan applies device binding

Otukan creates the binding key in the platform’s hardware-backed store where the device offers one, with key handling built separately for Android and iOS and available to Flutter and React Native apps, and signs proofs over your server’s challenge. Each proof travels with Otukan’s runtime signals and attestation evidence, so your backend judges the key, the app and the environment in one step. You own the enrolment, re-enrolment and revocation rules, and every binding event reaches your backend.

The product control is covered on mobile device binding. For proof that the caller is your genuine app, see what is app attestation. Other terms are in the mobile security glossary.

Common questions

  • Does device binding stop account takeover on its own?

    It closes one route: a password, token or one-time code copied to another phone. It does not help if the attacker drives the genuine phone, for example through remote-access malware or a coerced user. That is why binding works best next to runtime signals from the app, such as remote-control or overlay indicators, and behavioural rules on your server.

  • What happens when a customer buys a new phone?

    The old key cannot move, so the new phone starts without a binding. The customer signs in, passes whatever strong authentication your policy requires for enrolment, and the app creates a new key. Your server records the new binding and revokes the old one, ideally with a notification to the customer so an unexpected enrolment is noticed.

  • Is binding a privacy risk?

    It need not be. A binding needs a public key and a random installation identifier created by your app, not hardware identifiers or a list of installed apps. Keep enrolment and last-use dates for as long as the account relationship requires, and delete the record when the binding is revoked or the account closes.

Make stolen sessions useless elsewhere

Tell us the platforms and app framework, the accounts or sessions you want to bind and how users enrol today. We do not ask for binaries, signing keys, customer data or production credentials.

Or request a technical demo