Beveiliging

Hoe PrivaLog je dagboek beschermt

Laatst bijgewerkt: 14 oktober 2026

De korte versie

Je berichten worden op je apparaat versleuteld. Zonder account blijft je dagboek op dat apparaat en wordt er niets van naar ons gestuurd. Met een account bereiken berichten ons alleen versleuteld. De sleutel die ze opent, is vergrendeld met een passphrase die alleen jij kent, en die passphrase verlaat je apparaat nooit. Wij bewaren dat dagboek, maar kunnen het niet lezen. Raak je je passphrase kwijt, dan kan niemand die berichten terughalen, ook wij niet.

PrivaLog is niet open source. Met deze pagina leggen we in plaats daarvan vast wat de code doet. Ze beschrijft de apps voor iPhone, iPad en Mac en de webapp zoals ze nu werken.

Wat er op je apparaat gebeurt

De dagboeksleutel

Als je een dagboek begint, maakt de app een dagboeksleutel: een willekeurig getal van 256 bits dat je berichten versleutelt en ontsleutelt. Berichten worden versleuteld met AES-256-GCM, een veelgebruikte versleutelingsmethode. Die merkt ook knoeien op: als een versleuteld bericht is veranderd, weigert de app het te openen in plaats van gewijzigde tekst te tonen.

Een dagboek zonder account

Als je zonder account begint, is er geen passphrase. De dagboeksleutel staat in de sleutelhanger van je apparaat, en het dagboek gaat open zoals je je apparaat ontgrendelt: met Face ID, Touch ID of de toegangscode van je apparaat. Dat is een slot in de app, geen tweede sleutel: wie je apparaat kan ontgrendelen, kan het dagboek openen. Op een apparaat zonder toegangscode gaat het dagboek niet op slot. Er gaat niets van je dagboek naar ons. De sleutel is niet aan dit ene apparaat gebonden, dus een versleutelde back-up van je iPhone of iPad, in iCloud of op een computer, bevat je dagboek en de sleutel. Hoe goed die back-up beschermd is, hangt van Apple af: een iCloud-back-up is alleen met Geavanceerde gegevensbescherming end-to-end versleuteld. Wij krijgen nooit een kopie.

De passphrase

Als je een account aanmaakt, kies je een dagboek-passphrase van minstens 8 tekens. De app maakt daar met Argon2id een tweede sleutel van. Argon2id is een methode die elke gok traag maakt en veel geheugen kost. Die tweede sleutel vergrendelt je dagboeksleutel. Alleen de vergrendelde dagboeksleutel wordt naar ons gestuurd. Als je ontgrendelt, downloadt je apparaat de vergrendelde sleutel en doet het al het werk zelf. Je passphrase wordt nooit naar ons gestuurd. Schreef je al zonder account, dan houdt je dagboek dezelfde dagboeksleutel: de passphrase vergrendelt die, en je berichten verhuizen naar je account. Vanaf dan zit de sleutel op je apparaat niet meer in apparaatback-ups; op een nieuw apparaat gebruik je je passphrase.

Wat er versleuteld is

Alles wat je in een bericht schrijft, wordt samen versleuteld: de titel, de tekst, je stemming, labels, de favorietmarkering en plaatsen, inclusief hun coördinaten. De datum van een bericht is niet versleuteld. Zie Wat onze servers bewaren.

Face ID, Touch ID en toegangscode

Met een account open je je dagboek met je passphrase of met Face ID of Touch ID. Op een apparaat met Face ID of Touch ID gaat dat aan zodra je je passphrase aanmaakt of een dagboek met je account samenvoegt, tenzij je eerder iets anders koos. Je kunt het uitzetten in Instellingen. De app bewaart dan de dagboeksleutel, niet je passphrase, in de sleutelhanger. Die kopie blijft op dit apparaat, zit niet in back-ups en is alleen leesbaar nadat Face ID of Touch ID is gelukt. De toegangscode van je apparaat is niet genoeg: wie die heeft zien intikken, kan je dagboek nog steeds niet openen. Op een apparaat zonder Face ID of Touch ID kun je in plaats daarvan kiezen voor ontgrendelen met de toegangscode. Het systeem controleert je gezicht of vingerafdruk; PrivaLog krijgt die nooit. Voeg je een gezicht of vingerafdruk toe of verwijder je er een, dan werkt de bewaarde sleutel niet meer en ontgrendel je één keer met je passphrase.

