De Digital Security-groep van de Nijmeegse Radboud Universiteit heeft op de European Symposium on Research in Computer Security (Esorics) de details bekendgemaakt van zijn ontmanteling van NXP‘s Mifare-smartcards. Via twee conferentiepapers toont de groep van Bart Jacobs manieren om de geheime sleutels uit kaartlezers te peuteren en wat er eventueel nog aan te doen is om de veiligheid van Mifare op te krikken.
NXP‘s Mifare-chips worden wereldwijd ingezet in elektronische portemonnee- en authenticatietoepassingen. In essentie bestaat de chip uit een al dan niet herschrijfbaar geheugen en een circuit om dit geheugen cryptografisch te beschermen. Mifare Classic vindt onder meer zijn toepassing in de ov-chipkaart en zijn Londense evenknie, de Oyster Card. De Mifare Classic-technologie wordt door een bedrijfseigen, geheime encryptiemethode genaamd Crypto1 beschermd. Dat is wat de Nijmegenaren beschrijven in een artikel met Flavio Garcia als hoofdauteur. Bovendien maken ze manieren bekend om zwakheden in dit algoritme te exploiteren. Ze kondigden hun ontmanteling al in januari aan, maar gaven NXP nog tot nu de kans om maatregelen te nemen. De chipmaker probeerde in deze zomer nog om via de rechter een verbod op publicatie af te dwingen, maar kreeg nul op rekest.
De Nijmegenaren wisten het algoritme te achterhalen door het afluisteren en manipuleren van het radioverkeer tussen tag en reader. Verschillende hardware is daarvoor tegen lage kosten beschikbaar. Uiteindelijk publiceren ze twee succesvolle aanvallen om de sleutels aan een reader te ontfutselen. Een ervan vereist een meting van enkele tientallen minuten aan de reader en een vooraf berekende tabel van een terabyte. De tweede aanval is met normale hardware in minder dan een seconde uit te voeren zonder vooraf opgestelde tabellen.
De beveiliging van de chips berust op van te voren afgesproken geheime sleutels, die zowel de kaart als de reader weten. Elke Mifare-kaart bevat meerdere geheugensectoren, elk met hun eigen unieke sleutel. Bovendien heeft elke kaart in omloop zijn eigen unieke identificatienummer. Na identificatie zendt de reader een authenticatieaanvraag naar de kaart voor een bepaalde geheugensector. Zowel de tag als de reader sturen elkaar een challenge, een getal dat ze met de gezamenlijke sleutel moeten bewerken. Als de uitgedaagde partij hetzelfde antwoord terugstuurt op de challenge als dat de uitdagende partij zelf heeft berekend, dan heeft die bewezen dezelfde sleutel te bezitten. Encryptie gebeurt door elke te verzenden bit te Xor-en met een bit die het cryptografiealgoritme genereert, de zogenaamde sleuteltekst.
Het probleem met Mifare Classic is dat de challenge die de kaart verzendt, afhankelijk is van de opstarttijd. En de challenge die de reader verzendt, is daar weer afhankelijk van. Door deze tijd te beheersen, is het systeem dus geheel deterministisch te maken. Nadat de tag zijn challenge heeft verzonden, is alle uitgewisselde informatie versleuteld. Maar omdat de daaropvolgende antwoorden bekend zijn, kan de sleuteltekst daar via een Xor-operatie worden uitgehaald. Dat geeft informatie over de interne toestand van het cryptografiealgoritme. Bovendien kan een aanvaller nog meer informatie halen door bijvoorbeeld het authenticatieproces te onderbreken waardoor de reader een haltcommando stuurt. Ook hier is weer de sleuteltekst uit te destilleren.
Het cryptografiealgoritme blijkt nu een vrij eenvoudig lineair feedback shift-register (LFSR) te zijn, een systeem dat steeds een nieuwe generatie bits genereert door het combineren van een aantal bitposities in de huidige generatie. Dergelijke systemen zijn eenvoudig niet-lineair te maken, wat betekent dat uit een toestand niet kan worden teruggerekend naar de vorige situatie. In het Mifare-geval kan dat echter wel. Het LFSR wordt geïnitialiseerd met een combinatie van de geheime sleutel, de identificatiecode van de kaart en de challenge die de kaart stuurt.
Door nu een groot aantal authenticatiepogingen te doen met dezelfde kaart-ID, maar verschillende challenges, kan er een groot aantal keren de daaropvolgende sleuteltekst worden verkregen voor de eerste paar stappen. Met deze sleuteltekst kan nu de interne status van het LFSR worden gereconstrueerd, via een van te voren opgestelde tabel. Het maken van deze terabyte-grote tabel kost ongeveer een middag rekenwerk op normale hardware. Door nu de LFSR terug te laten rekenen, kan uiteindelijk de sleutel worden gevonden.
De bits die het LFSR uitspuugt, worden nog wel eerst door een filterfunctie gehaald, voordat ze worden ingezet als sleuteltekst. Deze functie is echter omkeerbaar en dat gebruiken de Nijmeegse wetenschappers voor hun tweede, geavanceerdere aanval. Door de verkregen sleuteltekst uit een enkele authenticatiesessie in te zetten in de omgekeerde filterfunctie, krijgen ze 216 kandidaat-sleutels. Met een tweede authenticatiesessie met andere beginwaarde blijft hieruit nog maar een enkele sleutel over.
De vraag dringt zich nu op of Mifare Classic nog wel te gebruiken is. In een tweede conferentiepaper getiteld ’Making the best op Mifare Classic‘ gaat Wouter Teepe van de Nijmeegse vakgroep op deze vraag in – hoewel hij toegeeft dat de aanbevelingen niet gepeerreviewd zijn en het artikel vooral ook als een academische oefening moet worden beschouwd. Er zijn twee manieren waarop de veiligheidslekken zouden kunnen worden misbruikt. Ten eerste kan een kwaadwillende het geheugen op zijn kaart direct manipuleren, bijvoorbeeld om het budget in zijn elektronische portemonnee te verhogen. Een andere mogelijkheid is om een kaart te klonen. Voor beveiligingstoepassingen is het dan genoeg om een kopie van de kaart te maken. Bij een elektronische portemonnee zou de aanvaller steeds een kopie van de originele kaart moeten maken voordat die is gebruikt.
Het verschilt volgens Teepe nogal welke technologie wordt gebruikt. Het scenario met gekloonde data op een lege kaart is bijvoorbeeld makkelijker te detecteren dan het gebruik van een compleet bestuurbare kaartemulator, die werkelijk alle karakteristieken kan nabootsen.
Voor zowel klonen als het herstellen van een eerdere staat geeft het paper echter praktisch implementeerbare handvatten, die overigens nog wel wat voeten in aarde hebben. Een van deze methoden is ook onderzocht en verbeterd door NXP en TNO.
Teepe kan het echter nalaten te schrijven dat Mifare Classic best nog wel eens meer fouten kan bevatten, die later aan het licht zullen komen. Beide artikelen sluiten dan ook af met het aloude principe uit de cryptografie dat de beveiliging van een systeem alleen gebaseerd zou moeten zijn op de geheimhouding van de sleutels en niet op geheime algoritmes.