Goede wachtwoorden onthouden voor meerdere websites is extreem moeilijk. Daarvoor gebruiken we dan een wachtwoordkluis en vertrouwen er maar op dat die veilig is. Gelukkig bestaan er ook manieren om uit het hoofd goede wachtwoorden te 'berekenen'..

Koen Vervloesem

Elk van ons heeft tientallen wachtwoorden voor alle online diensten waar we een account hebben. Veel wachtwoorden zijn echter gemakkelijk te raden en we hergebruiken vaak hetzelfde wachtwoord op meerdere websites. Een aanval op een onveilige website of iemand die je wachtwoord kraakt, heeft dan ook onmiddellijk een grote impact en leidt er vaak toe dat je privé-informatie wordt gelekt.

De oplossing? Sterke wachtwoorden kiezen en voor elke website een ander. Een sterk wachtwoord is lang genoeg (minstens 16 tekens) en bestaat uit een willekeurige reeks van hoofdletters, kleine letters, cijfers, leestekens en speciale tekens. Maar wie krijgt zoiets onthouden? Misschien nog voor één website, maar toch niet voor tientallen...

Een oplossing daarvoor is dat je met een wachtwoordbeheerder werkt, zoals de onlinedienst LastPass [1] of de hardware-oplossing Mooltipass [2]. In PC-Active 297 bespraken we beide oplossingen. Dan hoef je maar één wachtwoord of pincode te onthouden, die voor je wachtwoordbeheerder.

Dat is een redelijk veilige oplossing, maar je bent wel afhankelijk van een externe dienst of apparaatje. Vertrouw je de makers volledig? Wat als er een beveiligingsfout in zit? Zo werd LastPass al meerdere keren geplaagd door lekken. Wat als er een oplossing zou bestaan om meerdere sterke wachtwoorden te onthouden, zonder dat je daarvoor externe partijen hoeft te vertrouwen?

passwordUit het hoofd
Zo'n oplossing bestaat. Professor Santosh Vempala [3] van het Georgia Institute of Technology in Atlanta ontwikkelde de laatste jaren verschillende van deze algoritmes om wachtwoorden uit het hoofd te berekenen. Recent publiceerden Samira Samadi, Santosh Vempala en Adam Tauman Kalai het artikel Usability of Humanly Computable Passwords [4] waarin ze analyseerden hoe bruikbaar deze algoritmes in de praktijk zijn. Want het mag natuurlijk niet te lang duren om zo'n wachtwoord te berekenen.

Zo'n mentaal wachtwoordalgoritme werkt in grote lijnen als volgt: het is een wiskundige functie die de naam van een website (de challenge) omzet in een wachtwoord (de response) op basis van een geheime sleutel. De functie zelf is eenvoudig genoeg om uit het hoofd uit te rekenen en vereist dus geen pen en papier of rekenmachine. Je moet dan wel in staat zijn om de geheime sleutel te onthouden. Zo'n algoritme noemen we een mindhash. We leggen hier kort twee soorten mindhashes uit: een 3-word hash en een random-letter hash.

Drie woorden
Bij de 3-word hash bestaat de geheime sleutel uit drie woorden die samen tenminste vijftien verschillende letters bevatten, gevolgd door een willekeurige letter (de wildcard) en een speciale tekenreeks bestaande uit een hoofdletter, een cijfer en een niet-alfanumeriek teken zodat het wachtwoord aan de meeste beveiligingsregels voor wachtwoorden voldoet.

Voorbeeld van een geheime sleutel

  • drie woorden: verblind momentum spanhaak
  • wildcard: x
  • speciale tekenreeks: B7!

Merk op: de drie woorden bevatten de volgende zeventien verschillende letters: a b d e h i k l m n o p r s t u v.

Hoe zet je nu de naam van een website om in een wachtwoord op basis van deze geheime sleutel? Daarvoor pas je het volgende algoritme achtereenvolgens toe op elke letter van de naam van de website. Je zet de letter Z om in de medeklinker die na de eerste Z in de drie woorden komt. Als Z niet in de drie woorden voorkomt, zet je die om naar de wildcard. Als de Z de laatste letter van de drie woorden is, kies je de eerste medeklinker van de drie woorden. Het algoritme beperkt zich tot medeklinkers omdat klinkers in wachtwoorden vaker voorkomen en dus gemakkelijker te raden zijn.

Stel dat je voor Facebook een wachtwoord wilt aanmaken, voor www.facebook.com dus. Dan is de challenge de naam facebook. Op elke letter van deze naam pas je nu het algoritme toe met de voorgaande geheime sleutel:

Toepassing van een geheime sleutel

  • f: komt niet voor in de drie woorden, dus is het resultaat de wildcard x;
  • a: komt in 'spanhaak', met vlak erna de medeklinker n;
  • c: komt niet voor in de drie woorden, dus is het resultaat de wildcard x;
  • e: komt in 'verblind', met als eerste medeklinker erna r;
  • b: komt in 'verblind', met als eerste medeklinker erna l;
  • o: komt in 'momentum', met als eerste medeklinker erna m;
  • o: hetzelfde, dus weer een m;
  • k: komt in 'spanhaak', en dat is de laatste letter van de drie woorden, dus we kiezen de eerste medeklinker van het eerste woord: v;
  • Op het einde voegen we nog de speciale tekenreeks B7! toe.

