🇬🇧

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: instelbaar, fallback 30 dagen. 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 maximaal 30 dagen. 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 van ongelezen berichten
    Berichten met een vervaltijd verlopen automatisch. Overige berichten worden na 30 dagen opgeruimd.
  • 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

Verifieer het zelf

Voer hieronder een testbericht in. De demo doorloopt exact dezelfde stappen als een echt bericht, inclusief de echte API.

Privacy

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

Privacybeleid

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

Totaal aantal verzonden notities: 28 Messenger berichten: 14