Er gaat geen dag voorbij dat we niet opgeschrikt worden door een groot wachtwoordlek. Veel beveiligingsonderzoekers vinden dan ook dat wachtwoorden op zich onveilig zijn, maar daar is niet iedereen het mee eens.
Koen Vervloesem
Door diegenen die vinden wachtwoorden sowieso onveilig zijn en zijn andere oplossingen naar voren geschoven, zoals biometrie wat weer zijn eigen nadelen kent. Volgens onderzoekers Jan Camenisch en Gregory Neven van IBM Research in Zürich zijn wachtwoorden niet inherent onveilig; we gebruiken ze gewoon verkeerd...
Laten we eerst eens even naar beide kanten van het verhaal kijken. Waarom zeggen veel beveiligingsonderzoekers dat wachtwoorden onveilig zijn? Dat is vooral omdat wachtwoorden inderdaad maar een zwakke verdediging vormen als er offline aanvallen mogelijk zijn. Dat wil zeggen: als iemand een bestand met gehashte wachtwoorden van een server gestolen heeft, kan die persoon eenvoudigweg alle mogelijke wachtwoorden uitproberen om te zien of hun hash overeenkomt.
Wachtwoorden zijn notoir onveilig: bij inbraak in een server kunnen ze immers gekraakt worden
Kwetsbaar voor offline aanvallen
at is veel rekenwerk, maar de uitdaging wordt wat minder zwaar als je weet dat de meeste mensen geen volledig willekeurig wachtwoord kiezen. Zo gaat het Amerikaanse NIST (National Institute of Standards and Technology) ervan uit dat in een gemiddeld wachtwoord van 16 tekens lang (wat al lang is!) 30 bits aan entropie zit. Of in andere woorden: iemand die een wachtwoord van 16 tekens lang wil kraken, heeft daar met een slim wachtwoordkraakprogramma een miljard () pogingen voor nodig.
Is een miljard pogingen veel? Als je weet dat een hedendaagse gpu een kleine 14 miljard wachtwoorden per seconde kan uitproberen, begrijp je dat een wachtwoord van 16 tekens niet meer veilig is... En toen in 2016 door een lek bij LinkedIn 6,5 miljoen wachtwoordhashes online kwamen te staan, werd 60% al binnen de 24 uur gekraakt en 90% binnen de zes dagen.
Bescherming tegen online aanvallen
Tegen online aanvallen zijn wachtwoorden echter wél redelijk veilig. Een voorbeeld van een online aanval is iemand die in je Gmail-account probeert in te loggen door allerlei wachtwoorden uit te proberen. Na een aantal loginpogingen zal Google ontdekken dat dit niet normaal is en blokkeert hij tijdelijk verdere loginpogingen. Op deze manier zou het veel te lang duren om alle wachtwoorden uit te proberen, omdat de server de pogingen telkens kan afbreken. Andere maatregelen die servers tegen online aanvallen kunnen nemen, zijn vertragingen en CAPTCHA's.
Is een goed gekozen wachtwoord dan altijd een veilige manier om in te loggen op een server? Nou nee... Want deze manier vereist dat de server je gehashte wachtwoord ergens opslaat om de wachtwoordcontrole te doen. Als er dan iemand in slaagt om in de server in te breken, kan die het (gehashte) wachtwoordbestand kopiëren en daar een offline aanval op uitvoeren.
En daarom raden beveiligingsexperts aan dat je je wachtwoorden lang genoeg moet maken, een mix van hoofdletters en kleine letters, cijfers en speciale tekens, zodat een offline aanval hopelijk niet succesvol is. Dus omdat webservers in de praktijk onveilig zijn, worden gebruikers verplicht om complexe wachtwoorden op te stellen, die ze niet kunnen onthouden en waar ze dan een wachtwoordkluis voor moeten gebruiken, die ook nog eens onveilig kan zijn. Volgens cryptograaf Gregory Neven schuiven websites zo de verantwoordelijkheid voor hun veiligheid af naar de gebruikers. Als websites zouden investeren in een veiliger manier om met wachtwoorden om te gaan, hoefden we al dit complexe gedoe niet te tolereren. Dan zouden we misschien zelfs kunnen inloggen met een pincode van 4 cijfers, zoals we gebruiken voor onze bankkaart.
Gedistribueerde authenticatie
We hebben dus gezien dat elke authenticatiemanier met één server kwetsbaar is voor een offline aanval en wachtwoorden dan inderdaad inherent onveilig zijn. In dat geval hebben de klassieke critici van wachtwoorden dus gelijk. Maar in de laatste jaren brachten verschillende onderzoekers een oplossing naar voren waarbij we wél wachtwoorden op een veilige manier kunnen gebruiken: een wachtwoordverificatieprotocol met meerdere servers.
In zo'n protocol stuurt de gebruiker die wil inloggen, informatie die van zijn wachtwoord afhangt naar meerdere servers, die elk die informatie verifiëren en daarvoor ook met elkaar communiceren. Geen enkele van de servers krijgt het volledige wachtwoord van de gebruiker te zien en geen enkele server kan alleen het wachtwoord verifiëren. En dat betekent ook: als er iemand op één van de servers inbreekt, heeft hij daar geen toegang tot een lijst met wachtwoordhashes die hij zou kunnen kraken.
Bij gedistribueerde authenticatie wordt je wachtwoord over meerdere servers verspreid.
(Bron: Jan Camenisch en Gregory Neven, IBM Research)
Geheimen delen
Je logt in dit systeem niet alleen in op een verzameling servers, maar je slaat ook een geheim op dat je met je wachtwoord uit een subset van die servers kunt reconstrueren zonder dat de servers iets leren over je wachtwoord of je geheim. Dit systeem is algemeen genoeg voor allerlei scenario's. Het geheim kan bijvoorbeeld een sleutel zijn om een lijst met accounts en bijbehorende wachtwoorden op websites te versleutelen: dan heb je een gedistribueerde wachtwoordbeheerder. Of het geheim kan een sleutel zijn waarmee je bestanden in de cloud versleutelt. Of je kunt er een virtuele smartcard mee implementeren.
Het soort systemen waarmee dit allemaal mogelijk is, heet threshold password-authenticated secret sharing (TPASS). De gebruiker kan een geheim K onder n servers delen en met een wachtwoord p beveiligen. Hij kan het geheim K van t + 1 servers (het maakt niet uit welke) uit de verzameling van n servers reconstrueren met het wachtwoord p. Zolang er minder dan t servers samenspannen, kunnen ze niets over K leren of een offline aanval op p uitvoeren. Maar als de gebruiker er op een of andere manier toe gebracht wordt om op t + 1 servers in te loggen die samenspannen, kunnen zij samen zijn wachtwoord p reconstrueren.
Homomorfe encryptie
In een TPASS-systeem versleutelt de gebruiker eerst zijn wachtwoord p en het geheim K met een threshold encryption scheme. Die encryptie gebeurt met een publieke sleutel, terwijl de bijbehorende privésleutel die voor de decryptie nodig is, wordt gedeeld onder alle n servers op zo'n manier dat er minstens t nodig zijn om de privésleutel te reconstrueren. Elke server krijgt dus het versleutelde wachtwoord Cp, het versleutelde geheim CK en een deel van de privésleutel.
In dit systeem moet de gebruiker zijn gebruikersnaam en wachtwoord, zijn publieke sleutel en de volledige lijst van servers onthouden. Als hij daarna zijn geheim K wil reconstrueren, versleutelt hij zijn wachtwoordpoging p' en zendt het resultaat Cp' naar alle servers. Elke server berekent het quotiënt p / p'. Omdat het threshold encryption scheme homomorf is, heeft die de interessante eigenschap dat p / p' gelijk is aan Cp / Cp'. De server kan zo controleren of het ingevoerde wachtwoord p' gelijk is aan het originele wachtwoord p zonder de waarde van p te kennen: als Cp / Cp' = 1, is p' gelijk aan p. De servers berekenen dan ook Cp / Cp' en decrypteren dit quotiënt gezamenlijk met hun privésleutels. Als het quotiënt 1 is, decrypteren ze ook gezamenlijk het originele geheim K.
Gebruiker en wachtwoord
Dit systeem werd voor het eerst ontwikkeld door Ali Bagherzandi en zijn collega's van de University of California, Irvine. Maar het heeft nog wat nadelen. Zo moet de gebruiker zijn publieke sleutel en de volledige lijst van servers die deelnemen onthouden, wat niet erg gebruiksvriendelijk is. En als hij aan de verkeerde servers zijn versleutelde wachtwoord stuurt, kunnen die in het slechtste geval het wachtwoord reconstrueren.
Camenisch en Neven bouwden hierop voort en ontwikkelden zo het eerste TPASS-systeem dat van de gebruiker alleen vereist dat hij een gebruikersnaam en wachtwoord onthoudt. Zelfs als hij zijn lijst van servers niet meer weet en hij zijn geheim van een willekeurige lijst servers probeert te reconstrueren die toevallig allemaal corrupt zijn, leren de servers niets over het wachtwoord of het geheim van de gebruiker en kunnen ze de gebruiker ook geen ander geheim teruggeven en hem zo wijsmaken dat K een andere waarde heeft.
Dat doet het protocol doordat de gebruiker niet Cp' naar de servers stuurt, maar begint met aan alle servers te vragen wat volgens hen Cp is die de gebruiker de eerste keer heeft doorgestuurd. Als alle servers dezelfde Cp doorsturen, kan de gebruiker aannemen dat ze te vertrouwen zijn (of ze spannen allemaal samen, maar dat zal de gebruiker dan dadelijk merken). Daarna gebruikt hij de homomorfe eigenschap van de encryptie om de versleuteling van te berekenen met r, een willekeurig getal. Het resultaat stuurt hij naar de servers, die dit samen ontcijferen. Als de decryptie van het resultaat 1 blijkt te zijn, kunnen de servers zo controleren of het ingevoerde wachtwoord p' gelijk is aan het originele wachtwoord p, en decrypteren ze gezamenlijk het originele geheim K, zonder dat ze iets over p of p' weten. En als het ingevoerde wachtwoord p' niet gelijk is aan p, krijgen de servers als resultaat een willekeurige waarde te zien waaruit ze ook niets over p of p' kunnen afleiden.
Zelfs als t+1 servers corrupt zijn, kunnen ze met dit systeem maar één keer een gok doen naar p'. En ze kunnen de gebruiker geen verkeerde K voorschotelen (tenzij dus als t+1 servers corrupt zijn en p' hebben geraden).
In de praktijk
Het beveiligingsbedrijf RSA heeft een tijdje een gelijkaardig gedistribueerd systeem als hierboven verkocht en ook IBM heeft een prototype gemaakt, maar de oplossingen lijken niet aan te slaan. Volgens Neven is het probleem dat bedrijven nog altijd veel te weinig schade moeten vergoeden als er wachtwoorden worden gelekt. En als ze weinig schade moeten vergoeden, gaan ze ook niet veel investeren in een veiliger systeem. Slachtoffers kunnen ook vaak moeilijk bewijzen dat de schade door identiteitsdiefstal teruggaat naar een inbraak in één website. Dus ook al bestaat de technologie en lost die een reëel probleem op, de kans is klein dat deze op korte termijn gaat doorbreken...