Real-time Encrypted Chat
Bixby Messenger provides real-time encrypted chat between two people. All messages are encrypted in the browser before being sent. The server never sees the original messages—only encrypted data.
Messenger uses AES-256-GCM with HKDF key derivation and Additional Authenticated Data (AAD) for extra security. Each message has a unique salt and IV. AES-256-GCM, HKDF-SHA-256 key derivation, 256-bit salt, 96-bit IV, 128-bit auth tag, AAD for integrity.
async function encryptMessage(plaintext) {
// HKDF key derivation with 256-bit salt
const derivedKey = await deriveKeyHKDF(masterKey, salt, info);
// AES-256-GCM with Additional Authenticated Data
const encrypted = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv, additionalData: aad },
derivedKey, data
);
return { encrypted, key };
}
Messenger uses polling with exponential backoff and auto-reconnect for reliable real-time communication without WebSocket overhead. Polling with exponential backoff (2-30s), auto-reconnect on connection loss, connection status tracking.
// Polling with exponential backoff
function startPolling() {
const poll = async () => {
await loadMessages();
const delay = adjustPollInterval(success);
setTimeout(poll, delay);
};
poll();
}
// Auto-reconnect on connection loss
if (consecutiveFailures >= MAX_FAILURES) {
updateConnectionStatus('disconnected');
setTimeout(reconnect, 5000);
}
See when someone is typing in real-time.
Know when your messages have been read by the recipient.
Set a self-destruct timer for messages (hours or minutes).
Manage multiple chat rooms simultaneously with a sidebar interface.
Share rooms easily via QR codes for quick access.
Save and revisit recent rooms via localStorage.
Messenger fully respects your privacy. No tracking, no analytics, no logging of message content. All encryption happens locally in your browser. The server only acts as a relay for encrypted data.