Technology and Security
Bixby encrypts your messages in the browser before they leave your device. The server never sees your message—only encrypted data.
Your message is encrypted in your browser before being sent. The server only receives encrypted data and therefore cannot read your message. AES-GCM-256 encryption via Web Crypto API. Encryption happens client-side, plaintext never leaves device.
async function encryptMessage(plaintext) {
// Generate 256-bit key
const key = await crypto.subtle.generateKey(
{ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']
);
// Random IV + encrypt (plaintext never leaves device)
const iv = crypto.getRandomValues(new Uint8Array(12));
const encrypted = await crypto.subtle.encrypt(
{ name: 'AES-GCM', iv }, key, new TextEncoder().encode(plaintext)
);
return { encrypted, key };
}
The decryption key is in the URL (after #). It's not sent to the server, which means the server cannot read your message. 256-bit AES-GCM key in URL fragment. Fragments are not sent in HTTP requests (RFC 3986).
// Encrypt locally, send only encrypted blob to server
const { encrypted, key } = await encryptMessage(message);
const { id } = await fetch('/api/store', {
method: 'POST', body: JSON.stringify({ encrypted })
}).then(r => r.json());
// Key in URL fragment - never sent to server (RFC 3986)
const link = `https://bixby.nl/read#${id}__${key}`;
After reading, the message is immediately deleted. Each link works only once. Atomic delete: file_get_contents() + unlink() in one operation. Prevents race conditions.
$id = preg_replace('/[^a-f0-9]/', '', $_POST['id']);
$path = "/messages/{$id}.json";
$data = json_decode(file_get_contents($path), true);
// Delete immediately after reading (burn-on-read)
unlink($path);
echo json_encode(['encrypted' => $data['encrypted']]);
Native browser encryption. No external libraries needed. AES-GCM-256, Web Crypto API. IV: 96-bit random. Authenticated encryption.
Simple PHP API. No database needed. PHP 8.3. File-based storage. TTL: 24 hours. Atomic delete operations.
Fast, secure web server. Nginx 1.24 + PHP-FPM 8.3. SSL/TLS via Let's Encrypt. Security headers: CSP, HSTS.
Temporary files, automatically cleaned up after 24 hours. Encrypted blobs in /messages/. Cron cleanup. Direct access blocked (403).
All client-side code is inspectable. No minified JavaScript, no obfuscation. View the key files via the link below.
No tracking, analytics or logging. No tracking cookies. No third-party scripts.
Bixby is hosted on servers in the Netherlands. Your data stays within the EU and falls under Dutch privacy laws. Dutch datacenter, EU data residency, GDPR compliant.