We schreven onlangs over twee-factor-authenticatie (2FA) inschakelen bij de verschillende systemen van Antagonist. Slim om te doen, want je voegt zo een extra laag beveiliging aan je accounts toe. Hoe werkt deze vorm van authenticatie precies en waarom maakt 2FA inloggen veiliger? Na het lezen van dit artikel weet je het!
Voordat we beginnen, raad ik je aan om eerst twee-factor-authenticatie aan te zetten. Als je dit hebt ingeschakeld, dan maak je het hackers en phishers een stuk moeilijker om op je account in te loggen. Dat beschermt niet alleen jouw data, maar ook die van je bezoekers.
Heb je twee-factor-authenticatie ingeschakeld? Top, we kunnen dan verder met de uitleg en hoe het technisch werkt. Besluit je niet verder te lezen, dan ben je nu in ieder geval een stukje beter beveiligd 😉
De drie authenticatiefactoren
We kunnen authenticatiemiddelen in drie categorieën (of factoren) indelen: iets dat je weet, iets dat je bent en iets dat je hebt. Als het op beveiliging aankomt, dan heeft elke factor andere eigenschappen.
#1. Iets dat je weet
De eerste factor, iets dat je weet, kennen we allemaal: het wachtwoord. Deze methode werkt door een gedeeld geheim. Alleen de vrager en de gebruiker kennen het geheim (als het goed is). Het voordeel van deze methode is dat het gemakkelijk op afstand is uit te voeren, je hebt geen fysieke toegang tot een systeem nodig. Dit mes snijdt echter aan twee kanten. Wachtwoorden zijn namelijk relatief simpel op afstand te stelen, bijvoorbeeld via phishing.
#2. Iets dat je bent
De tweede factor, iets dat je bent, kennen de meesten van hun smartphone. Het gaat hier veelal om biometrische maten, zoals vingerafdrukken, irisscans of gezichtsherkenning. Deze middelen zijn gemakkelijk in gebruik. Je hebt je vingerafdruk immers altijd bij je en die raak je ook niet zomaar kwijt. Ze zijn daarnaast moeilijk te stelen, lugubere opties daargelaten. Het is echter vrij lastig om dit soort methoden op afstand te gebruiken. Ze blijken in de praktijk ook niet altijd even veilig geïmplementeerd te zijn.
#3. Iets dat je hebt
Met de derde factor, iets dat je hebt, zijn we ook allemaal bekend. Hier vallen bijvoorbeeld sleutels onder. Het voordeel van deze methode is dat ze relatief moeilijk zijn te stelen. Je moet immers fysieke toegang tot de drager hebben. Ze zijn echter ook minder vriendelijk in gebruik, een sleutel raak je sneller kwijt dan een vinger(afdruk) of iris. Op afstand gebruiken gaat relatief lastig. Je kunt niet met een sleutel je deur openen, tenzij je er vlakbij in de buurt bent.
Multi-factor authenticatie
Bij multi-factor authenticatie (MFA) wordt er om meer dan één factor gevraagd om iemands identiteit vast te stellen. Het doel is hierbij, om de zwakten van de ene factor op te vangen door een andere factor erbij te gebruiken. In geval van 2FA combineer je dus twee factoren met elkaar.
Als je bijvoorbeeld geld gaat pinnen, dan moet je een pinpas invoeren (iets dat je hebt) en een pincode opgeven (iets dat je weet). Als je één van beide niet hebt, dan kun je geen geld opnemen. De combinatie van pincode en pinpas is lastig te stelen. Je hebt immers fysieke toegang tot de gebruiker nodig.
Hoe veilig zijn veiligheidsvragen?
Merk op dat meermaals om een middel uit dezelfde categorie vragen geen MFA is. Sommige websites staan gebruikers toe om zogenaamde veiligheidsvragen in te stellen. Deze vragen worden gebruikt om het wachtwoord te herstellen, als je die vergeet. Er wordt dan meermaals gevraagd om iets wat je weet en dit voegt praktisch niet zo veel toe.
De combinatie van iets dat je weet en iets dat je hebt, is in de praktijk erg handig en daarom willen we die combinatie ook op bijvoorbeeld websites toepassen. Echter, je loopt dan tegen een probleem aan, want hoe bewijs je op afstand dat je in het bezit bent van een bepaald item?
Gelukkig is er een standaard om dat probleem op te lossen, namelijk Time Based One-time Passwords (TOTP). Bijna alle twee-factor-authenticatieschema’s die je op het internet tegenkomt, zijn op deze standaard gebaseerd. Elke keer als je bijvoorbeeld Google Authenticator gebruikt, maak je gebruik van deze standaard. In de rest van dit artikel gebruik ik dan ook Google Authenticator als voorbeeld, maar de uitleg is op iedere authenticator van toepassing.
HMAC Based One-time Passwords
Voordat we naar de werking van de Google Authenticator kijken, moeten we eerst een andere authenticatiemethode toelichten. Het gaat om de zogenaamde HMAC Based One-time Passwords (HOTP). De authenticator van Google maakt hier namelijk gebruik van.
Het doel van HOTP is om een systeem te maken met een continu wisselend wachtwoord. Met andere woorden, een wachtwoord verandert automatisch na ieder gebruik ervan. Vandaar de naam ‘one-time passwords’, het gebruik ervan is eenmalig.
Dit is een beetje vergelijkbaar met een combinatieslot waarbij de combinatie ieder jaar verandert, wanneer het slot is geopend. Om dit te laten werken, zullen beide partijen een afspraak moeten maken over hoe die code wordt aangepast. Ofwel, de partijen moeten in staat zijn om het wachtwoord te voorspellen, maar buitenstaanders niet.
Hash-based Message Authentication Code (HMAC)
Om dat voor elkaar te krijgen, wordt een algoritme gebruikt: HMAC. Dat staat voor Hash-based Message Authentication Code. HMAC’s worden in de praktijk veel gebruikt om ervoor te zorgen dat berichten tijdens het verzenden niet kunnen worden aangepast. Het is voor deze discussie niet belangrijk om te weten hoe een HMAC werkt. We beschouwen de HMAC als een black box, waar we twee dingen instoppen en één ding terug krijgen.
Wat we erin stoppen, is een sleutel en een teller. De sleutel is een geheim dat we met de server hebben afgesproken. De teller is een getal dat op 1 begint en bij elke succesvolle inlogpoging met 1 wordt verhoogd. Het is van belang dat de sleutel geheim wordt gehouden. Lekt deze uit, dan is het systeem gekraakt. De teller hoeft niet geheim gehouden te worden, maar moet wel strikt overeenkomen tussen de client en de server.
De output van de HMAC is een lange string van bytes die volledig willekeurig lijkt. Is de sleutel onbekend, dan is de output voorspellen onmogelijk. HMAC is daarnaast erg gevoelig voor veranderingen van de inputs. Als er ook maar één bit van één van de inputs verandert, dan is de output direct volledig anders.
Hardware tokens gebruiken
Concreet gesteld is het one-time password de output van de HMAC. Je logt in met het eenmalige wachtwoord en vervolgens wordt de teller op zowel de client als de server met 1 verhoogd. De volgende keer dat je inlogt, wordt er een volledig nieuw wachtwoord gegenereerd.
In het verleden werden soortgelijke systemen regelmatig ingezet. De gebruiker krijgt dan een hardware token, een klein apparaatje met een LCD-scherm. Dat scherm geeft het huidige wachtwoord weer. Als er op een knopje wordt gedrukt, dan wordt de teller met 1 opgehoogd.
Bij het ingebruiknemen van het apparaatje moet de sleutel, die bijvoorbeeld op een kaartje in de verpakking is geprint, in het systeem worden ingevoerd. Het nadeel is dat die teller voortdurend tussen de server en het token moet worden gesynchroniseerd. Als die uiteenlopen, dan klopt het wachtwoord immers niet meer.
Vaak zijn dit specialistische systemen die niet echt geschikt zijn voor gebruik op websites. Maar daar is een oplossing voor. Door kleine aanpassingen kan het HOTP-systeem zo worden gemaakt, dat er een universele teller is en volledig in software kan worden geïmplementeerd.
Time Based One-time Passwords
De standaard die bijvoorbeeld Google Authenticator gebruikt, is TOTP (Time Based One-time Passwords). Het leunt op de HOTP-standaard, maar maakt gebruik van een universele teller, namelijk de tijd. Naast een sleutel spreken de client en de server nog iets extra’s af, namelijk een interval. Die bepaalt hoe lang een eenmalig wachtwoord zichtbaar is. In je authenticator zie je die ook terug, bij elk wachtwoord wordt weergegeven hoe lang die bruikbaar is.
Laten we er voor het gemak vanuit gaan dat de interval 30 seconden is. Bij TOTP maken we gebruik van exact hetzelfde systeem als bij HOTP. Dus we hebben weer een black box waar we een sleutel en een teller in stoppen, en waar een uniek wachtwoord uitkomt. Alleen in het geval van TOTP is de teller het aantal second sinds 0:00 op 1 januari 1970 gedeeld door de interval.
Een rekenvoorbeeld
Een voorbeeld is misschien handig. Stel dat het nu 21 maart 2019 14:58:13 is. Dat is 1553175521 seconden sinds 0:00 op 1 januari 1970. We gebruiken 30 als interval, dus we doen 1553175521 / 30 = 51772517.37. Echter, de teller moet een geheel getal zijn. We ronden dit voor het gemak dus naar 51772517 af en geven dat aan het HOTP-algoritme, samen met de geheime sleutel.
De output van het TOTP-algoritme is een eenmalig wachtwoord dat 30 seconden geldig is. Hier moet wel bij gezegd worden, dat het alleen werkt als de server en authenticator app dezelfde tijd hanteren. Gelukkig is dat geen probleem. De klokken op servers en smartphones lopen tegenwoordig namelijk allemaal gelijk, dankzij het Network Time Protocol (NTP).
Wat de QR-code doet
Nu weten we hoe de wachtwoorden in de authenticator worden gemaakt, maar wat doet die QR-code die je vaak vooraf scant precies? Nou, om het systeem te laten werken, moeten er een aantal zaken tussen de server en de authenticator worden uitgewisseld.
De geheime sleutel, de lengte van de gegenereerde codes en de interval om precies te zijn. Die drie dingen samen zijn bepalend voor de generatie van de codes en moeten op zowel de server als de authenticator staan. Via de QR-code wordt deze informatie overgedragen.
De server stuurt daarnaast nog een gebruikersnaam en een omschrijving mee. Deze worden in je authenticator app weergegeven, zodat je de code makkelijk terugvindt. De QR-codes zijn verder dus niet van belang voor de generatie van de wachtwoorden zelf.
Two-factor-authenticatie inschakelen
Hopelijk verduidelijkt deze uitleg hoe twee-factor-authenticatie werkt en hoe het je helpt. Twee-factor-authenticatie inschakelen is verstandig. Niet alleen bescherm je zo je eigen data, maar ook die van je bezoekers. Gebruik je het nog niet, activeer dan 2FA voor je accounts bij Antagonist!
Op zoek naar webhosting of een domeinnaam? Met een domeincheck weet je snel of het adres dat jij wilt nog vrij is. Combineer het met een hostingpakket en je kunt direct aan de slag met een website maken! Inclusief gratis SSL voor een versleutelde verbinding, automatisch geregeld en standaard aan.
P.S. Op de hoogte blijven van alle artikelen, updates, tips en trucs die op ons blog verschijnen? Volg ons via Facebook, Twitter, Instagram, RSS en e-mail!