Wachtwoorden vormen een zwakke schakel in elke beveiliging. Daarom wordt de kennis van een wachtwoord steeds vaker aangevuld met iets wat wij bezitten. Alleen moet dat niet zoals DigiD heeft bedacht...

hetlab logo
Henk van de Kamer

 


In de vorige aflevering had ik geen goed woord over voor de nieuwe DigiD-app  die nodig is voor het ‘veiliger’ inloggen bij de zorgverzekeraar. De manier waarop deze app werkt, deed mij vermoeden dat onze overheid zelf iets in elkaar heeft geknutseld. Na het schrijven herinnerde ik mij vaag een app waarmee inloggen via OTP (One Time Password, https://nl.wikipedia.org/wiki/Eenmalig_wachtwoord) mogelijk is. Deze heb ik intussen weer gevonden en voor een tweetal Google accounts geactiveerd (www.hetlab.tk/obelix/freeotp). Waarmee ik nu zeker weet (www.hetlab.tk/algemeen/geldverspilling) dat onze overheid het wiel opnieuw heeft uitgevonden. Hoeveel geld iemand daarvoor heeft ontvangen, mag iemand anders gaan uitzoeken. Maar het zou mij niets verbazen als dit wangedrocht vele miljoenen heeft gekost...

Gesproken SMS
Voordat ik de FreeOTP-app (https://github.com/freeotp) ga uitleggen, wil ik nog even wijzen op een tip die ik van mijn zorgverzekeraar kreeg. Uiteraard had ik daar een klacht neergelegd over het feit dat de nieuwe premie ook gewoon per mail verstuurd kan worden in plaats van alle hoepels waar ik nu doorheen ben gesprongen. Blijkbaar hebben meer mensen moeite met SMS via een mobieltje en heeft DigiD naast deze en de nieuwe app ook een gesproken SMS dienst (www.hetlab.tk/algemeen/digid-via-vaste-telefoon) via de vaste telefoon geïntroduceerd. Deze zit verstopt in de controle via SMS. Als je in plaats van een 06-nummer een vast nummer invult, verschijnt er automatisch een optie met de vraag of je een gesproken SMS-bericht wil. Je wordt dan via een anoniem nummer – minpuntje! – opgebeld en vervolgens geeft een Nederlandse computerstem een zestal cijfers die je op de computer intikt. Volgens mij is het geen echte SMS, want die naar mijn vaste telefoon hebben nooit gewerkt omdat – voor zover ik heb begrepen – mijn provider dat niet ondersteunt. Ook dit systeem is wat mij betreft geen echt bezit, omdat het via het internet – vaste telefoon is tegenwoordig meestal VoIP – is af te luisteren. Maar van de drie is dit wel de meest veilige...

FreeOTP
OTP
De broncode van de DigiD app is niet beschikbaar, maar is hopelijk   gebaseerd op de OTP-specificatie. Er zijn meerdere varianten, maar ze gaan allemaal uit van een sleutel – lang, willekeurig getal – en een teller. Die laatste kan afgeleid zijn van de huidige tijd of gewoon een getal dat na elke succesvolle login wordt opgehoogd. Zowel de sleutel als de teller is aan beide kanten van de verbinding bekend. Via een wiskundige formule wordt een getal berekend en dat zal voor elke combinatie van sleutel en teller een unieke waarde opleveren. Waarmee sleutel en teller als bezit gezien kunnen worden.

Het enige probleem dat nog opgelost moet worden, is het uitwisselen van de sleutel. Want die mag nooit in handen van een derde partij vallen! Google gaat ervan uit dat https – versleutelde website – veilig genoeg is om een QR-code te versturen met daarin de sleutel. Die scannen we via de FreeOTP-app, waarna het systeem klaar is voor gebruik. Alleen voor het installeren van de app is een internetverbinding nodig, daarna kan – en voor mij is dat een vereiste – het systeem volledig off-line werken. Zodra Google om een code vraagt, open je de app en tikt vervolgens de gegenereerde code over. Nogmaals, alleen met de juiste sleutel en teller zal deze hetzelfde zijn als Google heeft berekend, ofwel het is daarmee een tweede factor: iets wat je bezit. De kans dat iemand tijdens het aanmaken en scannen van de QR-code meekijkt is verwaarloosbaar, maar niets weerhoudt ons ervan om de sleutel – gecodeerd in een QR-code – via een brief te versturen.

DigiD-app
Vergelijk bovenstaande werking met de DigiD-app. Laten we beginnen met de sleutel. Deze wordt vermoedelijk uitgewisseld als we via de DigiD-app inloggen op deze dienst. Of die verbinding beveiligd is, kunnen we door het ontbreken van de broncode niet controleren. Nog vreemder is dat er voor het uitwisselen überhaupt een internetverbinding nodig is. Google bewijst dat het ook prima zonder kan. De doodsteek voor de Digi- app is dat na activatie via de brief – een veel te klein getal om de sleutel te zijn – opeens QR-codes gescand moeten worden om in te loggen. En ook dat werkt alleen maar als de mobiele telefoon verbonden is met het internet. Over en weer wordt flink wat data uitgewisseld en ook hier kan ik niet controleren of stiekem niet mijn adresboek of foto’s worden overgedragen. Ik vertrouw de DigiD-app voor geen meter (www.hetlab.tk/algemeen/geldverspilling) en heb subiet deze inlogmethode weer verwijderd...

FIDO U2F
Het grootste probleem van FreeOTP is het uitwisselen van de sleutel. Dat moet eigenlijk via een onafhankelijk kanaal om het meekijken te bemoeilijken. Momenteel gaan bijna alle kanalen via het internet en blijft alleen de ouderwetse brief met QR-code als echt onafhankelijk kanaal over. Dat is omslachtig, maar gelukkig is er een veel betere oplossing waarbij het kanaal rustig afgeluisterd mag worden. De truc is een sleutelpaar waarbij we het publieke deel rustig aan iedereen kunnen geven. Berichten die daarmee worden versleuteld, zijn alleen leesbaar te maken met de bijbehorende geheime sleutel. Die laatste is dan het bezit. Ik kan aan onze overheid zo’n publieke sleutel geven, waarna zij een random getal – vergelijkbaar met wat OTP gebruikt – versleutelen. Alleen ik kan dat getal leesbaar maken en vervolgens als code intikken om aan te tonen dat ik over de gekoppelde geheime sleutel beschik.

FIDO U2F 3363 07

Mijn FIDO U2F sleutel à € 12,95

Uiteraard wil ik zo’n geheime sleutel niet op een onveilig mobieltje. Sterker nog, eigenlijk wil ik het ook niet direct op mijn computer. De oplossing is een FIDO U2F – Universal Second (2) Factor – sleutel (www.adafruit.com/product/3363). Dat is een microcontroller met usb-aansluiting en fysieke drukknop. De eerste maakt voor elke website een sleutelpaar en geeft de publieke door aan de computer via de usb-aansluiting, maar alleen als een gebruiker op de knop heeft gedrukt. Dat laatste is essentieel, want zelfs als mijn computer volledig is gehackt, is het nog steeds niet mogelijk om op afstand een druk op de knop te simuleren. Het klinkt complex, maar in de praktijk is het heel eenvoudig. De website waar we onze sleutel als tweede factor willen gebruiken, doet daartoe een verzoek. De browser geeft dat verzoek door aan de sleutel, waarna de groene led in de drukknop gaat knipperen. Uiteraard druk ik alleen op de knop als ik weet dat dit nodig is! Daarna gaat alles vanzelf. Helaas werkt dit aanmelden van de sleutel voor de Google-diensten op dit moment alleen voor Chrome. Na aanmelden kan voor het inloggen ook Firefox gebruikt worden. De oorzaak is dat Google een voorlopige specificatie heeft geïmplementeerd en die is niet volledig compatibel met de definitieve versie die Firefox gebruikt. In de toekomst zal dat opgelost worden, op andere websites werkt alles in allebei de genoemde browsers. Ik weet niet of Microsoft het ook in zijn browser heeft geïmplementeerd, maar technisch zou dat geen probleem moeten zijn.

Tot slot
Gelijk met het lanceren van DigiD in 2005, koos de Belgische overheid voor een systeem dat vergelijkbaar – voor zover ik weet kan eID niet overweg met een uniek sleutelpaar voor elke website – is met bovenstaande sleutel. Het gaat om een cryptografische chip in het paspoort, die via een usb-reader ondervraagd kan worden. Helaas heb ik als Nederlander geen gebruikerservaring, maar het is voor zover ik kan nagaan superieur aan DigiD. Hoeveel belastinggeld dat systeem intussen heeft gekost, is vast niet meer te achterhalen. Maar zelfs met de nieuwe lapmiddelen is het systeem nog steeds beveiligingsniveau middel. Voor niveau hoog wil onze overheid uiteindelijk net zoals veertien jaar geleden in België, een chip in de identiteitsbewijzen gaan gebruiken. Hopelijk werkt die chip dan op basis van de FIDO U2F specificatie, want dan is het opeens een universele tweede factor.