🇬🇧

Hoe Het Werkt

Technologie en Beveiliging

Bixby versleutelt berichten in de browser voordat ze het apparaat verlaten. De server ziet nooit het originele bericht—alleen versleutelde data.

Zero-Knowledge

Het bericht wordt versleuteld in de browser voordat het wordt verzonden. De server ontvangt alleen versleutelde data en kan het bericht daarom niet lezen. AES-GCM-256 versleuteling via Web Crypto API. Versleuteling gebeurt client-side, plaintext verlaat apparaat nooit.

crypto.js JavaScript
async function encryptMessage(plaintext) { // Genereer 256-bit sleutel const key = await crypto.subtle.generateKey( { name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt'] ); // Willekeurige IV + versleutel (plaintext verlaat apparaat nooit) 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 }; }

Sleutel in URL

De ontsleutelingssleutel staat in de URL (na de #). Deze wordt niet naar de server gestuurd, waardoor de server het bericht niet kan lezen. 256-bit AES-GCM sleutel in URL fragment. Fragmenten worden niet verzonden in HTTP requests (RFC 3986).

app.js JavaScript
// Versleutel lokaal, stuur alleen versleutelde data naar server const { encrypted, key } = await encryptMessage(message); const { id } = await fetch('/api/store', { method: 'POST', body: JSON.stringify({ encrypted }) }).then(r => r.json()); // Sleutel in URL fragment - wordt nooit naar server gestuurd (RFC 3986) const link = `https://bixby.nl/read#${id}__${key}`;

Eenmalige Toegang

Na het lezen wordt het bericht direct verwijderd. Elke link werkt maar één keer. Atomische delete: file_get_contents() + unlink() in één operatie. Voorkomt race conditions.

api/read.php PHP
$id = preg_replace('/[^a-f0-9]/', '', $_POST['id']); $path = "/messages/{$id}.json"; $data = json_decode(file_get_contents($path), true); // Direct verwijderen na lezen (eenmalige toegang) unlink($path); echo json_encode(['encrypted' => $data['encrypted']]);

Technologie

Versleuteling

Native browser versleuteling. Geen externe libraries nodig. AES-GCM-256, Web Crypto API. IV: 96-bit random. Authenticated encryption.

Backend

Eenvoudige PHP API. Geen database nodig. PHP 8.3. File-based storage. TTL: 24 uur. Atomische delete operaties.

Server

Snelle, veilige webserver. Nginx 1.24 + PHP-FPM 8.3. SSL/TLS via Let's Encrypt. Security headers: CSP, HSTS.

Opslag

Tijdelijke bestanden, automatisch opgeruimd na 24 uur. Encrypted blobs in /messages/. Cron cleanup. Directe toegang geblokkeerd (403).

Beveiliging

  • Versleuteling gebeurt in de browser voordat data het apparaat verlaat
    AES-GCM-256, Web Crypto API. Plaintext verlaat apparaat nooit.
  • De server ziet nooit het bericht
    Zero-knowledge: alleen encrypted blobs, geen plaintext mogelijk.
  • De sleutel blijft in bezit van de ontvanger
    Key in URL fragment, niet verzonden in HTTP requests.
  • Het bericht wordt direct verwijderd na lezen
    Burn-on-read: atomische delete, geen herhaalde toegang.
  • Automatische opruiming na 24 uur
    TTL: ongelezen berichten verlopen automatisch.
  • Geen tracking of logging
    Geen tracking cookies, analytics, of content logging.

Transparantie

Alle client-side code is inspecteerbaar. Geen minified JavaScript, geen obfuscatie. Bekijk de belangrijkste bestanden via de link hieronder.

Bekijk broncode

Privacy

Geen tracking, analytics of logging. Geen tracking cookies. Geen third-party scripts.

Hosting in Nederland 🇳🇱

Bixby wordt gehost op servers in Nederland. De data blijft binnen de EU en valt onder Nederlandse privacywetgeving. Nederlands datacenter, EU data residency, AVG/GDPR compliant.

← Terug