Skip to content

remigius-labs/WristVault

Repository files navigation

WristVault

G-Shock cold storage


WristVault turns your Casio G-Shock into encrypted micro-storage for passwords & keys up to 39 characters.

How it works

Your G-Shock has 5 reminder slots. Each slot has an 18-byte title field. WristVault stuffs encrypted data into those titles over BLE. The events are set to 2099, disabled, invisible on the watch face. The watch has no idea it's carrying your secret.

Your phone encrypts, sends, and forgets. Nothing is stored on the phone. Any phone with the app and your PIN can read the watch.

  Phone                          Watch
  ─────                          ─────

  "password123" + PIN
        │
        ▼
  PBKDF2 (100k rounds)
  AES-128-GCM encrypt
        │
        ▼
  Base64 ciphertext
        │
        └────── BLE ──────>  Slot 1: 0KxSMFF...
                             Slot 2: 1vygRMP...
                             Slot 3: 2g4AZQl...
                             Slot 4:  -
                             Slot 5:  -

        ┌────── BLE ──────<  (read slots)
        │
        ▼
  PIN + decrypt
        │
        ▼
  "password123"

Storage

5 slots, 17 usable chars each (1 byte for chunk ordering). That's 85 chars of Base64 = 63 raw bytes. Subtract the PBKDF2 salt (8B) and GCM tag (16B), and you get room for 39 characters of plaintext.

Encryption

Cipher AES-128-GCM
Key derivation PBKDF2-SHA256, 100k iterations
State on phone None
Portability Any phone + your PIN can read the watch

Pairing

BLE connection via GShockAPI, pairing through Android's Companion Device Manager.

  1. Open app, grant Bluetooth permissions
  2. First time: pick your watch from the system dialog
  3. Hold lower-left button on the watch for 3 seconds
  4. Done — address is cached after that

Limitations

  • 39 character max
  • PIN can be brute-forced if it's short — use 6+ digits
  • If someone has your watch and your PIN, it's over

Requirements

  • Android 8.0+
  • A G-Shock with BLE and reminder events (tested on MRG-B5000)
  • Bluetooth + location permissions (Android needs these for BLE scanning)

Build

JAVA_HOME=/opt/android-studio/jbr ./gradlew assembleDebug

Or grab the APK from Releases.

Architecture

ConnectActivity       BLE permissions, pairing, connection
VaultActivity         Encrypt/decrypt UI, send/receive
SlideToSendView       Swipe-to-confirm gesture
WristVault            GShockAPI wrapper, chunking, slot management
VaultCrypto           PIN → PBKDF2 → AES-128-GCM (stateless)

Credits

Built on the amazing work of Ivo ZivkovGShockAPI and CasioGShockSmartSync.

License

MIT

Disclaimer: This app is experimental. Use at your own risk.

About

Encrypted micro-storage on your Casio G-Shock

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages