“We bewaren je wachtwoord niet” op een webpagina zetten kost precies evenveel als er iets anders neerzetten: niets. Het is een zin, geen garantie. Wie de waarheid spreekt typt hem net zo makkelijk als wie dat niet doet, en van jouw kant van het scherm zien de twee er identiek uit.
Dat is het fundamentele probleem van elke site die om een wachtwoord vraagt om het te “analyseren”. Al is de dienst onberispelijk — schone code, goede bedoelingen, fatsoenlijke mensen —, jij kunt het onmogelijk weten. De server is een dichte doos. Je stuurt het gevoeligste gegeven dat je hebt en vertrouwt erop dat er aan de andere kant gebeurt wat ze je beloofd hebben.
En er is een detail dat vaak over het hoofd wordt gezien: een belofte om niets te bewaren beschermt ook niet tegen wat buiten de belover om gaat. Een eerlijke server kan logs hebben die niemand nakeek, een proxy ertussen, een automatische back-up, een nieuwe collega of gewoon een slechte dag. Het wachtwoord is je machine al uit. Wat daarna gebeurt ligt buiten jouw bereik en vaak ook buiten het hunne.
Het enige antwoord waarvoor je niets hoeft te geloven
De oplossing is niet beter beloven. Het is het gegeven niet nodig hebben.
Als je wachtwoord de browser nooit verlaat, wordt de vraag “wat doen ze ermee?” betekenisloos. Er is geen “ze”. Er is geen server die het ontvangt, geen log waarin het opduikt, geen back-up die het bevat, geen medewerker die het kan lezen. Vertrouwen wordt niet beter beheerd: het verdwijnt uit het probleem.
Dat is wat password.es doet. De checker analyseert wat je typt in je eigen browser, met je eigen processor. De tekst die je intikt reist nergens heen, want er is nergens om heen te reizen.
Waar het toeval vandaan komt
De generator werkt volgens hetzelfde idee. Voor een willekeurig wachtwoord heb je toeval nodig, en dat kun je op twee manieren krijgen: je vraagt het aan een server of je vraagt het aan de browser. Het aan een server vragen zou absurd zijn: de server zou het wachtwoord eerder kennen dan jij.
Dus vragen we het aan de browser, met crypto.getRandomValues(). Dat is de
standaard-API van het webplatform voor cryptografisch toeval — precies waarvoor
die bestaat, tegenover Math.random(), dat prima is om kaarten te schudden in
een spelletje en nergens voor deugt wat moet standhouden tegen iemand met
belangstelling. Wie het toeval produceert is de browser zelf, op jouw machine.
Wij komen er niet aan te pas: het resultaat verschijnt op je scherm en blijft
daar.
Hoe je het nakijkt zonder mij te geloven
Alles hierboven is voorlopig nog steeds een alinea, geschreven door dezelfde mensen die de site hebben gemaakt. Oftewel: precies datgene waarvan ik zei dat je het moest wantrouwen. Dus geloof me niet. Kijk zelf.
Open de ontwikkelaarstools van je browser — F12, of Cmd+Option+I op een Mac
—, ga naar het tabblad Netwerk (Network), laat het openstaan en ga naar de
checker. Je ziet de pagina laden. Leeg nu de lijst, klik in het wachtwoordveld en
typ.
Dit is wat je gaat zien, en hier past nauwkeurigheid beter dan verkooppraat:
- Zodra je in het veld klikt, gaat er één verzoek uit. Dat is niet je
wachtwoord — je hebt nog niets getypt —: het is de bibliotheek die de analyse
doet, een bestand met de naam
zxcvbn-nl-be.min.jsdat de lijsten met woorden, namen, toetsenbordpatronen en bekende wachtwoorden bevat waartegen wordt vergeleken. Het wordt van password.es gedownload zodra je het veld aanraakt, zodat het binnen is terwijl je typt. Het komt van hetzelfde domein, het is een statisch bestand en het is voor iedereen die deze pagina opent hetzelfde — de site heeft meerdere versies per taal, en deze laadt de Nederlandse. - Vanaf dat moment blijft de lijst stilstaan, wat je ook typt. Eén letter, twintig, wissen, opnieuw beginnen, een lange tekst plakken. Nul verzoeken. De teller beweegt niet. Het woordenboek zit al in je browser en het zoeken gebeurt tegen het geheugen van je eigen machine.
Dat onderscheid is het hele verschil. Het is niet dat je erop vertrouwt dat het verzoek je wachtwoord niet meeneemt: er is geen verzoek. Je hoeft niets te interpreteren en geen code te begrijpen; je hoeft alleen te kijken naar een teller die niet oploopt.
De volledige inventaris, inclusief de haken en ogen
Nu het argument “kijk zelf maar” is, zou het raar zijn om te verzwijgen wat je bij dat kijken zou vinden. De eerlijke inventaris van password.es:
Er is geen analytics. Geen Google Analytics, geen discreet alternatief, geen pixel. Er was er één en die is van alle pagina’s gehaald. Er zijn geen cookies. De site schrijft er geen enkele. Er wordt wél één ding in je browser bewaard: of je liever een licht of donker thema hebt, in de lokale opslag van je eigen apparaat. Dat wordt nooit ergens naartoe gestuurd en je kunt het wissen vanuit diezelfde inspector. Er is geen registratie, er zijn geen accounts en geen formulieren: er is nergens om een gegeven achter te laten, ook al zou je willen.
En de haak, want die is er: de pagina haalt bij het laden twee lettertypen op bij de servers van Google. Dat betekent dat Google ziet dat iemand met jouw IP een pagina van dit domein heeft geladen, zoals op ontelbaar veel sites. Het ziet niet wat je typt — dat verzoek gaat eerder en wordt niet herhaald —, maar het is wel een verzoek aan een derde partij, je zult het in datzelfde tabblad Netwerk zien staan en het zou nergens op slaan om je te vertellen dat je de inspector moet openen en het tegelijk niet te noemen. Het staat op de lijst met dingen die nog opgelost moeten worden.
Waarom we dit vertellen
We hadden ook “nul verzoeken, totale privacy” kunnen schrijven en tevreden achterover kunnen leunen. Het had beter geklonken en het was in de details onwaar geweest: er is één woordenboekverzoek en er zijn lettertypen. Een argument dat omvalt zodra iemand het nakijkt was geen argument: het was reclame.
De precieze versie is minder rond en houdt stand onder onderzoek: wat jij typt verlaat je browser niet, en dat zie je in dertig seconden met een gereedschap dat je al geïnstalleerd hebt.
En let op, want dit krijg je terug als algemene maatstaf. De volgende keer dat een site om je wachtwoord vraagt, waarvoor dan ook, open dat tabblad en kijk of er een verzoek verschijnt zodra je een toets indrukt. Verschijnt het, dan is je wachtwoord vertrokken. Het maakt niet uit wat de privacyverklaring zegt, hoe mooi het slotje bij het formulier is of hoe degelijk het bedrijf oogt. En als de site je het geanalyseerde wachtwoord toont na een draaiend wieltje, dan weet je waar het langs is geweest.
De regel waar in de beveiliging het minst over gepraat wordt gaat niet over wachtwoorden: hij gaat over verificatie. Vertrouwen is prima. Nakijken is beter, en hier is het gratis.
Bronnen: de architectuur van password.es zelf, verifieerbaar met de inspector
van elke browser — de checker downloadt van het eigen domein, bij het focussen
van het veld, de analysebibliotheek met haar lijsten (zxcvbn-nl-be.min.js) en
stuurt geen enkel verzoek terwijl je typt ·
crypto.getRandomValues(), de standaard-API van de Web Crypto API voor
cryptografisch toeval · de code van de site bevat geen analytics, pixels of
cookies; het enige lokaal opgeslagen gegeven is de themavoorkeur · de lettertypen
worden geserveerd vanaf Google Fonts.