abonneren

Inloggen zonder wachtwoord dankzij WebAuthn

Aanmelden op een website doe je doorgaans met een wachtwoord, soms met een extra stap erbij in de vorm van tweefactorauthenticatie. Met de standaard FIDO2 is inloggen zonder wachtwoord een optie. Je logt dan in met een fysieke beveiligingssleutel, vingerafdruk of irisscan. Hoe werkt dat?

Niemand vindt wachtwoorden leuk. Ze zijn moeilijk te onthouden, lastig in te typen op een smartphone en in sommige gevallen moeten we ze ook nog eens regelmatig vervangen of zorgen dat ze aan allerlei voorwaarden voldoen. Bovendien zijn wachtwoorden niet zo veilig. Ze kunnen worden onderschept of zelfs gestolen, als de website die ze opslaat niet goed beveiligd is. Het is dan ook geen wonder dat de meeste computerinbraken te wijten zijn aan gestolen of zwakke wachtwoorden.

In 2013 richtten enkele bedrijven samen de FIDO Alliance (FIDO = Fast IDentity Online) op om standaarden voor sterke authenticatie zonder wachtwoorden te ontwikkelen. Die standaarden zijn er nu, ondersteund door steeds meer hardware en software. Onder andere Google, Mozilla, Microsoft en Yubico zetten er hun schouders onder.

De FIDO Alliance heeft zijn nieuwste authenticatiestandaarden gebundeld onder de noemer FIDO2. Die bestaat uit twee specificaties: Web Authentication (WebAuthn), dat onlangs door het World Wide Web Consortium (W3C) tot ‘recommendation’ (W3C-lingo voor standaard) is uitgeroepen, en Client-to-Authenticator Protocol (CTAP) dat het protocol beschrijft waarmee FIDO2-compatibele hardware met je webbrowser kan communiceren.

WebAuthn

Voor eindgebruikers is vooral WebAuthn belangrijk: die specificatie beschrijft een api voor authenticatie op een website. Wil je zonder wachtwoord inloggen op een website, dan dient die website dus WebAuthn te ondersteunen. Uiteraard dient je webbrowser ook CTAP te ondersteunen als je via een beveiligingssleutel zoals een YubiKey wilt inloggen op een WebAuthn-compatibele website.

De technologie onder de motorkap van WebAuthn is niet nieuw: het gaat om asymmetrische encryptie die met een geheime sleutel en de bijbehorende publieke sleutel werkt, en dat is al in de jaren 1970 uitgevonden. De verdienste van WebAuthn is dat het die technologie gebruiksvriendelijk maakt, zowel voor de eindgebruikers als voor de ontwikkelaars van websites. Dat zou er weleens voor kunnen zorgen dat er eindelijk een bruikbaar alternatief komt voor de klassieke wachtwoorden.

Met de WebAuthn-api kan een website niet alleen gebruikmaken van beveiligingssleutels zoals de YubiKey, maar ook van biometrische authenticatiemethodes zoals Windows Hello of Apple Touch ID. De gebruiker dient dan geen wachtwoord in te voeren om zich op de website te registreren en nadien aan te melden. In plaats daarvan wordt op de hardware een uniek sleutelpaar voor de website aangemaakt: de geheime sleutel blijft op het apparaat zelf, terwijl de publieke sleutel samen met een willekeurig gegenereerde ID op de server wordt opgeslagen.

Als een geregistreerde gebruiker zich wil aanmelden op een website, stuurt de server een stukje willekeurige data (de ‘challenge’) terug met de vraag dat te ondertekenen. De browser vraagt aan de gebruiker of hij dat wil doen. Hij laat dan zijn vingerafdruk inlezen of drukt op het knopje van zijn YubiKey. Op de achtergrond worden daardoor de gegevens met zijn geheime sleutel ondertekend en naar de server teruggestuurd.

De website verifieert die handtekening aan de hand van de publieke sleutel die bij de ID van de gebruiker geregistreerd staat. Klopt de handtekening, dan weet de server zeker dat de gebruiker de eigenaar is van de bijbehorende geheime sleutel en dus is wie hij beweert te zijn. De gebruiker wordt dan aangemeld, zonder dat hij een wachtwoord heeft moeten invoeren.

Die publieke sleutel is, zoals de naam al zegt, niet geheim. In tegenstelling tot klassieke authenticatie, waarbij een inbraak in de server de wachtwoorden van alle gebruikers kan lekken, heeft WebAuthn dat probleem niet. Als iemand erin slaagt om in te breken in de database van een webserver die WebAuthn gebruikt, kan hij niets aanvangen met die lijst van publieke sleutels.

Bovendien is FIDO2 zo ontworpen dat je voor elk account een uniek sleutelpaar en een willekeurige ID aanmaakt. Je kunt dus geen wachtwoord meer delen tussen meerdere accounts. En iemand die erin slaagt om je ID bij één webserver te weten te komen, kan deze totaal niet linken aan je accounts bij andere webservers, tenzij er andere identificerende informatie zoals een e-mailadres is opgeslagen.

Vingerafdrukken en authenticators

Als mensen horen dat het ook mogelijk is om FIDO2 met vingerafdrukscanners te gebruiken, schieten ze vaak in de kramp: ze willen hun vingerafdrukken niet met een website delen, want wat als er wordt ingebroken op de website? Dan kunnen ze nog maar negen andere vingers gebruiken voor een vingerafdruk …

De achterliggende gedachte is correct: vingerafdrukken deel je maar beter met niemand, want een vinger kun je niet veranderen; een wachtwoord wel. Maar zo werkt FIDO2 niet: als je je via FIDO2 aanmeldt met een vingerafdrukscanner, dient de scanner slechts om de geheime sleutel op je computer te ontgrendelen. Je vingerafdruk zelf verlaat je eigen apparaat dus niet.

Een andere logische vraag is of we er wel op kunnen vertrouwen dat een webbrowser, zo ongeveer het meest complexe stuk code dat je je kunt inbeelden, veilig met onze geheime sleutel omspringt. Kan een bug in je webbrowser je veiligheid in het geding brengen?

Ook daarmee is in FIDO2 rekening gehouden. Je geheime sleutel voor elke website wordt gegenereerd en opgeslagen in een ‘authenticator’. Dat kan je computer zelf zijn, bijvoorbeeld via gezichtsherkenning met Windows Hello, of een extra apparaatje, zoals een YubiKey of de Titan Security Key van Google.

Als je browser via een website met WebAuthn-ondersteuning de vraag krijgt om je te authenticeren, stuurt het die vraag via CTAP door naar een authenticator op je computer. Dat kan via usb, maar ook via bluetooth of nfc. Je authenticator vraagt je dan om toestemming: dat is het moment dat je op het knopje van je YubiKey drukt, een pincode op je computer intypt, je vingerafdruk of iris laat scannen, of misschien zelfs een combinatie.

Nadat je je toestemming hebt gegeven, ondertekent de authenticator de challenge van de website met de geheime sleutel die bij de ID hoort die je bij de website hebt. Het resultaat wordt naar je browser gestuurd, die het naar de javascript-code van de website doorstuurt, waardoor je op de website aangemeld wordt.

Ondersteuning van WebAuthn

WebAuthn is in maart 2019 als officiële webstandaard aangenomen. Nu al wordt de standaard ondersteund in Windows 10 en Android 7.0, Google Chrome, Mozilla Firefox, Microsoft Edge en Apple Safari (van die laatste was tijdens de redactiesluiting nog een previewversie nodig). Op de website dongleauth.info vind je een lijst met websites die eenmalige wachtwoorden (OTP) of beveiligingssleutels met ondersteuning voor WebAuthn, FIDO2 of U2F (de voorloper van FIDO2) aanvaarden.

Kijken we tot slot even naar drie voorbeelden: Dropbox, Android en Windows.

WebAuthn en Dropbox

Dropbox was een van de eerste websites die WebAuthn ondersteunden, zoals eerder ook het geval was met voorloper FIDO U2F (Universal 2nd Factor). Voorlopig ondersteunt de website WebAuthn en U2F alleen nog maar als tweede factor als je tweefactorauthenticatie inschakelt in je beveiligingsinstellingen. Volledig wachtwoordloos inloggen op Dropbox is dus nog niet mogelijk.

Om WebAuthn als tweede factor in te schakelen, log je in bij Dropbox, klik je rechtsboven op je avatar en kies je voor Instellingen. Selecteer dan het tabblad Beveiliging en schakel Tweestapsverificatie in. Je bent verplicht om eerst een gsm-nummer of mobiele app in te stellen om eenmalige codes te ontvangen. Kies een van beide opties.

Zodra je tweefactorauthenticatie ingeschakeld hebt, kun je bij Beveiligingssleutels met een klik op Toevoegen je beveiligingssleutel toevoegen. Steek je beveiligingssleutel in de usb-poort van je computer en druk op de knop als Dropbox daarom vraagt. Als je nadien inlogt bij Dropbox, krijg je na het invoeren van je gebruikersnaam en wachtwoord de vraag om met een druk op de knop van je beveiligingssleutel te bevestigen dat jij het bent. Overigens kun je nog altijd de mobiele app of sms-code als tweede factor gebruiken als je je beveiligingssleutel niet bij je hebt.

Android-telefoon als FIDO2-sleutel

Een afzonderlijke beveiligingssleutel (zie het kader ‘Welke beveiligingssleutels zijn er zoal?’) is uiteraard het veiligst, maar sinds Android 7.0 kun je ook van je Android-telefoon een FIDO2-beveiligingssleutel maken en deze als onderdeel van tweefactorauthenticatie gebruiken om in te loggen op je Google-account. Helaas lijkt het niet mogelijk om je Android-telefoon op deze manier te gebruiken met andere websites die FIDO2 ondersteunen.

