Virtual Numbers & Multi-Device Magic
How C6P's +99 virtual number system provides privacy-first identity while supporting seamless multi-device messaging with independent cryptographic keys.
The +99 Virtual Number System
Your identity is a permanent virtual number — no SIM card, no phone company, no tracking.
What is a +99 Number?
Every Convro account has a permanent virtual number in the +99 xxx xxx namespace. For example: +99 241 772
No SIM Required
Your identity isn't tied to a phone carrier or physical SIM card
Permanent Identity
Your +99 number is yours for life — never reassigned or rotated
Privacy by Design
No real phone number means no SMS intercepts or carrier tracking
Canonical Identifier
All cryptographic operations bind to your +99 number internally
The +99 prefix is a reserved country code that doesn't correspond to any real country. This makes it clear these are virtual identities, not tied to any nation or telecom provider.
One Device = One Identity
Each device installation generates its own cryptographic identity, independent from all others.
Device Identity Components
Every device has its own long-term keypairs that never leave the device:
| Component | Type | Purpose | Size |
|---|---|---|---|
| IK_sig | Ed25519 | Signing & Authentication | 32 bytes pub + 64 bytes priv |
| IK_dh | X25519 | Key Exchange (DH) | 32 bytes pub + 32 bytes priv |
| device_id | SHA-256 | Derived from IK_sig | 16 bytes (hex32) |
Device ID Derivation
device_id = SHA-256(
"C6P_DEVICE_ID_V1" ||
IK_sig_pub_bytes(32)
)[0..16]
// Output: 16 bytes
// Wire encoding: hex32 lowercase
// Example: "0123456789abcdef0123456789abcdef"
Same IK_sig always produces same device_id — stable across restores
Private keys stored in iOS Keychain / Android KeyStore only
Server never learns private keys. Identity generation happens entirely on-device. The server only sees public keys during registration.
Multi-Device: Same User, Independent Keys
Use Convro on iPhone, iPad, Mac, and Android — each with its own cryptographic identity linked to your +99 number.
Account → Devices Mapping
Why Separate Identities Per Device?
If your iPhone is compromised, your MacBook sessions remain secure. Each device has independent cryptographic keys.
iOS Keychain, Android KeyStore, macOS Secure Enclave — each platform's native security works independently.
Lost your phone? Revoke just that device. Your other devices keep working without re-keying everything.
Private keys never leave the device they were generated on. No cloud backup, no syncing risk.
New devices don't automatically get message history from existing devices. Each device starts fresh with its own cryptographic sessions. This is a privacy-first design choice.
Prekey Bundles: Starting New Sessions
How devices discover each other and establish encrypted sessions through signed prekeys.
What is a Prekey Bundle?
A prekey bundle contains a device's public keys that allow others to initiate encrypted sessions without prior coordination.
Bundle Components
Prekey Lifecycle
Signed Prekey
- • Rotated every 30 days
- • Medium-term DH component (DH1, DH3)
- • Signed by IK_sig for authenticity
- • Server verifies signature on upload
One-Time Prekey
- • Single-use only (consumed atomically)
- • Pool of ~100 OTPs per device
- • Enhanced forward secrecy (4DH)
- • Auto-refilled when pool drops below 20
Prekey bundles enable asynchronous messaging. Alice can start a session with Bob even if Bob is offline. When Bob comes online, he decrypts using his local private keys.
Usernames: Human-Friendly Aliases
Optional usernames make Convro easier to use, while cryptography binds to your permanent +99 number.
How Usernames Work
Usernames are aliases that map to your canonical +99 identity. They make it easier to share your contact info without revealing your permanent number.
Username Benefits
- ✓ Easy to remember (@alice)
- ✓ Can be changed anytime
- ✓ Shareable (QR codes, links)
- ✓ Keeps +99 number private
Crypto Binding
- • All crypto binds to +99 number
- • Username changes don't affect keys
- • Sessions persist across renames
- • Server maps @username → user_id
Usernames are not part of the cryptographic identity. All session keys, signatures, and bindings use the +99 number and device_id internally. Usernames are purely for UX convenience.
Key Takeaways
+99 virtual numbers provide permanent identity without SIM cards or phone carriers
One device = one identity — each installation has independent Ed25519 + X25519 keypairs
Multi-device support from day one with independent keys per device for security
Prekey bundles enable asynchronous messaging without online coordination
SPK rotation every 30 days + OTP single-use for enhanced forward secrecy
Usernames are aliases — all crypto binds to +99 number, not username string