Problemet med NemIDs "generelle sikkerhed"
Da Version2 i november demonstrerede hvor let det er, at stjæle en persons NemID ved hjælp af "real-time phishing" var svaret, at det var et "teoretisk angreb." Da det i dag blev offentliggjort--som mange af Version2's læsere sikkert allerede havde anet--at angrebet fungerer helt fint i praksis, var svaret så at det ikke "ændrer i den generelle sikkerhed ved NemID." Det er rigtigt at det ikke ændrer noget, men lad os lige definere hvad "den generelle sikkerhed i NemID" er:
NemID som "digital signatur"
NemID markedsføres aggressivt som en digital signatur, og vist er det digitalt, men det har ikke rigtig noget med signaturer at gøre (med mindre "digital signatur" kun betyder, at det bliver brugt til at udføre handlinger som man normalt skal skrive under på--og så er det ret misledende.)
NemID lader dig logge ind med brugernavn og password, og beskytter den indlogning med to-faktor-autenticering i form af det fysiske nøglekort, eller det digitale nøglekort på mobiltelefonen. Det betyder, at en ondsindet person ikke normalt kan komme langt da de, selvom de opsnapper brugernavn og password, skal vide hvilke nøgler der er på nøglekortet, og hvilken af de nøgler, siden spørger om. Det kan man, som der nu er demonstreret i praksis, komme rundt om ved at være "med på linjen", men generelt er det en god og effektiv sikkerhedsmekanisme.
Men det er "to-faktor-autenticering", ikke en signatur (i dens oprindelige, kryptografiske forstand.)
Digitale signaturer--som de, der blandt andet bruges i SSL--virker ved at hver person har både en offentlig og en hemmelig signatur. Den offentlige signatur kan frit distribueres, medens den hemmelige signatur opbevares et sikkert sted, f.eks. på en hardware-dongle. Sammen udgør signaturerne et digitalt certifikat.
Når en anden person, eller netbank, vil sende personen--lad os kalde hende Alice--en besked, krypterer de beskeden ved at bruge Alices offentlige signatur som en slags "opskrift" for krypteringsalgoritmen således at den krypterede tekst kun kan dekrypteres ved at bruge hendes hemmelige certifikat i algoritmen.
Det betyder at parterne ikke behøver at komme overens om en nøgle, der skal bruges til kryptering (hvilket ville ske på en ukrypteret forbindelse, og ville kunne opsnappes af en mellemmand.) Ergo betyder det, at begge sider kan kommunikere med hinanden uden at sende hemmelig information ud på internettet. Det betyder også, at de kan bekræfte hinandens identitet, uden at bekymre sig om, hvad der sker på linjen mellem dem. Det eneste en mellemmand vil kunne få fat på er begge parters offentlige certifikat, hvilket de kun vil kunne bruge til at sende dem beskeder, ikke til at dekryptere nogle af de beskeder, parterne har sendt til hinanden, eller til at fremstå som en af parterne--samt den krypterede tekst, som de, hvis der bruges en stærk algoritme, ikke vil kunne cracke i den nærmeste fremtid.
NemID bruger som sagt ikke denne mekanisme, men lad os beskrive hvordan det kan implementeres, ved at bruge BankID fra vores nabo, Sverige, som eksempel:
I Sverige udsteder de store banker et specielt kreditkort, der indeholder et (rigtigt) digitalt certifikat, til deres kunder. Kunderne får samtidig en kortlæser som kan tolke informationen på kreditkortet, samt kommunikere med BankID via personens pc. Kunden installerer også BankID-programmet, der blandt andet indeholder driveren til kortlæseren, på deres pc.
Sådan foregår indlogningen:
- Alice går ind på Handelsbankens svenske hjemmeside, og klikker på Netbank
- Netbanken sender en krypteret besked til BankID-programmet på maskinen, der kontrollerer at beskeden kommer fra en person, der har BankIDs hemmelige signatur
- Programmet viser en UAC-popup, der beder Alice bekræfte, at hun vil logge ind
- Hvis Alice bekræfter handlingen bedes hun indtaste pinkoden til hendes digitale certifikat på kortlæseren
- Hvis pinkoden er korrekt låses den hemmelige signatur på kreditkortet op, og bruges til at lave en besked, der bekræfter, at Alice vil logge ind. Den besked krypteres så ved brug af BankIDs offentlige certifikat, og sendes til BankID-serveren, der kontrollerer at beskeden kommer fra en person med Alices hemmelige certifikat, og at beskeden faktisk er et svar på den besked, den oprindeligt sendte
Der er to store fordele ved denne metode:
- Begge parter kontrollerer hinandens identitet, og afbryder forbindelsen hvis der er noget galt. Det betyder, at det ikke er muligt at udføre samme type angreb, som det mod NemID, fordi Alices pc afbryder forbindelsen så snart, den ser, at den phishing-side de er kommet ind på, ikke har BankIDs hemmelige certifikat. (Selv hvis man snyder klienten, vil det, den sender, stadig være krypteret ved hjælp af BankIDs offentlige nøgle, og kun serveren med den hemmelige nøgle kan dekryptere det.)
- Man kan ikke løbe tør for koder (fortsat nedenfor)
Implementationen af NemID
De fleste danske banker bruger kun NemID til indlogning. Det vil sige, at har du først logget ind, kan du gøre lige hvad du har lyst til, inklusive overføre penge. Årsagen til dette er formentlig, at koderne på nøglekortet ville blive brugt for hurtigt, hvis det blev brugt mere aggressivt.
Det problem har det digitale certifikat ikke. Derfor bekræfter man enkelte handlinger på samme måde, som når man logger ind: Serveren sender forespørgslen til klienten, der kontrollerer at den kommer fra det rette sted, og klienten svarer så--hvis Alice godkender at hun vil overføre 500kr til Bob--med en besked, der kun kan læses af serveren, og serveren kontrollerer så, at godkendelsen kom fra Alice.
Malware
Et argument, der ofte bruges for NemID er, at Java-appleten kan bruges til at lede efter malware på kundens pc, før det lader dem logge på. Det er helt rigtigt, men det betyder ikke, at der behøves bruges Java--og det samme opnåes med det BankID-program, der installeres på pc'en. En vigtig forskel er, at BankID er installeret før en person bliver udsat for phishing, og kan afbryde forbindelsen hvis maskinen på den anden side ikke er den rigtige, altså hvis Alice ikke faktisk er i kontakt med BankID. NemID beskytter ikke mod phishing-sider, der fremstår som at være NemID, da der ikke er noget på maskinen, der kan kontrollere det.
En anden interessant funktion, der udnyttes af BankID, er Windows' UAC. UAC virker ved at skifte til et helt andet skrivebord (baggrunden, man ser, når en UAC-prompt er oppe, er egentlig bare et screenshot), der ikke kan tilgåes af andre programmer, f.eks. keyloggers. Det betyder, at et ondsindet program har meget svært ved både at følge med, men også med at automatisere processen, og få brugeren til at godkende noget andet end det, de har bedt om. UAC-vinduet viser eksempelvis hvor mange penge man er i gang med at overføre, og til hvem. Indtastningen af pinkoden på kortlæseren bekræfter handlingen.
BankID er langt fra perfekt, men det forhindrer det angreb, banker i Danmark har været udsat for flere gange, og det er et rigtigt, digitalt certifikat--så der er to ting, der slår mig, når jeg læser Nets DanID's svar på "teoretiske" og praktiske angreb:
Hvorfor samarbejder Nets DanID, eller staten, ikke med andre for at øge sikkerheden, når andre, så tæt på som i Sverige, har en velfungerende løsning, der forhindrer denne type angreb? Hvorfor skal hjulet genopfindes--og hvorfor i skjul? Det er stik imod Kerckhoffs' princip, og almen, kryptografisk praksis.
Hvorfor virker det ikke til, at der lyttes til input fra offentligheden, inklusive de fleste af landets førende sikkerhedseksperter, når systemet berører (og kan skade, økonomisk og personligt) næsten alle danskere?

...men det er dyrt at lave god journalistik. Derfor beder vi dig overveje at tegne abonnement på Version2.
Digitaliseringen buldrer derudaf, og it-folkene tegner fremtidens Danmark. Derfor er det vigtigere end nogensinde med et kvalificeret bud på, hvordan it bedst kan være med til at udvikle det danske samfund og erhvervsliv.
Og der har aldrig været mere akut brug for en kritisk vagthund, der råber op, når der tages forkerte it-beslutninger.
Den rolle har Version2 indtaget siden 2006 - og det bliver vi ved med.