beveiligingcryptografiewachtwoorden

OneTimeSecret vs PrivateNote: Why Where You Encrypt Matters

OneTimeSecret encrypts on its servers. PrivateNote encrypts before the secret leaves your device.

Bijgewerkt 23 september 20266 minuten lezenPrivateNote.ai

Both products deliver a temporary secret link, but their trust models are fundamentally different. OneTimeSecret performs encryption on its servers, which means the service receives the secret in plaintext and must be trusted to handle it securely before encryption. If a passphrase is used, that passphrase is also submitted to the service as part of the server-side protection mechanism. PrivateNote encrypts the secret locally before it leaves the sender’s device. The service receives ciphertext rather than the plaintext secret, and an optional passphrase protects the client-side encryption key locally, adding protection if the link itself is exposed.

Belangrijkste punten

  • Beide versleutelen tijdelijke links. Het verschil is waar de versleuteling plaatsvindt.
  • OneTimeSecret versleutelt op de server, dus het geheim en de wachtwoordzin bereiken de dienst bij aanmaken en opnieuw bij ophalen.
  • PrivateNote versleutelt eerst op het apparaat. De sleutel blijft aan de clientzijde; een wachtwoordzin wikkelt die lokaal in als de link blootligt.
  • Dat verschuift de vertrouwensgrens: de server van PrivateNote heeft geen platte tekst nodig. Een gestolen database bevat de sleutels niet; een gecompromitteerde browser tijdens gebruik is een ander risico.

OneTimeSecret en PrivateNote lossen hetzelfde praktische probleem op: een wachtwoord, API-sleutel, herstelcode of vertrouwelijke notitie via een tijdelijke link versturen in plaats van plaintext in e-mail of chat achter te laten. De ontvanger opent de link, en de opgeslagen payload kan verdwijnen nadat die is gelezen of wanneer de vervaltijd is bereikt.

Beide producten versleutelen de payload. Het belangrijke verschil is waar die versleuteling plaatsvindt.

OneTimeSecret beschrijft zijn architectuur als server-side versleuteling. De plaintext bereikt OneTimeSecret voordat die wordt versleuteld. PrivateNote versleutelt eerst lokaal, zodat de dienst ciphertext ontvangt in plaats van de plaintext-payload. Dat verschil bepaalt de cryptografische vertrouwensgrens.



OneTimeSecret: server-side versleuteling

In de gewone OneTimeSecret-flow stuurt de verzender het geheim over TLS. De applicatie ontvangt de plaintext, versleutelt die op de server en bewaart de versleutelde payload.

Dit biedt zinvolle bescherming voor opgeslagen data. Alleen versleutelde opslag bemachtigen onthult de inhoud niet per se wanneer het materiaal dat voor ontsleuteling nodig is, voor de aanvaller niet beschikbaar is.

De architecturale afweging zit vóór de opslag. TLS beschermt het geheim terwijl het tussen browser en OneTimeSecret reist, maar de applicatie moet de plaintext verwerken om die te versleutelen. De applicatieserver zit daardoor binnen de cryptografische vertrouwensgrens.

Een kwaadaardig of gecompromitteerd applicatieproces op dat moment zou het geheim kunnen benaderen voordat het voor opslag wordt versleuteld. Client-side versleuteling verwijdert deze specifieke afhankelijkheid door het geheim te versleutelen voordat het de dienst bereikt.


De passphrase van OneTimeSecret verandert de versleutelingsgrens niet

De documentatie van OneTimeSecret beschrijft een optionele passphrase. Wanneer een passphrase wordt gebruikt, zegt OneTimeSecret dat het geheim op hun servers wordt versleuteld met de door de verzender opgegeven passphrase. Ze zeggen dat ze de passphrase zelf niet opslaan; in plaats daarvan bewaren ze een bcrypt-hash om de passphrase bij ophalen te verifiëren. Volgens hun documentatie kan die hash zelf het geheim niet ontsleutelen, en kan het opgeslagen, met passphrase beschermde geheim niet zonder de oorspronkelijke passphrase worden ontsleuteld.

Ophalen gebruikt dezelfde server-side grens. De ontvanger stuurt de passphrase over TLS naar OneTimeSecret. De dienst verifieert die en voert de ontsleuteling op de server uit voordat de plaintext wordt teruggegeven.

Dit betekent dat het applicatieproces toegang heeft tot geheim en passphrase wanneer versleuteling plaatsvindt, en opnieuw de passphrase en de resulterende plaintext verwerkt tijdens ophalen. Een kwaadaardig of gecompromitteerd applicatieproces op een van die momenten zou die informatie mogelijk kunnen vastleggen. Dit is een gevolg van waar versleuteling en ontsleuteling plaatsvinden, geen bewering dat OneTimeSecret die waarden opslaat of misbruikt.

De openbare documentatie van OneTimeSecret legt op zichzelf niet elk detail van de interne sleutelhiërarchie vast—bijvoorbeeld precies hoe server-side sleutelmateriaal, per-geheim-sleutels, sleutelafleiding en de opgegeven passphrase worden gecombineerd. Voor deze vergelijking is het niet nodig over die implementatiedetails te speculeren. De relevante gedocumenteerde eigenschap is dat versleuteling en ontsleuteling aan de dienstkant plaatsvinden.

OneTimeSecret

Geheim + passphrase

Server

Ciphertext

Het geheim dat je wilt versturen, en de passphrase wanneer je er een instelt, gaan beide over TLS naar de server. Versleuteling draait op die server. Wat in opslag achterblijft, is ciphertext.

Self-hosting kan dat serververtrouwen redelijk maken

OneTimeSecret is open source. Een organisatie kan een eigen instantie binnen een enterprise-beveiligingsperimeter draaien, in plaats van geheimen naar de openbare dienst te sturen.

In die uitrol is de applicatieserver vertrouwen hetzelfde als vertrouwen in infrastructuur die de organisatie al beheert. De plaintext bereikt die server nog steeds, omdat versleuteling daar nog steeds plaatsvindt. De partij aan de andere kant van de grens bestaat uit de eigen hosts, operators en backups van de organisatie. Voor een team dat die systemen al accepteert als deel van het pad dat een geheim aflegt, kan server-side versleuteling een redelijke keuze zijn. Het verkleint het verschil tussen de server-side en client-side dreigingsmodellen, omdat de operator geen externe dienst meer is.


PrivateNote versleutelt vóór de upload

Een standaard PrivateNote wordt versleuteld vóór de upload. De browser van de verzender, of een lokaal CLI-, Chrome-extensie-, editor-extensie- of MCP-proces, genereert een willekeurige sleutel en versleutelt de payload met AES-256-GCM. Alleen ciphertext wordt geüpload. TLS draagt die ciphertext van de browser naar de Cloudflare-worker van PrivateNote. De ontsleutelingssleutel komt in het URL-fragment, het deel na #, bijvoorbeeld https://privatenote.ai/note/abc123#…. Het fragment wordt client-side verwerkt en zit niet in het HTTPS-verzoek (RFC 3986, §3.5; URL Standard). De worker ontvangt een notitie-identifier en geeft ciphertext terug over dezelfde TLS-verbinding. De browser houdt het fragment vast en ontsleutelt lokaal.



De resterende vertrouwensaanname van de webclient

Client-side versleuteling in een browser is geen trustless webapplicatie. De cryptografie kan lokaal draaien terwijl de JavaScript die die implementeert, door de site wordt geleverd. De browser vertrouwt de code die hij voor die sessie ontvangt.

Iemand die die JavaScript kan wijzigen — via de applicatie, een CDN of de deployment-pipeline — zou de client kunnen veranderen en sleutels in een toekomstige browsersessie kunnen vastleggen. Dat is een ander falen dan een database stelen. Een opslagcompromis stelt ciphertext bloot. Kwaadaardige codelevering valt het endpoint aan terwijl de sleutel daadwerkelijk aanwezig is.

Een latere databasedump kan geen client-side sleutels fabriceren die daar nooit waren opgeslagen. Een actief gecompromitteerde client kan geheimen aanvallen die tijdens die sessie worden verwerkt. Dezelfde aanname staat in het dreigingsmodel van PrivateNote: de geleverde applicatiecode is niet kwaadaardig aangepast, en de apparaten van verzender en ontvanger worden vertrouwd op het moment van versleuteling en ontsleuteling.

Geïnstalleerde software verkleint die afhankelijkheid van een zojuist gedownloade pagina. Een CLI, editor-extensie of native app draait code die je hebt geïnstalleerd. Die clients hangen nog steeds af van het besturingssysteem, ondertekening, dependencies en het updatekanaal. De developer tools gebruiken dezelfde scheiding als de browser: lokaal versleutelen, ciphertext uploaden, de sleutel in het fragment laten.


Levensduur en vertrouwelijkheid

Een eenmalige link beantwoordt twee aparte vragen. Hoe lang mag de versleutelde payload bestaan? En wie kan die ontsleutelen zolang die bestaat? Vernietigen na ophalen of verval verkort het venster. Het bepaalt niet wie hem tijdens dat venster kon lezen. Levensduur en vertrouwelijkheid versterken elkaar. De ene vervangt de andere niet.

Het onderscheid is het scherpst wanneer de payload autoriteit is: API-sleutels, databasecredentials, cloudtokens, herstelcodes, infrastructuurwachtwoorden. Een dienst voor geheimen delen bestaat omdat de verzender minder systemen met die informatie wil belasten. Als de tussenpartij alleen een opaak versleuteld object hoeft te dragen, verval af te dwingen en het te verwijderen, kan de server dat werk doen zonder het geheim of de sleutel die het opent te ontvangen.


Waar de grens ligt

„Versleuteld” vertelt je niet waar de vertrouwensgrens ligt. De standaard die de moeite waard is, is een minimale vertrouwensgrens: het principe van least privilege toegepast op wie plaintext moet zien. In moderne cryptografische engineering is het doel niet alleen te vertrouwen dat een server zich netjes gedraagt, maar de wiskundige noodzaak van vertrouwen in de eerste plaats te verminderen.

OneTimeSecret beschrijft een server-side versleuteld systeem. Met passphrase-bescherming zeggen ze dat het opgeslagen geheim daarna niet zonder de passphrase kan worden ontsleuteld, en dat een servercompromis het geheim veilig zou laten zolang die passphrase onbekend blijft. Een zwakke passphrase kan met brute force worden aangevallen. Als die zwak is, kan dat compromis het geheim alsnog herstelbaar maken. De plaintext en de passphrase bereiken OneTimeSecret bij aanmaak, omdat versleuteling op hun servers gebeurt, en de passphrase wordt bij ophalen teruggezonden zodat die servers kunnen ontsleutelen.

PrivateNote maakt een andere architecturale keuze. De payload wordt versleuteld voordat die de dienst bereikt, en de standaard payloadsleutel blijft client-side. Een passphrase, wanneer je er een instelt, beschermt die client-side sleutel bovendien lokaal als het kanaal dat de link draagt, is gecompromitteerd. Die wordt niet naar PrivateNote gestuurd.

OneTimeSecret versleutelt je geheim. De client die de dienst van PrivateNote gebruikt, versleutelt het voordat de dienst het ontvangt. Dat onderscheid hangt niet af van de aanname dat een van beide providers kwaadaardig is. Het reduceert de vraag tot architectuur: hoeveel systemen hebben toegang tot plaintext nodig om de dienst te laten werken?


Veelgestelde vragen

Slaat OneTimeSecret het geheim in plaintext op?

Hun documentatie zegt nee. Ze versleutelen op hun servers. Met een passphrase zeggen ze dat ze het versleutelde geheim en een bcrypt-hash van de passphrase opslaan, niet de passphrase, en dat de hash het geheim niet kan ontsleutelen.

Als ik een passphrase op OneTimeSecret instel, is het geheim dan verborgen voor hun servers?

Niet tijdens aanmaak, en niet bij ophalen. OneTimeSecret zegt dat geheim en passphrase aan hun server worden aangeboden zodat de server de versleuteling kan uitvoeren. Wanneer de ontvanger de link opent, stuurt die de passphrase over TLS terug, en ontsleuteling draait op de servers van OneTimeSecret voordat de plaintext wordt teruggegeven. Na versleuteling zegt OneTimeSecret de plaintext-passphrase te verwerpen, alleen een bcrypt-hash te bewaren, en het opgeslagen geheim niet zonder de oorspronkelijke passphrase te kunnen ontsleutelen.

Wat beschermt een PrivateNote-passphrase?

De client-side sleutel, als het kanaal dat de link draagt, is gecompromitteerd. De notitie zelf is al op je apparaat versleuteld met AES-256-GCM. Argon2id leidt lokaal een wrapping-sleutel af uit de passphrase, en die wrapping-sleutel versleutelt de sleutel van de notitie. De link bevat dan een wrapped key. PrivateNote ontvangt ciphertext en een salt. Het ontvangt niet de passphrase of de ruwe sleutel. Een standaardnotitie is zelfs zonder passphrase versleuteld vóór de upload. Stuur de passphrase via een apart kanaal van de link.

Kan client-side versleuteling beschermen tegen een gecompromitteerde PrivateNote-server?

Een compromis van opgeslagen data of de API: ja, in de zin dat client-side versleuteling ongelezen payloads isoleert, omdat de server de standaard payloadsleutel niet heeft. Een latere databasedump kan geen sleutels fabriceren die daar nooit waren opgeslagen. Kwaadaardige clientcode-levering: nee. Een aanvaller die de JavaScript voor een toekomstige browsersessie kan wijzigen, zou kunnen proberen de sleutel vast te leggen terwijl die aanwezig is. Geïnstalleerde clients verminderen die afhankelijkheid van een zojuist gedownloade pagina.


Primaire bronnen

Architectuurinformatie over OneTimeSecret is getoetst aan de openbare documentatie op 23 september 2026. Productimplementaties en documentatie kunnen wijzigen.

Versleutel voordat het geheim het apparaat verlaat

Schrijf de notitie in de browser. De client versleutelt lokaal, zet de sleutel in de link en kan die sleutel beschermen met een passphrase die de server nooit ontvangt.

PrivateNote on LaunchNest