# Gebouwd zodat niemand kan meekijken. Ook wij niet.

> temp.cool versleutelt elk bericht in je browser met AES-256-GCM voordat het verstuurd wordt. De sleutel staat in het deel van de link na de

1. **Je browser vergrendelt het** Maakt een willekeurige 256-bit sleutel en versleutelt de tekst met AES-256-GCM.
2. **Onze server bewaart onleesbare tekst** Bewaart alleen de versleutelde tekst, in de EU, met een zelfvernietigingstimer.
3. **De link draagt de sleutel** De sleutel staat na de
4. **Hun browser ontgrendelt het, wij vernietigen het** Na een tik haalt hij de tekst op, ontsleutelt die lokaal, en wij verwijderen hem in dezelfde stap.

## Wat we bewaren

- Het versleutelde bericht (ciphertext), opgevuld zodat het alleen een hint geeft over de lengte.
- Wanneer het verloopt en hoe vaak het geopend mag worden.
- Vingerafdrukken (SHA-256-hashes) van tokens die bewijzen dat een lezer de volledige link heeft, het wachtwoord kent en, voor de afzender, de beheerlink.
- Dagtotalen voor de [live statistieken](/nl/statistieken/): hoeveel berichten er gemaakt, geopend en verlopen zijn. Niets over losse berichten.

## Wat we nooit zien

- Het bericht zelf, of de sleutel om het te openen.
- Je wachtwoord. Dat verlaat je apparaat nooit.
- Naar wie je het stuurt. Dat vragen we niet, en berichtpagina's laden niets van andere bedrijven.

## De details, voor wie het wil weten

**De sleutel.** Voor elk bericht maakt je browser een nieuwe 256-bit sleutel met de toevalsgenerator van je besturingssysteem. Die komt in de link na de `#`, het URL-fragment. Browsers houden het fragment voor zichzelf: het gaat niet naar de server, staat niet in onze logs en wordt niet als verwijzer doorgegeven.

**Versleuteling.** Uit die sleutel leiden we met HKDF-SHA-256 een AES-256-GCM-sleutel af. GCM merkt ook geknoei op, dus een aangepast bericht opent niet in plaats van iets verkeerds te tonen. Alles gebruikt WebCrypto, de versleuteling die in elke moderne browser zit. Er is geen extra cryptobibliotheek om te vertrouwen.

**Wachtwoorden.** Voeg je een wachtwoord toe, dan versterkt je browser het met PBKDF2 (600.000 rondes SHA-256) en mengt het met de linksleutel. Beide zijn nodig om te ontsleutelen. Om raden te beperken stuurt de browser van de lezer ook een token dat is afgeleid van de linksleutel en het wachtwoord. Wij bewaren alleen een hash van dat token, zodat we foute pogingen kunnen tellen zonder het wachtwoord te kennen. Na 4 foute pogingen vernietigt het bericht zichzelf.

**Echt één keer lezen.** Elk bericht heeft een eigen Cloudflare Durable Object, een klein opslagblok dat verzoeken één voor één afhandelt. Openen, tellen en verwijderen gebeuren in één stap, dus twee mensen die de link tegelijk openen kunnen het nooit allebei krijgen. Een lezer moet ook eerst bewijzen dat hij de volledige link heeft, dus iemand die alleen het bericht-ID kent kan je bericht niet laten vernietigen.

**Veilig voor linkvoorbeelden.** Chat-apps en mailscanners openen links om een voorbeeld te maken. Een temp.cool-link toont eerst een knop "Toon het geheim" en laadt niets geheims totdat een mens erop tikt.

**Verlopen.** Elk bericht zet een wekker op het moment dat het verloopt. Gaat die af, dan wordt het bericht met alles eromheen gewist. Geen cronjob, geen opruimscript.

**Waar het staat.** Berichten worden alleen opgeslagen in de EU-jurisdictie van Cloudflare, dus ze blijven in datacenters binnen de Europese Unie.

## Waar temp.cool je niet tegen kan beschermen

Eerlijk zijn over de grenzen hoort bij beveiliging.

- **Iedereen met de volledige link kan het openen.** Behandel de link als het geheim zelf. Wil je extra zekerheid, voeg dan een wachtwoord toe en deel dat op een andere manier, bijvoorbeeld telefonisch.
- **Een besmet apparaat.** Zit er malware op het apparaat van de afzender of ontvanger, dan kan die het bericht op het scherm lezen, net als alles wat je typt of leest.
- **Wat de lezer daarna doet.** Na het openen kan de ontvanger het kopiëren of er een screenshot van maken.
- **Vertrouwen in de pagina zelf.** Zoals bij elke webapp vertrouw je erop dat de pagina die wij leveren doet wat hij belooft. Onze versleutelcode is klein en we willen hem openbaar maken, zodat iedereen hem kan controleren.

Een beveiligingsprobleem gevonden? Zie onze [security.txt](/.well-known/security.txt).
