Skip to content

Arithmetic PIN scrambler #190

Description

@mmlado

Feature Proposal: Arithmetic PIN Scrambler

The Problem

When entering your PIN in public, observers can see your keypress pattern and learn your PIN. Hardware wallets need better protection for everyday public use.

The Solution

Add arithmetic PIN scrambling with random per-digit offsets. Each digit shows a random offset number in the corner of the screen. User applies mental math while typing. The physical keypress pattern becomes meaningless to observers.

How it works:

  • User sets offset range in settings (e.g., -5 to +5)
  • Always active once configured
  • Each digit gets unique random offset shown in screen corner
  • Wraps around modulo 10
  • Example: Real PIN 1234
    • Corner shows: +2 → type 3 → stores 1
    • Corner shows: -1 → type 1 → stores 2
    • Corner shows: +4 → type 7 → stores 3
    • Corner shows: 0 → type 4 → stores 4

How It Works

┌─────────────────────────┐ 
│ +7                      │ ← Offset in corner 
│                         │ 
│       ● ● ○ ○ ○ ○       │
│                         │
│                         │
└─────────────────────────┘

Offset displayed in corner, changes per digit. Harder for observers to see small number in corner.

Real-World Example

Random offset (±5 range):

  • Real PIN: 1984
  • Corner shows: -2, +3, -5, +8
  • User types: 9, 2, 3, 2
  • Math: 1-2=-1→9 (wraparound), 9+3=12→2 (wraparound), 8-5=3, 4+8=12→2 (wraparound)
  • Observer must see both small corner numbers AND keypresses simultaneously

Security Benefits

  • Defeats shoulder surfing - Need to see screen corner + keypad simultaneously
  • Defeats video surveillance - Camera must capture small corner numbers clearly
  • Defeats thermal imaging - Random keys each time
  • Changes every entry - Repeated observation useless
  • Corner placement - Harder to observe than centered display

Trade-off:

  • Slower entry - Must read offset per digit

Session Toggle

At PIN entry screen, press CONFIRM before first digit to toggle scrambling on/off for current session:

┌─────────────────────────┐ 
│                         │
│                         │ 
│       ● ● ○ ○ ○ ○       │
│                         │
│                  toggle │
└─────────────────────────┘
  • Default behavior set in settings (On or Off)
  • Quick toggle for context: at home? turn off for speed. In public? turn on.
  • Mode stays for entire session, resets on power cycle

Why Random Offset Only

Constant offset (always +3, for example) is fundamentally weak. Once an attacker observes one physical keypress pattern, they only have ~19 possible offsets to try (-9 to +9). With 3 PIN attempts before lockout, they can brute-force all offsets in just 7 PUK cycles. Random per-digit offsets are actually secure because the attacker must observe all 6 digits with clear screen visibility, and each entry uses completely different offsets.

Settings

Settings → Device → PIN Scrambling 
├─ Default Mode: [Off ▼] 
│ └─ Off / On 
└─ Random Range: [-5 to +5]
  └─ Min: -9, Max: +9

Default mode sets initial behavior. Use CONFIRM button at PIN entry to toggle for that session.

Technical Notes

  • Arithmetic: (digit + offset) % 10 with wraparound for negatives
  • Example: 9 + 2 = 11 % 10 = 1, 0 - 3 = -3 → 7
  • Hardware RNG generates offset per digit
  • Display offset in top-right or bottom-right corner (small, less visible)

For Advanced Users

Important notes:

  • Quick toggle at PIN entry: press CONFIRM before first digit
  • Physical isolation still best practice
  • Must read corner number for every digit (slower entry)
  • Change PIN if compromised

Best practices:

  • Set default based on most common environment
  • Toggle when needed: at home? press CONFIRM to disable. In public? press CONFIRM to enable.
  • Practice your mental math before using in public
  • Suggested range: -5 to +5 (easier math)

User Empowerment Philosophy

"Your device, your choice, your risk assessment."

Users choose their security level:

  • Set default mode for most common environment
  • Quick toggle at point-of-entry based on current situation
  • At home? Fast entry. In public? Press CONFIRM, enable scrambling.
  • Session-sticky: decide once, stays active until power cycle.

Hardware wallets should empower users to make informed decisions, not enforce one-size-fits-all policies.


Looking for feedback on this approach!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions