iOS app is in testing phase. Please help by testing via TestFlight 🙏🏻 Join the beta here

Uitgangspunten

Zes beloften die het ontwerp voor je nakomt.

  • Alleen jij kunt ontsleutelen

    Versleutelen en ontsleutelen gebeurt op je apparaat. Servers, hostingpartijen en wij kunnen je data niet lezen.

  • Twee geheimen, niet één

    Je hoofdwachtwoord én een geheime sleutel van je apparaat. Eén van de twee stelen is niet genoeg.

  • Alles versleutelen

    Niet alleen wachtwoorden: ook titels, URL’s, gebruikersnamen, notities en kluisnamen zijn versleuteld.

  • Je data blijft van jou

    Het 2Secret-project bewaart geen kluizen. Houd de jouwe op je apparaat of op je eigen server.

  • Open voor controle

    Alle code is opensource onder de MIT- of Apache 2.0-licentie. Iedereen kan dus nagaan wat die doet.

  • Eerlijk over grenzen

    We vertellen je eerlijk wat niet beschermd is en wat nog niet af is.

Two-Secret Key Derivation

Twee geheimen, zodat een gestolen database niets waard is.

Wordt een kluis alleen door een hoofdwachtwoord beschermd, dan kan iemand die de data van de server steelt in alle rust miljarden pogingen doen, en zwakke of hergebruikte wachtwoorden gaan dan uiteindelijk om.

2Secret voegt een tweede geheim toe: de geheime sleutel, 130 willekeurige bits die op je apparaat worden gemaakt. Je sleutels worden afgeleid van het hoofdwachtwoord én de geheime sleutel samen. De geheime sleutel gaat nooit naar de server. Een kopie van de serverdatabase bevat dus niet wat een aanvaller nodig heeft, hoeveel pogingen die ook doet.

Voor wie het technisch wil weten
  • Het hoofdwachtwoord wordt versterkt met Argon2id, met 64 MiB geheugen en 3 rondes.
  • Het wordt gecombineerd met de geheime sleutel van 130 bits om je sleutels af te leiden.
  • Hoofdwachtwoorden moeten minstens 12 tekens hebben en als ‘goed’ beoordeeld worden.
  • Apps leiden geen sleutels af, en servers bewaren geen accounts, met Argon2id-instellingen onder 19 MiB en 2 rondes. Een kwaadwillende of verouderde server kan je app dus niet overhalen tot een zwakke sleutelafleiding.
  • De server bewaart alleen een Argon2id-hash van een authenticatiesleutel, nooit iets waarmee je data te ontsleutelen is.
Hoe je twee geheimen een ontgrendelsleutel worden die je apparaat nooit verlaat Je hoofdwachtwoord wordt met Argon2id versterkt en gecombineerd met je geheime sleutel van 130 bits, die op je apparaat wordt gemaakt. Samen leveren ze een ontgrendelsleutel op. Die blijft op je apparaat en opent een aparte sleutel voor elke kluis. Je kluizen bereiken de server alleen als versleutelde gegevens. Jouw apparaat Hoofdwachtwoord Argon2id 64 MiB · 3 rondes Geheime sleutel 2S-7QK4P2-… 130 bits, gemaakt op dit apparaat. Nooit verstuurd. Ontgrendelsleutel Verlaat dit apparaat nooit Kluis Kluis Kluis c1f0…9a7e 4be2…0d13 Server Alleen versleutelde kluizen
Van je twee geheimen naar een ontgrendelsleutel die je apparaat nooit verlaat.

Geheime sleutel en noodkit

Bewaar je noodkit op een veilige plek.

Je geheime sleutel ziet eruit als 2S-XXXXXX-XXXXX-XXXXX-XXXXX-XXXXXX. Je hoeft hem niet te onthouden: je apparaten bewaren hem, en hij staat op je noodkit die je krijgt als je je account aanmaakt.

Je hebt de geheime sleutel samen met je hoofdwachtwoord nodig om op een nieuw apparaat in te loggen. Omdat niemand anders je kluis kan lezen, kan ook niemand anders je hoofdwachtwoord resetten of je geheime sleutel voor je terughalen.

  • Print hem, of bewaar hem offline, bijvoorbeeld in een kluis of bij belangrijke papieren
  • Bewaar hem niet op dezelfde plek als je hoofdwachtwoord
  • Deel hem nooit: niemand van 2Secret zal er ooit om vragen

Versleuteling

Elk item op je apparaat op slot, elke kluis met een eigen sleutel.

Voordat er iets je apparaat verlaat, wordt elk item versleuteld met XChaCha20-Poly1305 en een sleutel van 256 bits. Elke kluis heeft een eigen sleutel. Deel je één kluis, dan blijft een andere dus dicht.

En het gaat niet alleen om wachtwoorden. Titels, URL’s, gebruikersnamen, notities en kluisnamen zijn ook versleuteld. LastPass liet websiteadressen juist leesbaar op zijn servers staan.

Voor wie het technisch wil weten
  • Geauthenticeerde versleuteling: XChaCha20-Poly1305 merkt elke wijziging aan de versleutelde data.
  • Vast aan zijn plek: elk versleuteld stuk data draagt ‘associated data’ die het aan zijn plek koppelt. Een server kan een versleuteld item dus niet naar een andere kluis verplaatsen, of het ene item voor het andere verwisselen, zonder dat ontsleutelen mislukt.
  • Opvulling: data wordt opgevuld tot vaste maten, zodat de server de precieze grootte van je items niet leert.
De versleutelingshiërarchie van 2Secret Je hoofdwachtwoord en geheime sleutel worden door de Two-Secret Key Derivation omgezet in twee sleutels: een authenticatiesleutel, waarvan de server alleen een Argon2id-hash bewaart, en een ontgrendelsleutel die je apparaat nooit verlaat. De ontgrendelsleutel opent je accountsleutel van 256 bits, en die opent een aparte sleutel voor elke kluis. Kluissleutels versleutelen elk item met XChaCha20-Poly1305, vastgemaakt aan zijn plek. Je kluizen bereiken de server alleen versleuteld. Jouw apparaat Hoofdwachtwoord Alleen in je hoofd Geheime sleutel 130 bits, op je apparaten Two-Secret Key Derivation Argon2id (64 MiB, 3×) + geheime sleutel Authenticatiesleutel Bewijst wie je bent Ontgrendelsleutel Verlaat je apparaat nooit Accountsleutel 256 bits, versleuteld Kluissleutels Eén per kluis Items XChaCha20-Poly1305 Vast aan hun plek Opgevuld tot vaste maten Server Bewaart een Argon2id-hash van de authenticatiesleutel en versleutelde data. Niets dat hij kan openen.

Zero knowledge

Wat de server wel en niet kan zien.

Synchroniseer je, dan praten je apparaten met een 2Secret-server: een die je zelf draait, of een die iemand draait die je vertrouwt. Dit kan die server, en wie hem beheert, wel en niet zien.

Gegevens en of de server ze kan zien
Gegevens Zichtbaar voor de server? Waarom
Je hoofdwachtwoord Nee Het verlaat je apparaat nooit.
Je geheime sleutel Nee Op je apparaat gemaakt en nooit verstuurd.
Wachtwoorden, notities, kaartnummers en andere inhoud Nee Versleuteld met XChaCha20-Poly1305 vóór het uploaden.
Titels, URL’s, gebruikersnamen en kluisnamen Nee Ook versleuteld.
De precieze grootte van je items Nee Opgevuld tot vaste maten.
Je e-mailadres en weergavenaam Ja Nodig om in te loggen en te delen.
Je salt, Argon2id-instellingen en publieke sleutels Ja Nodig om nieuwe apparaten in te stellen en kluizen te delen. Niets daarvan kan iets ontsleutelen.
Een hash van je authenticatiesleutel Ja Een Argon2id-hash: genoeg om een aanmelding te controleren, nutteloos om te ontsleutelen.
Versleutelde data Ja Dat is wat hij bewaart, zonder de sleutels om het te openen.
Wat je via een link deelt, en de kluissleutels voor je noodcontacten Nee De sleutel van een link zit alleen in de link; de sleutels voor noodtoegang zijn versleuteld voor de publieke sleutels van je contacten.
Wanneer deel-links verlopen, hoe vaak ze nog open kunnen en of ze een wachtwoord hebben; je noodcontacten, hun wachttijden en verzoeken Ja Nodig om links uit te geven en te verwijderen, en om de wachttijd te bewaken.
Metadata: hoeveel kluizen en items je hebt, hun grootteklasse, wanneer ze veranderden, wie met wie een kluis deelt en met welke rol, IP-adressen Deels Dit heeft hij nodig om te synchroniseren en te delen, en zoals elke server ziet hij verkeer. Zie de beperkingen hieronder.

Draai je je eigen server, dan ben jij ‘de beheerder’, of degene die je vertrouwt om hem te hosten.

Server

Een server die zo weinig mogelijk weet.

  • Alleen versleutelde data

    Versleutelde data, een Argon2id-hash van een authenticatiesleutel en wat hij nodig heeft om je te laten inloggen en delen. Nooit een sleutel die iets ontsleutelt.

  • Beperkt aantal inlogpogingen

    Hooguit 10 mislukte inlogpogingen per account per 15 minuten.

  • Geen accounts opsporen

    Onbekende e-mailadressen krijgen vaste nepsalts, en mislukte inlogpogingen duren even lang als echte. De server verraadt dus niet wie een account heeft.

  • Beveiligde webkluis

    De webkluis wordt geleverd met een strikte Content-Security-Policy: geen inline scripts, geen eval, niet in een frame te laden.

Kwantumbestendig delen

Delen dat privé blijft, ook in een kwantumtoekomst.

Sommige aanvallers slaan nu versleuteld verkeer op, in de hoop het te ontsleutelen zodra kwantumcomputers krachtig genoeg zijn: ‘nu oogsten, later ontsleutelen’.

Deel je een kluis, dan pakt 2Secret de sleutel van die kluis voor de ander in met een combinatie van X25519 en ML-KEM-768, de post-kwantumstandaard die NIST als FIPS 203 publiceerde. Signal (PQXDH) en Apple (PQ3) doen het op dezelfde manier: een aanvaller moet ze allebei kraken.

Voor wie het technisch wil weten
  • De kluissleutel wordt ingepakt met hybride X25519 + ML-KEM-768.
  • De server geeft de ingepakte sleutel alleen door.
  • Bij de volgende synchronisatie van de ontvanger wordt de sleutel opnieuw ingepakt met diens eigen accountsleutel van 256 bits.
  • Rollen: kijker (lezen), bewerker (items wijzigen) en beheerder (ook leden beheren).
  • Iemand verwijderen geeft de kluis een nieuwe sleutel: alles wordt opnieuw versleuteld, dus wat daarna wordt toegevoegd of gewijzigd, is onleesbaar met de sleutel die diegene had. Beheerders kunnen de sleutel van een kluis ook zelf vervangen.
Kwantumbestendig kluizen delen Deel je een kluis, dan wordt de sleutel ervan voor de ontvanger ingepakt met een combinatie van X25519 en ML-KEM-768. De server geeft die ingepakte sleutel alleen door. De ontvanger pakt hem uit op het eigen apparaat en pakt hem bij de volgende synchronisatie opnieuw in met de eigen accountsleutel van 256 bits. Jij Kluissleutel De sleutel van de kluis die je deelt Ingepakt met een combinatie van X25519 ML-KEM-768 Server Geeft de ingepakte sleutel door, kan hem niet openen Degene met wie je deelt Uitgepakt op diens apparaat Met de eigen privésleutels voor X25519 en ML-KEM-768 Opnieuw ingepakt bij de volgende sync Met de eigen accountsleutel van 256 bits

Vingerafdrukken

Weet zeker met wie je deelt.

Elk account heeft een publieke sleutel met een korte vingerafdruk, zoals 3F9A-77C1-0B2E-91D4. Deel je een kluis, dan toont 2Secret de vingerafdruk van de ander in de ledenlijst; de ander vindt de eigen vingerafdruk in Instellingen. Vergelijk ze in het echt of tijdens een gesprek. Komen ze overeen, dan heeft niemand ertussen, zelfs geen gehackte server, een eigen sleutel ertussen geschoven.

Noodtoegang

Toegang voor iemand die je vertrouwt, na een wachttijd die jij kiest.

Je apparaat versleutelt de sleutel van elke kluis die van jou is voor elk noodcontact, op dezelfde kwantumbestendige manier als bij delen, en houdt dat bij elke synchronisatie bij. De server houdt die sleutels achter en kan ze niet openen. Vraagt een contact om toegang en weiger je niet binnen de wachttijd, dan maakt de server diegene kijker van die kluizen.

Voor wie het technisch wil weten
  • Tot tien contacten per account, elk met een wachttijd van 1 tot 90 dagen (1 tot 30 in de apps). Vergelijk hun vingerafdruk, net als bij het delen van een kluis.
  • Weiger je nadat de toegang al gegeven is, beëindig je die of verwijder je het contact, dan verdwijnt diegene uit je kluizen en geeft je apparaat die kluizen nieuwe sleutels.
  • Kluizen die anderen met jou delen, horen er nooit bij. Niemand krijgt je account, je hoofdwachtwoord of je geheime sleutel.
  • De server bewaakt de wachttijd: een server die met je contact samenwerkt, kan eerder toegang geven. Je kluizen zelf lezen kan hij niet.

Browserextensie

Automatisch invullen, zonder de risico’s.

Bij automatisch invullen zijn wachtwoordmanagers al eens de mist in gegaan: webpagina’s en verborgen frames die het invullen in gang zetten of gegevens uitlezen. De extensie van 2Secret is rond die lessen ontworpen.

  • Vult alleen in na een klik

    Nooit bij het laden van een pagina, nooit op de achtergrond.

  • Controleert vlak voor het invullen opnieuw

    De pagina en elk frame worden op het moment van invullen opnieuw vergeleken met de website van het item.

  • Herkent het echte domein

    Websites worden herkend op hun registreerbare domein met de Public Suffix List. Nagemaakte subdomeinen trappen er dus niet in.

  • Geen terugval naar http

    Een login die bij een https-site hoort, wordt nooit in een http-pagina ingevuld.

  • Logins blijven buiten de pagina

    Logins en eenmalige codes gaan nooit door een contentscript. Het kleine passkey-script leest niets van de pagina; het geeft alleen het passkey-verzoek door.

  • Jij beslist over passkeys

    Een website kan alleen om een passkey vragen. 2Secret opent een eigen venster waarin jij er een bewaart of gebruikt, of de browser een ander apparaat laat gebruiken.

Lessen van LastPass

Wat er elders misging, en hoe 2Secret ermee omgaat.

Aanvallers stalen versleutelde back-ups van LastPass-kluizen. De zwakke plekken die die lekken zo schadelijk maakten, hebben het ontwerp van 2Secret gevormd.