Naast minstens Android 7.0 op je telefoon heb je daarvoor op je computer Chrome nodig (onder Windows, macOS of Chrome OS; Linux wordt nog niet ondersteund). De verbinding tussen je Android-telefoon en Chrome verloopt via bluetooth. Als je je Android-telefoon als beveiligingssleutel voor een iPad of iPhone wilt gebruiken, dien je iOS 10.0 of hoger te draaien en de app Google Smart Lock daarop te installeren.

Schakel eerst authenticatie in twee stappen in voor je Google-account. Dat kan op de pagina Beveiliging van de instellingen van je Google-account, door op Authenticatie in twee stappen te klikken. Standaard gebeurt tweefactorauthenticatie met een Google-prompt: een melding op alle Android-telefoons waarop je met dit Google-account ingelogd bent.

Scrol nu naar beneden tot Alternatieve tweede stap instellen en klik op Beveiligingssleutel toevoegen. Als alles goed is, zie je daar je Android-telefoon in de lijst staan (en overigens ook de mogelijkheid om een FIDO2-beveiligingssleutel zoals een YubiKey toe te voegen). Klik op je telefoon, zorg dat bluetooth zowel op je telefoon als op je pc is ingeschakeld en klik op Toevoegen. Als je daarna wilt inloggen op je Google-account, krijg je na het invoeren van je gebruikersnaam en wachtwoord op je telefoon de vraag om inloggen toe te staan.

Windows Hello en andere Microsoft-diensten

In de update van mei 2019 heeft Windows een interessante functie toegevoegd: vanaf die versie kun je elke ondersteunde aanmeldingsoptie van Windows Hello gebruiken om via WebAuthn in te loggen op een website. Dat zijn niet alleen fysieke beveiligingssleutels, maar ook gezichtsherkenning, vingerafdrukken en een pincode.

Als je geen compatibele camera, vingerafdrukscanner of fysieke beveiligingssleutel hebt, kun je het altijd uitproberen door in de aanmeldingsopties bij Windows Hello pincode een pincode in te voeren. Daarna kun je inloggen bij websites die WebAuthn ondersteunen door eenvoudigweg je ingestelde pincode in te typen. De gekozen aanmeldingsoptie wordt ook gebruikt om je aan te melden bij Windows zelf.

Microsoft is een grote voorvechter van FIDO2, omdat de standaard het leven van gebruikers heel wat gemakkelijker maakt. Het bedrijf heeft dan ook al sinds eind vorig jaar al zijn webdiensten compatibel gemaakt met WebAuthn. Skype, OneDrive, Bing, Office, Windows Store en nog veel meer diensten, je kunt er allemaal zonder wachtwoord op inloggen als je een fysieke beveiligingssleutel hebt of Windows Hello in de nieuwste Windows-versie inschakelt.

Bezoek daarvoor de website van je Microsoft-account en meld je aan met je gebruikersnaam en wachtwoord. Klik dan op Beveiliging / Meer beveiligingsopties en scrol naar Windows Hello en beveiligingssleutels. Kies hier nu of je een beveiligingssleutel (via usb) wilt gebruiken om aan te melden of Windows Hello.

We tonen hier hoe het werkt met Windows Hello. Als je wachtwoordloos inloggen met Windows Hello eerder al hebt ingesteld, krijg je nu een venster te zien dat je vraagt om je daarmee aan te melden, bijvoorbeeld met je pincode als je dat als aanmeldingsoptie gekozen hebt. Daarna geldt (op deze computer) Windows Hello als aanmeldingsmethode voor je Microsoft-account bij alle Microsoft-webdiensten. Op andere computers log je nog in met je klassieke wachtwoord.

In geval van nood

Een belangrijk probleem met WebAuthn is wat er moet gebeuren als je je beveiligingssleutel verliest. Er is geen enkel mechanisme voorzien om je account te herstellen. Eigenlijk zou je een back-up moeten kunnen maken van de interne toestand van je beveiligingssleutel, zodat je die bij verlies kunt overzetten naar een nieuwe beveiligingssleutel. Dan ben je in elk geval je geheime sleutels niet kwijt.

Een ander risico is natuurlijk dat een deel van de authenticatie in de webbrowser gebeurt. Dat is zo’n complex stukje software dat dit onmogelijk 100 procent te beveiligen is. Volgens de FIDO Alliance is WebAuthn beschermd tegen man-in-the-middle-aanvallen en phishing, maar bij beveiliging kan één verkeerd detail tot grote problemen leiden. Of WebAuthn is opgewassen tegen de aanvallen die er zeker zullen komen, is dus nog afwachten.

Geschreven door: Koen Vervloesem op

Category: Nieuws, Security

Tags: Wachtwoord, 2fa

Laatste Vacatures

Uitgelicht: Technisch Applicatiebeheerder - CGI