Het resultaat: het wachtwoord voor Facebook is xnxrlmmvB7!. Probeer dit zelf maar eens uit voor enkele andere websites. Je zult zien dat het berekenen van een wachtwoord op deze manier vrij vlot gaat en je kunt na de berekening van een letter die letter al in het wachtwoordveld intypen, zodat je die niet hoeft te onthouden en onmiddellijk aan de volgende letter kunt beginnen.

Willekeurige letters
Een andere mindhash is de random-letter hash, die wat moeilijker om aan te leren is. De geheime sleutel bestaat daar namelijk uit een tabel die de eerste 20 letters van het alfabet omzet naar een medeklinker (alleen de eerste 20 omdat u, v, w, x, y en z zo weinig voorkomen), aangevuld met een speciale tekenreeks. Als de naam van de website een letter u, v, w, x, y of z bevat, wordt die letter gewoon overgeslagen. Je kunt die letter ook naar een wildcard omzetten, maar volgens de makers van het schema is dat niet nodig omdat die letters toch niet zo vaak voorkomen.

Een voorbeeld van zo'n geheime sleutel is de volgende tabel:

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

q

f

h

c

g

b

s

k

l

m

n

p

j

r

d

t

n

w

x

y

Dit lees je als volgt: a zet je om in q, b zet je om in f, ... en t zet je om in y.

En de speciale tekenreeks: 8*A

Als je nu op Facebook wilt inloggen, dan bereken je het wachtwoord als volgt:

Berekening wachtwoord

  • f -> b
  • a -> q
  • c -> h
  • e -> g
  • b -> f
  • o -> d
  • o -> d
  • k -> n
  • En op het einde voegen we de speciale tekenreeks 8*A toe.

Dit levert als wachtwoord voor Facebook bqhgfddn8*A op. Als je dit voor enkele andere websites uitprobeert, zul je merken dat het berekenen van het wachtwoord vlotter gaat dan bij de 3-word hash op voorwaarde dat je de tabel uit het hoofd kent (of spiekt). Bij de omzetting hoef je immers niet naar medeklinkers te gaan zoeken: het is een eenvoudige omzetting van één teken naar een ander. Maar het is wel moeilijker om deze tabel uit het hoofd te leren dan de drie woorden van de 3-word hash.

Er bestaat wel een truc om deze tabel uit het hoofd te leren. Je neemt een letterpaar uit de tabel en denkt dan aan het eerste woord dat in je opkomt dat begint met de eerste letter en als volgende medeklinker de tweede letter heeft. Voor (a, q) is dat bijvoorbeeld aquarel, voor (b, f) befaamd, voor (c, h) chef enzovoort. Memoriseer nu al die woorden: aquarel, befaamd, chef enzovoort. Eventueel schrijf je ze tijdelijk op een briefje terwijl je ze uit het hoofd leert, maar vergeet niet na het memoriseren het briefje te vernietigen. Zodra de woorden goed in je hoofd zitten, kun je er heel vlot mee de letters van de naam van een website omzetten in de letters van het bijbehorende wachtwoord.

Is dit gebruiksvriendelijk?
De onderzoekers hebben nu gebruikers van Amazon Mechanical Turk [5] de taak gegeven om beide mindhashes te leren. De deelnemers kregen video's te zien van hoe de mindhashes werkten en moesten dan wachtwoorden genereren met een vaste geheime sleutel om te kijken of ze het proces begrepen. Daarna moesten ze zelf een geheime sleutel kiezen en uit het hoofd leren.

Vervolgens kregen de deelnemers oefeningen met hun gekozen geheime sleutel en werd hen feedback gevraagd over het proces. De dagen erna kregen ze telkens opnieuw een oefening. De deelnemers deden er 19 tot 25 seconden over om een wachtwoord te berekenen. Zowel de snelheid als de nauwkeurigheid van de wachtwoordberekeningen nam toe naarmate men al meer logins met het systeem had gedaan, zelfs als er redelijk wat tijd tussen de opeenvolgende logins zat. Dit is een teken dat je door de wachtwoorden te berekenen tegelijk de geheime sleutel ook memoriseert, wat een interessante eigenschap van het systeem is. Als je vaak genoeg inlogt met dit systeem, zul je de geheime sleutel dus niet zomaar vergeten.

Na de test, die een maand duurde, kregen de deelnemers ook de vraag of ze het systeem in hun echte leven waren gaan toepassen. Van degenen die de random-letter hash toegewezen kregen, gaf 25% aan dat ze dat inderdaad deden. Van de deelnemers die de 3-word hash moesten oefenen, gaf 42% aan dat ze die ondertussen ook gebruikten om hun eigen wachtwoorden te berekenen. Er zijn wel wat beperkingen aan het systeem (wat doe je bijvoorbeeld als je periodiek je wachtwoord op een website moet veranderen?), maar al met al zijn mindhashes vrij bruikbaar. Probeer het eens!

Infolinks

[1] https://www.lastpass.com/

[2] https://www.themooltipass.com/

[3] https://www.cc.gatech.edu/~vempala/

[4] https://arxiv.org/abs/1712.03650

[5] https://www.mturk.com/