RSS Amplifier

Sentinel Den · Engineering blog · Mar 23, 2026

Ten on-device behavioral signals on iOS and what each catches

0
Sign in to vote or save

Muhammad Khan · Sentinel Den

A continuous-authentication SDK is only as good as the signals it observes. BehaviorGuard’s design ships ten on-device collectors: four enabled by default (touch dynamics, typing cadence, accelerometer, gyroscope) and six opt-in (scroll dynamics, stylus, magnetometer, barometer, gait, proximity). Each collector has its own threat-coverage profile and its own false-positive class. This post is the breakdown: what each signal measures, what attack it catches, what it does not catch, and which iOS app categories should opt it in.

The framing is engineering, not marketing, every signal has limitations, and the right answer for any given app is a careful subset rather than “turn them all on”.

1. Touch dynamics, pressure, dwell, velocity

What it measures: the per-tap profile of a user’s screen interaction. Pressure (UITouch.force on supported hardware), dwell time (how long the finger stays in contact), velocity (delta-pixels per millisecond as the finger moves). The ensemble has ~30 features extracted per tap; the user’s distribution over these features is stable enough across thousands of taps to form a fingerprint.

What it catches: an attacker who holds the phone differently from the enrolled user. Different finger size, different angle of approach, different pressure curve. Catches both “stolen device, different user trying to keep the session alive” and “shoulder-surfed unlock, then the actor’s behavior diverges”.

What it does not catch: an attacker who has watched the user for a long time and learned to approximate their touch profile. The signal degrades but does not collapse. Pair with motion + typing for the cases that escape touch alone.

Default-on. Every BehaviorGuard integration should have this enabled.

2. Typing cadence, inter-keystroke timing

What it measures: the timing between consecutive keystrokes when the user is in a text field. The vector is the rolling distribution of inter-key intervals (in milliseconds), normalized so that the user’s average WPM doesn’t dominate the signal.

What it catches: an attacker typing into the app at a meaningfully different cadence. Particularly strong against bots and RPA scripts, which type with mechanically uniform inter-key intervals, distinguishable from human cadence within a few hundred keystrokes.

What it does not catch: a human attacker with similar typing speed. The signal narrows the field but does not uniquely identify.

Default-on. The bot-detection value alone justifies it for any app that has a text input flow.

What it measures: how the user scrolls. Initial velocity of the gesture, the deceleration curve (linear vs. exponential), the points where the user hesitates and resumes scrolling. Each scroll produces a 40-dimensional feature vector; the user’s distribution over these features is stable across sessions.

What it catches: an attacker who scrolls at a different speed or with a different micro-rhythm. Particularly effective for content-consumption apps (news, financial dashboards, medical records) where scrolling is the dominant interaction.

What it does not catch: an attacker who only views one screen and doesn’t scroll. Pair with touch dynamics for the static-view case.

Opt-in for content-heavy apps; default-off elsewhere.

4. Stylus dynamics, pressure and tilt

What it measures: when the user is interacting with Apple Pencil, the pressure curve and the tilt angle. A user has a stable grip on the Pencil that produces a characteristic pressure/tilt pattern across strokes; that pattern is the fingerprint.

What it catches: an attacker who picks up the user’s device and Pencil. Very high signal value because Pencil grip is more distinctive than finger touch.

What it does not catch: an attacker who only uses fingers (the Pencil collector emits no events). Useful only in apps where the user actually uses the Pencil, note-taking apps, drawing apps, marked-up document review.

Opt-in. If you’re shipping a Pencil-aware app, the value is significant.

5. Accelerometer, device motion in three axes

What it measures: how the device moves while the user is using it. The signal is not the absolute orientation (that’s gravity-dominated) but the high-frequency micro-motion. A user walking holds the device with a characteristic gait-driven jitter; a user sitting holds it with a different (smaller) jitter; a user lying down holds it with another distinct pattern.

What it catches: an attacker who is in a different physical context from the enrolled user. The signal is environmental as much as personal, same user in different posture looks different, so the use is as a context modifier rather than as a primary identifier.

