G-Shock cold storage
WristVault turns your Casio G-Shock into encrypted micro-storage for passwords & keys up to 39 characters.
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"
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.
| Cipher | AES-128-GCM |
| Key derivation | PBKDF2-SHA256, 100k iterations |
| State on phone | None |
| Portability | Any phone + your PIN can read the watch |
BLE connection via GShockAPI, pairing through Android's Companion Device Manager.
- Open app, grant Bluetooth permissions
- First time: pick your watch from the system dialog
- Hold lower-left button on the watch for 3 seconds
- Done — address is cached after that
- 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
- Android 8.0+
- A G-Shock with BLE and reminder events (tested on MRG-B5000)
- Bluetooth + location permissions (Android needs these for BLE scanning)
JAVA_HOME=/opt/android-studio/jbr ./gradlew assembleDebugOr grab the APK from Releases.
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)
Built on the amazing work of Ivo Zivkov — GShockAPI and CasioGShockSmartSync.
MIT
Disclaimer: This app is experimental. Use at your own risk.