Fouten van LastPass vergeleken met 2Secret
Wat er bij LastPass misging Hoe 2Secret ermee omgaat
Gestolen back-ups van kluizen konden offline worden aangevallen; zwakke hoofdwachtwoorden vielen als eerste. De geheime sleutel voegt 130 willekeurige bits toe aan elk account: de serverdatabase alleen is waardeloos om wachtwoorden te raden.
Websiteadressen (URL’s) werden onversleuteld bewaard, waardoor zichtbaar was welke sites iedereen gebruikte. Titels, URL’s, gebruikersnamen, notities en kluisnamen zijn allemaal versleuteld; de grootte van items wordt verhuld.
Oude accounts hielden jarenlang 1 tot 5.000 PBKDF2-rondes. Argon2id (64 MiB, 3 rondes) vanaf dag één, met een afgedwongen minimum in de app en op de server.
Korte hoofdwachtwoorden (8 tekens) waren toegestaan. Minstens 12 tekens en een beoordeling ‘goed’.
Oudere kluizen gebruikten AES-ECB/CBC zonder bescherming van de integriteit. Geauthenticeerde versleuteling (XChaCha20-Poly1305), met elk versleuteld stuk data vast aan zijn plek.
Fouten in de browserextensie lieten webpagina’s en iframes het invullen in gang zetten of gegevens uitlezen. Alleen invullen na een klik, met de pagina en elk frame opnieuw gecontroleerd tegen het item. Pagina’s kunnen alleen om een passkey vragen, en dan opent 2Secret zodat jij beslist.
Toegang tot de opslag van de kluizen via een gehackte engineer legde alles bloot. De server heeft nooit een sleutel die iets ontsleutelt, en wie zelf host, houdt de eigen infrastructuur in handen.

Dezelfde vergelijking staat in de white paper over beveiliging, naast de rest van het ontwerp.

Eerlijke beperkingen

Waar 2Secret niet tegen beschermt, of wat het nog niet doet.

Geen beveiliging is perfect, en we vertellen je de grenzen liever zelf.

  • Nog geen onafhankelijke audit. De cryptografie gebruikt goed onderzochte algoritmes en de code is open voor controle, maar een onafhankelijk bureau heeft 2Secret nog niet doorgelicht.
  • De beheerder van de server ziet metadata. Die kan je kluis niet lezen, maar ziet wel je e-mailadres, wanneer je synchroniseert, hoeveel items je hebt en hun grootteklasse, welke accounts een kluis delen en welke IP-adressen verbinding maken.
  • De webkluis is zo betrouwbaar als de server die hem levert. Een kwaadaardige of gehackte server kan een aangepaste webapp sturen. De apps voor computer en telefoon, de extensie en de CLI hebben dat probleem niet.
  • Een gedeelde link kan worden gekopieerd. Wie een deel-link opent, kan bewaren wat diegene zag. Een server die gehackt is terwijl een link geldig is, kan een pagina sturen die de sleutel van de link lekt; links die snel verlopen en één keer open kunnen, beperken dat.
  • De server bewaakt de wachttijd van noodtoegang. Een server die met je noodcontact samenwerkt, kan diegene eerder toegang geven. Je kluizen zelf lezen kan hij nog steeds niet.
  • Een geïnfecteerd apparaat ziet wat jij ziet. 2Secret beschermt niet tegen malware die als jou draait op een ontgrendeld apparaat, of tegen een gehackt besturingssysteem of een gehackte browser: die kunnen het scherm, het geheugen en je toetsaanslagen uitlezen.
  • Geheim kwijt, kluis kwijt. Verlies je je hoofdwachtwoord of je geheime sleutel, dan kan niemand je data terughalen, ook de beheerder van de server niet. Dat is de prijs van het feit dat niemand anders hem kan lezen.
  • De TLS-verbinding bij het inloggen is misschien niet kwantumbestendig. Dat hangt af van je besturingssysteem of browser en de proxy vóór de server. De data daarbinnen is hoe dan ook end-to-end versleuteld.
  • Nog niet aanwezig: biometrisch ontgrendelen op Linux, Android en in de browser (daar is het hoofdwachtwoord nodig); passkeys aanmaken buiten de browserextensie, en ze gebruiken op Android en in de desktopapps; een Safari-extensie; automatisch invullen op Android.

De volledige, actuele lijst met beveiligingsbeperkingen staat in de white paper.

Controleer ons werk

Iets gevonden? Vertel het ons eerst.

We verwelkomen beveiligingsonderzoek. Meld kwetsbaarheden vertrouwelijk, zodat we ze kunnen oplossen voordat iemand risico loopt.

Beveiliging die je kunt controleren, gratis.