Smartcard Programmeren voor Dummies

[ Index | Smartcards | Dreambox ]

1. Programma's schrijven: CPU

Voor iemand die al assembler geprogrammeerd heeft, een eitje. Download de AVR Studio en maak een nieuw project. De standaard FUN kaart (alle types) heeft een AT90S8515 processor aan boord. Dus kies dat type in AVR studio, en voor de interne emulatie.

Heb je geen assembler ervaring, dan helpt de AVR ASM Tutorial je ongetwijfeld verder. Experimenteer eerst met wat rekenwerk enzo in de emulator, en hoe je bijvoorbeeld een "if ... then ... else ..." constructie programmeert.

2. Communicatie: Seriele poort?

Nu komt valkuil 1. De CPU heeft een ingebouwde UART (seriele poort dus). Ik nam eerst ook aan dat die wel met de buitenwereld verbonden zou zijn. Maar mooi niet dus - en als je ISO7816 doorleest, dan weet je waarom. De smartcard heeft iets dat alleen maar lijkt op een seriele poort, maar met een paar truucjes.

De IO connector van de smartcard zit direct op pin 6 van PORTB van de AVR processor. Auw, dat betekent inderdaad dat je zelf dat bitje zult moeten besturen. De eerste seriele implementatie bestaat dan ook uit een routine die dat bitje leest en schrijft en door te tellen (elk bitje moet 372 klokcycli duren) een 9600 baud poortje maakt.

3. Opslag: Interne EEPROM

Die halve kilobyte RAM ben je kwijt als iemand de kaart verwijdert of reset, dus je wilt een wat veiliger plekje vinden. De interne EEPROM biedt je de mogelijkheid om data permanent op te slaan.

De EEPROM gebruikt 4 poorten. Eentje houdt de status bij (schrijven of lezen enzo), eentje zet je de data in of lees je de data uit, en twee vormen samen het adres (hoge/lage 8 bits) waar je leest of schrijft.

De valkuil hier is dat het schrijven naar de interne EEPROM enkele milliseconden kan duren - een eeuwigheid in processorland. Mijn workaround in de eerste versie van de "logger" was dat ik in een loop beurtelings ging kijken of er seriele data binnen kwam, dan wel of de EEPROM klaar was om een byte te ontvangen. Binnenkomende data van serieel stop ik in een RAM buffer van 256 bytes, en zo lang er data in die buffer zit, blijft hij proberen die in de EEPROM te proppen.

4. Opslag: Externe EEPROM

De interne EEPROM is niet erg groot. Maar we hebben veel meer plaats in de externe EEPROM, die op alle fun kaarten zit. Op een FUN6 is deze maar liefst 1 megabit groot.

De externe EEPROM is wat moeilijker te vinden dan de interne. De externe EEPROM zit namelijk aan een I2C bus, een twee-draads bus verbinding die qua protocol veel op de seriele poort lijkt. Ik ben momenteel nog bezig met de routines voor het lezen en schrijven ervan (met veel hulp van SOSSE code).

Download

Logger versie 0.6 - Met geldige ATR (maar geen functies)
Download logger 0.6
Om te testen hoef je alleen maar logger.hex in de flash te zetten, en de interne EEPROM te laden met logger_eep.hex. Op offset 0x20 in de eeprom begint het loggen (na de letters "LG").
Je kuntde ATR zelf aanpassen, in de interne EEPROM of in de code. De eerste byte is de lengte van de ATR minus 2. De rest is de ATR afgezien van de eerste byte (0x3B).

De log uitlezen doe je met een smartcard programmer (read internal EEPROM). Je kunt de kaart bijvoorbeeld in een Phoenix gebruiken.

Logger versie 0.4. - Pogingen om de ATR aan de gang te krijgen (gejat van FUN6in1 firmware).
Download logger 0.4

Logger versie 0.3 - Eerst "release".
Download logger 0.3

Links

Atmel AVR Studio download. Hier vind je ook de "application notes" met veel onmisbare voorbeelden, zoals interrupts, EEPROM, timers, en info over de AVR processors.

ISO 7816 standaard het standaard document dat definieert hoe smartcards moeten werken. In principe voldoet dus elke gangbare smartcard hieraan, dus ook je bankpas, SIM- of telefoonkaart.

Simple Operating System for Smartcard Education Ik kreeg het niet aan de praat, maar de informatie in dit project was voor mij van onschatbare waarde. Onder andere de routines voor de seriele communicatie en de externe EEPROM komen hieruit.

AVR ASM Tutorial om assembler voor de AVR chips te leren. Met eenvoudige programma's, en heel veel uitleg.


MailContact me
My Homepage: Mike Looijmans