Skip to main content

Offline by design

ZeroKeyUSB does not rely on the Internet, cloud storage, or companion apps. Everything — from encryption to key handling — happens inside the device, powered directly through USB. Your passwords never leave the hardware and cannot be accessed remotely, even by the manufacturer.

Encryption architecture

All sensitive data is stored in the external EEPROM M24C64-WMN6TP, encrypted using AES-128 CBC (Cipher Block Chaining). The encryption key is derived from your Master PIN: the digits are hashed with SHA-256 and the first 16 bytes form the AES key. The original PIN is never stored or transmitted in plain text.
ElementDescription
Encryption algorithmAES-128 in CBC mode (industry-standard symmetric cipher).
Key sourceMaster PIN → SHA-256 → 128-bit AES key.
IV (Initialization Vector)Generated from analog noise on first startup and stored securely in EEPROM.
Data blocksEach credential uses three 32-byte encrypted pages (site, username, password).
VerificationEach write is confirmed via I²C acknowledgment to ensure completion.
If the EEPROM were removed from the board, its contents would appear as random ciphertext, with no recognizable structure or patterns.

The Master PIN

Your PIN acts as your personal encryption key. It is never transmitted, stored in plain text, or shared with any external system. When you enter your PIN:
  1. ZeroKeyUSB derives the AES-128 key.
  2. This key decrypts an 8-byte signature block stored in EEPROM.
  3. If the decrypted result matches the expected pattern, access is granted.
  4. Otherwise, the failed-attempt counter increments and the device enforces a delay before retry.

Intelligent lockout

Each incorrect PIN attempt increases the waiting time exponentially, and the count is stored persistently in EEPROM (0x0002):
Failed attemptsWait time
15 seconds
210 seconds
320 seconds
440 seconds
580 seconds
up to 2560 seconds (≈ 43 minutes)
This mechanism prevents brute-force attempts and persists even after unplugging the device.

Secure Initialization Vector (IV)

Every device generates a unique Initialization Vector on first startup. The IV is created using analog noise read from a floating pin on the SAMD21 and saved in the EEPROM. If the IV becomes corrupted or missing, it is regenerated automatically with fresh entropy. A single IV per device is used for all AES operations, ensuring every encryption chain is unique to that specific unit.

Data segmentation

Each credential is divided into independent encrypted pages to minimize correlation:
  • Page 1 → Site or domain
  • Page 2 → Username
  • Page 3 → Password
  • Page 4 (optional) → TOTP secret
This segmented structure isolates corruption, avoids recognizable patterns, and extends memory endurance.

Tamper protection

  • The entire PCB is encapsulated in epoxy resin, making component access virtually impossible without destroying the device.
  • No wireless interfaces (Wi-Fi, Bluetooth, NFC) are present.
  • The firmware is static — flashed at the factory and cannot be updated remotely.
  • All sensitive operations occur only in temporary RAM buffers, which are cleared immediately after use.

Transparency, not dependence

ZeroKeyUSB’s firmware is fully open-source and available for public audit and verification. Anyone can review how encryption, IV handling, and access control are implemented to confirm that:
  • There are no backdoors or remote commands.
  • All cryptographic processes occur locally and deterministically.
  • Security depends on design, not trust.
ZeroKeyUSB intentionally avoids OTA or wireless updates — physical access is required for reflashing if ever needed.

Dive deeper

ZeroKeyUSB’s encryption follows the same core principles found in certified hardware tokens and wallets — with a focus on simplicity, transparency, and complete offline operation.
I