Hoe lang het dagboek open blijft

Na het ontgrendelen blijft de dagboeksleutel in het geheugen van de app tot het dagboek op slot gaat. Dat gebeurt als je het zelf vergrendelt, uitlogt of de app sluit, en als PrivaLog zo lang op de achtergrond staat als je in Instellingen kiest: direct, na 1, 5 of 15 minuten, na een uur, of nooit. Standaard is dat 1 minuut op iPhone en iPad en 5 minuten op de Mac. Op een Mac gaat het dagboek ook meteen op slot als het scherm vergrendelt of in slaap valt, tenzij je Nooit koos. Staat de app op de achtergrond, dan is het scherm afgedekt, zodat de appkiezer je berichten niet toont. Uitloggen verwijdert de bewaarde sleutel uit de sleutelhanger. De versleutelde kopieën van je berichten blijven op het apparaat, zodat je berichten die nog niet gesynchroniseerd zijn niet kwijtraakt.

Zoeken

Zoeken gebeurt op je apparaat, in berichten die al ontsleuteld in het geheugen staan. Er wordt geen zoekindex naar de schijf geschreven of naar ons gestuurd.

Wat onze servers bewaren

Dit geldt voor accounts. Een dagboek zonder account komt nooit op onze servers. We gebruiken Supabase voor accounts en opslag. Ons Supabase-project staat in de EU, in Ierland. Elk account kan alleen bij zijn eigen rijen; de database dwingt dat af.

E-mailadres en account-ID
Waarom: Om je in te loggen en je gegevens aan jou te koppelen
Kunnen wij het lezen? Ja
Inloggegevens: een wachtwoord, of je identiteit via Inloggen met Apple
Waarom: Om je in te loggen
Kunnen wij het lezen? We zien welke methode je gebruikt. Een wachtwoord bewaart Supabase gehasht, niet als leesbare tekst.
Versleutelde berichten
Waarom: Om je dagboek tussen apparaten te synchroniseren
Kunnen wij het lezen? Nee
Datums van berichten
Waarom: Om elk bericht te vinden en te synchroniseren. Er is maximaal één bericht per dag.
Kunnen wij het lezen? Ja
Aanmaak- en wijzigingstijden, versienummers en technische velden die nodig zijn om te ontsleutelen
Waarom: Om te synchroniseren en conflicten op te lossen
Kunnen wij het lezen? Ja. Ze zeggen niets over wat je schreef.
Vergrendelde dagboeksleutel
Waarom: Zodat je op een ander apparaat kunt ontgrendelen
Kunnen wij het lezen? Nee. Hij is versleuteld met een sleutel die alleen jouw passphrase kan maken.
Ontgrendelcontrole
Waarom: Zodat de app kan zien of een passphrase klopt
Kunnen wij het lezen? Nee. Het is een korte bekende tekst, versleuteld met je dagboeksleutel. Die laat zien of een sleutel klopt, niet de sleutel zelf.
Salt en Argon2id-instellingen
Waarom: Zodat elk apparaat je passphrase in dezelfde sleutel omzet
Kunnen wij het lezen? Ja. Ze zijn niet geheim.
Instellingen: taal, thema, weergave van de tijdlijn
Waarom: Zodat ze je naar andere apparaten volgen
Kunnen wij het lezen? Ja
Wanneer je de voorwaarden accepteerde en de waarschuwingen over passphrase en back-up bevestigde
Waarom: Als vastlegging van je akkoord
Kunnen wij het lezen? Ja
Status van proefperiode en abonnement, en de Apple-transactie-ID van een aankoop
Waarom: Om te weten of cloudsync actief is
Kunnen wij het lezen? Ja

Kortom: we zien dat je een account hebt, je e-mailadres, op welke dagen je schreef en wanneer. We zien niet wat je schreef.

Cloudsync vereist een actieve proefperiode of Pro. Zonder dat blijven nieuwe berichten op je apparaat en worden ze niet naar ons gestuurd. Berichten die eerder zijn gesynchroniseerd, blijven versleuteld bewaard tot je ze of je account verwijdert. De vergrendelde dagboeksleutel en de ontgrendelcontrole worden voor elk account bewaard.

Als je je account verwijdert, worden je account, berichten, vergrendelde sleutel en abonnementsstatus direct uit onze database verwijderd. Kopieën kunnen nog een beperkte tijd in back-ups van onze dienstverleners staan. Aankoopgegevens die Apple en RevenueCat bewaren, worden hierdoor niet verwijderd.

Accountwachtwoord en dagboek-passphrase

Met een account gebruikt PrivaLog twee aparte geheimen. Ze hebben elk een andere taak.

  • Je accountwachtwoord (of Inloggen met Apple, of een e-maillink) bewijst aan onze server wie je bent. Je kunt het via e-mail resetten. Resetten opent je dagboek niet.
  • Je dagboek-passphrase vergrendelt je dagboeksleutel. Hij verlaat je apparaat nooit, wij zien hem nooit, en niemand kan hem resetten.

Je accountwachtwoord wordt via een versleutelde verbinding verstuurd om je in te loggen, zoals op elke website. Je dagboek-passphrase wordt helemaal niet verstuurd. Gebruik voor beide iets anders.

Diensten die we gebruiken

Supabase
Waarvoor: Accounts en versleutelde opslag
Wat de dienst ziet: Alles uit de tabel hierboven, plus IP-adressen
Vercel
Waarvoor: Host deze website en de webapp
Wat de dienst ziet: IP-adressen en de opgevraagde pagina's. Als je op het web inlogt, gaat je accountwachtwoord via Vercel naar Supabase. Statistieken van paginaweergaven, alleen op de homepage en zonder cookies (Vercel Web Analytics).
RevenueCat
Waarvoor: Pro-abonnementsstatus in de apps
Wat de dienst ziet: Bij het starten van de app een willekeurige ID die RevenueCat zelf aanmaakt, plus technische gegevens zoals je IP-adres en de app- en systeemversie. Met een account ook je account-ID, een willekeurige code, en je aankopen. Nooit je e-mailadres of je berichten.
Apple
Waarvoor: App Store, betalingen en Inloggen met Apple
Wat de dienst ziet: Je aankopen, en je Apple ID als je Inloggen met Apple gebruikt. Niets uit je dagboek.
Apple Kaarten
Waarvoor: Plaatsen zoeken en huidige locatie in de apps, alleen als je een plaats toevoegt
Wat de dienst ziet: Je zoektekst, of je locatie als je de huidige locatie gebruikt
OpenStreetMap Nominatim
Waarvoor: Plaatsen zoeken in de webapp, alleen als je een plaats toevoegt
Wat de dienst ziet: Je zoektekst en je IP-adres
jsDelivr
Waarvoor: Emoji-afbeeldingen in pdf-exports uit de webapp
Wat de dienst ziet: Welke emoji in de geëxporteerde berichten staan, en je IP-adres

De plaats die je kiest, wordt alleen in het versleutelde bericht bewaard. De apps en de ingelogde webapp bevatten geen analyse- of advertentiecode.

Offline

  • iPhone, iPad en Mac: je kunt zonder verbinding lezen en schrijven. Nieuwe en gewijzigde berichten worden eerst versleuteld, op het apparaat bewaard en verstuurd zodra je weer online bent, als cloudsync actief is.
  • Web: de webapp heeft een verbinding nodig om te openen. Is hij al open en valt de verbinding weg, dan worden berichten die je opslaat versleuteld en in de browser bewaard tot je weer online bent. Schrijven op het web vereist een actieve proefperiode of Pro.

Offline kopieën zijn op dezelfde manier versleuteld als de kopieën op onze servers.

De webversie

De webapp versleutelt in je browser, met dezelfde methode en instellingen als de apps: AES-256-GCM via de ingebouwde Web Crypto van de browser, en Argon2id via een WebAssembly-bibliotheek.

Er is één belangrijk verschil. Een app uit de App Store is ondertekend en gecontroleerd voordat hij bij je komt, en blijft hetzelfde tot je hem bijwerkt. De webapp wordt elke keer dat je hem opent door onze server gestuurd. Als die server aangepaste code zou sturen, kan die code je passphrase lezen terwijl je hem typt. Als je de webversie gebruikt, vertrouw je bij elk bezoek ons en onze hostingpartij.

Een paar maatregelen beperken dit, maar nemen het niet weg. De site wordt alleen via HTTPS geleverd. Een Content Security Policy laat pagina's alleen verbinden met onze eigen site en de hierboven genoemde diensten, en alleen afbeeldingen van onze eigen site laden. Inline scripts zijn wel toegestaan, omdat het framework van de site die nodig heeft. We gebruiken geen Subresource Integrity.

Na het ontgrendelen bewaart de webapp je dagboeksleutel in de opslag van de browser, in een vorm die de pagina kan gebruiken maar niet kan lezen of kopiëren. Het tabblad kan hem gebruiken tot je het dagboek vergrendelt, uitlogt of het tabblad sluit. Er is geen automatische time-out. Uitloggen verwijdert alle bewaarde sleutels, maar laat de versleutelde kopieën van je berichten in de browser staan.

Wil je het sterkere model, gebruik dan de app voor iPhone, iPad of Mac.

Als je je passphrase kwijtraakt

Er is geen reset en geen herstel. Wij hebben je passphrase en je dagboeksleutel niet, dus we kunnen je dagboek niet voor je openen, en niemand anders ook. Dat is bewust: een ingang voor ons zou ook een ingang voor anderen zijn. Zonder de passphrase zijn je berichten niet meer te lezen. Je kunt je account verwijderen en een nieuw account beginnen.

  • Bewaar je passphrase op een plek die alleen jij beheert, zoals een wachtwoordmanager of een opgeschreven notitie op een veilige plek.
  • Face ID en Touch ID vervangen hem niet. Je hebt de passphrase nodig op een nieuw apparaat, na uitloggen, en nadat een gezicht of vingerafdruk is toegevoegd of verwijderd.
  • Is een apparaat nog ontgrendeld, dan kun je daar nog een leesbare kopie exporteren. Behandel dat bestand als het dagboek zelf.
  • Een dagboek zonder account heeft geen passphrase. Het bestaat alleen op dat apparaat en in de back-ups ervan. Raak je het apparaat kwijt zonder back-up, dan is het dagboek weg; wij hebben geen kopie.

Waartegen PrivaLog niet beschermt

  • Iemand die je apparaat gebruikt terwijl het dagboek open is, of een open browsertabblad. In de apps blijft het dagboek open tot het op slot gaat, zoals hierboven beschreven.
  • Iemand die de toegangscode van je apparaat kent, als je zonder account schrijft. Dat dagboek gaat open zoals je apparaat ontgrendelt.
  • Malware, een kwaadaardige browserextensie of toetsenbord-app op je apparaat. Die ziet wat jij ziet en typt.
  • Iemand die je passphrase kent. Het wijzigen van de passphrase verandert de dagboeksleutel zelf niet. Wie de oude passphrase kende en een kopie van de oude vergrendelde sleutel bewaarde, kan je berichten dus nog lezen.
  • Een zwakke passphrase. Iedereen met een kopie van onze database kan proberen hem offline te raden. Argon2id maakt elke gok traag, maar een korte of veelgebruikte passphrase kan toch gevonden worden.
  • Metadata: je e-mailadres, de dagen waarop je schreef, wanneer berichten zijn aangemaakt en gewijzigd, hoeveel het er zijn, je abonnementsstatus, en IP-adressen in de logs van onze dienstverleners.
  • Leesbare exports. Pdf-, Markdown-, KML- en leesbare JSON-bestanden zijn platte tekst. Wie het bestand krijgt, kan het lezen. Versleutelde back-ups zijn niet leesbaar zonder je dagboeksleutel.
  • Schermafbeeldingen, gekopieerde tekst en alles wat de app verder verlaat.
  • Aangepaste code die naar de webapp wordt gestuurd, zoals hierboven beschreven.
  • Een server die gegevens achterhoudt. Die kan een bericht niet veranderen zonder dat de app het merkt, en het niet naar een andere dag of een ander account verplaatsen. Hij kan wel berichten verwijderen, of een oudere versie van een bericht teruggeven.
  • Zoekopdrachten en locaties die je naar Apple Kaarten of OpenStreetMap stuurt als je een plaats toevoegt.

Technische details

Berichten

  • AES-256-GCM met een nonce van 96 bits en een authenticatietag van 128 bits. Voor elke versleuteling wordt een nieuwe willekeurige nonce gemaakt; nonces worden nooit bewust hergebruikt.
  • De platte tekst is een JSON-object met de velden van het bericht. Additional authenticated data koppelt elke ciphertext aan het account, het bericht en de datum: {"v":1,"user_id":…,"entry_id":…,"entry_date":…,"crypto_schema_version":…}

Sleutels

  • Dagboeksleutel (DEK): 256 bits uit de veilige willekeurgenerator van het systeem.
  • Sleutelversleutelingssleutel (KEK): Argon2id(passphrase, salt). De salt is 128 willekeurige bits.
  • Argon2id versie 1.3 (0x13), geheugen 65.536 KiB (64 MiB), 3 iteraties, parallellisme 1, uitvoer van 32 bytes. Hetzelfde op elk platform. De instellingen worden per account bewaard.
  • Sleutelomhulling: AES-256-GCM-versleuteling van de DEK met de KEK, met een eigen willekeurige nonce van 96 bits en zonder additional data.
  • Ontgrendelcontrole: AES-256-GCM-versleuteling van een vaste tekst met de DEK, met een eigen willekeurige nonce.
  • Bij het wijzigen van de passphrase worden een nieuwe salt en KEK gemaakt en wordt dezelfde DEK opnieuw omhuld. Berichten worden niet opnieuw versleuteld.
  • Dagboeken die zijn gemaakt voordat sleutelomhulling bestond, gebruiken de uitvoer van Argon2id zelf als DEK. Die wordt in hetzelfde formaat omhuld bewaard.

Bibliotheken

  • iPhone, iPad en Mac: Apple CryptoKit voor AES-GCM; Argon2Swift op de referentie-implementatie van Argon2 (phc-winner-argon2); het Security-framework voor willekeurige bytes en de sleutelhanger; LocalAuthentication voor Face ID en Touch ID.
  • Web: de Web Crypto API voor AES-GCM en willekeurige bytes; hash-wasm (WebAssembly) voor Argon2id.

Opslag op het apparaat

  • Dagboek met account, ontgrendelen met Face ID of Touch ID: een sleutelhanger-item dat alleen leesbaar is terwijl het apparaat ontgrendeld is (kSecAttrAccessibleWhenUnlockedThisDeviceOnly), nooit gesynchroniseerd of teruggezet op een ander apparaat, en alleen nadat Face ID of Touch ID is gelukt (biometryCurrentSet). Op apparaten zonder biometrie kan in plaats daarvan de toegangscode worden gekozen (userPresence).
  • Dagboek zonder account: de DEK is een sleutelhanger-item dat leesbaar is terwijl het apparaat ontgrendeld is (kSecAttrAccessibleWhenUnlocked), zonder toegangsbeperking, en zit daardoor in versleutelde apparaatback-ups. Voordat de app het dagboek opent, vraagt ze om Face ID, Touch ID of de toegangscode (deviceOwnerAuthentication). Berichten gebruiken hetzelfde formaat, met de willekeurige ID van het dagboek in het veld user_id.
  • Verhuizen naar een account: elk bericht wordt ontsleuteld, opnieuw versleuteld met de account-ID in de additional authenticated data, en gecontroleerd door het te ontsleutelen voordat het wordt geüpload. Bij een nieuw account blijft de DEK dezelfde; bij samenvoegen met een bestaand account worden berichten versleuteld met de DEK van dat account. Lokale gegevens worden pas verwijderd als elk bericht bevestigd is en elke dag met een bericht op beide plekken is afgehandeld.
  • Offline kopieën: alleen ciphertext, in de eigen opslag van de app op Apple-apparaten en in IndexedDB in de browser.
  • Websessie: de DEK is een niet-exporteerbare Web Crypto-sleutel in IndexedDB; sessionStorage bevat alleen een willekeurige ID voor het tabblad. Sleutels van tabbladen die zonder vergrendelen zijn gesloten, blijven staan tot de volgende ontgrendeling of uitlog in die browser.

Server

  • Row-level security in Postgres beperkt elke tabel tot de rijen van het ingelogde account.
  • Alle verbindingen gebruiken HTTPS. Deze site stuurt een Strict-Transport-Security-header.

Een beveiligingsprobleem melden

Vind je een beveiligingsprobleem, mail dan naar privacy@nextdevstudio.com. Beschrijf de stappen om het te reproduceren, en geef ons redelijk de tijd om het op te lossen voordat je details publiceert.

Laatst bijgewerkt

14 oktober 2026. Als we veranderen hoe versleuteling, opslag of externe diensten werken, werken we deze pagina bij. Zie ook het privacybeleid.

Terug naar home