What it does not catch: a thief who acquired the device in a context similar to the user’s typical one (e.g., user habitually uses the phone while seated, thief acquires it and sits down to use it).

Default-on. Cheap signal, cheap to evaluate, useful as a context fold-in.

6. Gyroscope, angular velocity

What it measures: rotational micro-motion. How the user rotates the device, tilting it to read, rotating it to type more comfortably, the small involuntary rotations from breathing and pulse. The gyroscope picks up sub-degree movements the accelerometer cannot.

What it catches: similar to accelerometer but at a higher fidelity. Combined with the accelerometer, the two motion sensors form a tighter posture-and-gesture fingerprint than either alone.

What it does not catch: a stationary attacker in the same posture. The signal collapses for very static use.

Default-on. The accelerometer + gyroscope pair is the foundation of motion-based identity.

7. Magnetometer, magnetic environment

What it measures: the local magnetic field. Each location has a small magnetic signature from nearby metal, electrical wiring, and the Earth’s field at that latitude. The user’s home and office have distinct magnetic signatures; the magnetometer recovers a coarse location signal without GPS.

What it catches: an attacker who has taken the device to a different location. The magnetic signature of “user’s regular environment” diverges from “thief’s bedroom”.

What it does not catch: an attacker in a location with a similar magnetic profile. Also catches the user themselves traveling, which is a false positive unless your app contextually expects travel.

Opt-in. Useful for fraud detection where geographic context matters; noisy for travel-heavy users.

8. Barometer, altitude pattern

What it measures: atmospheric pressure, which translates to relative altitude. The user’s typical altitude range (office floor 12, home floor 2) is observable; an attacker in a different building has a different altitude profile.

What it catches: extremely specific, useful when the user’s day-to-day altitude pattern is stable and the threat actor is in a different location. Rarely the deciding signal alone; folds into context evaluation.

Opt-in. Most apps don’t need it. Healthcare apps with on-floor location significance (different patient floors) sometimes use it.

9. Gait, pedometer cadence

What it measures: the user’s walking cadence when in motion, via CMPedometer. Steps-per-minute distribution, step-impact distribution. Each user has a characteristic gait; an attacker walking the device elsewhere has a different one.

What it catches: an attacker who has physically taken the device and is walking with it. Notably catches a snatched device while the thief is fleeing.

What it does not catch: a stationary attacker. The signal is only useful while the device is moving.

Opt-in. Privacy-sensitive (some jurisdictions treat gait as biometric data); use only when the threat model justifies it and the privacy policy reflects it.

10. Proximity, face-near-device vs. in-pocket

What it measures: the proximity sensor’s coarse signal, whether the device is near a surface (user’s face, in a pocket). The pattern of proximity-near vs. proximity-far over a session is a weak but useful identifier (some users hold the phone close, some hold it at arm’s length).

What it catches: low-fidelity context. Useful only as a tiebreaker when other signals are ambiguous.

Opt-in. Often more useful as a battery / lifecycle hint than as a behavioral signal.

The integration shape

Default-on (four signals): touch, typing, accelerometer, gyroscope. This catches the modal threat model for credential-class apps with minimal false-positive risk; the BehaviorGuard threat model maps each collector to the attacker it defeats.

Add stylus if you ship a Pencil flow. Add scroll for content-heavy reading flows. Add magnetometer + barometer + gait + proximity only when the threat model justifies them and you have a privacy policy that discloses behavioral biometric collection, every jurisdiction with a privacy law treats this category as personal data.

BehaviorGuard’s enabledSensors is a Set<SensorType> you construct at configuration time. The default BehaviorGuardConfiguration.default ships the conservative four; opt in via the constructor when your threat model warrants it. See /sdk/behaviorguard for the marketing summary, /docs/behaviorguard for the configuration reference, and the companion post on continuous authentication for the overall architectural shape this all plugs into.

Read the original on sentinelden.com

Comments

Nothing yet. Say the first thing.

    Sign in to join the conversation.