Google 2-step authentication

Een van de vele ontwikkelingen op het gebied van security is 2 Factor Authenticatie en Google heeft daarvoor een setje tools ontwikkeld rond de open standaarden HOTP en TOTP. In deze blog wil ik deze tools, het nut, de kracht en de beperkingen bespreken.

De belangrijkste toepassing is in deze suite is Google Authenticator. Deze tool vervult de rol van software token en berekent om de 30 seconden een nieuwe verificatie code bij een vooraf uitgewisseld geheim. Dit geheim bestaat uit een 16 karakters lange code die makkelijk door middel van een QR code gescanned kan worden. Iedereen die deze code kent, kan de verificatiecode maken.

Daar zit ‘m meteen de zwakte van de verificatie: Als de code (in sommige kringen ook wel seed genoemd) gecompromitteerd wordt is de verificatie waardeloos en blijft alleen de eerste factor (meestal naam/wachtwoord) over. Omdat zowel de gebruiker als de server die authenticeert beide de code moeten kennen is ook de laatste mogelijk een zwakke schakel in de keten. Net zoals het geboden is voorzichtig om te springen met wachtwoorden van gebruikers zal ook deze seed met grote zorg behandeld moeten worden.

Om de eenvoud van deze 2e factor te demonstreren heb ik een simpele Google Authenticator testpagina gemaakt op basis van de PHPGangsta GA PHP Class. Installeer de Google Authenticator app op je favoriete mobiele platform en scan de QR code op http://www.m-7.nl/ga. Zie vervolgens hoe zowel de server als uw mobiele telefoon tegelijk dezelfde verificatiecode genereren op basis van deze code en het verloop in de tijd: de basis voor (sterke) authenticatie op de 2e factor is gelegd.

De Class vereenvoudigt niet alleen het genereren (en daarmee controleren) van de verificatiecode op basis van de seed maar maakt het genereren van de benodigde BASE32 secrets ook een stuk eenvoudiger.

De app is zeer eenvoudig te bedienen. Voor elke online applicatie wordt de bijbehorende secret ingevoerd dmv het toetsenbord of QR code en vervolgens worden voortdurend alle bijbehorende verificatiecodes en hun resterende geldigheid getoond.