Atom Nieuws jaargang 2000 nummer 1
../../../images/back.gif ../../../images/exit.gif ../../../images/forward.gif
pagina 4
Atomic Windows

Telefoonkaart lezer

Inleiding:

Bij het programma computerclub op Duitsland 3, was laatst een onderwerp dat ging over het uitlezen van telefoonkaarten. Dit leek me interessant en ik ben op internet gaan zoeken naar artikelen over dit onderwerp. Zoeken op het onderwerp ‘telefoonkaart’ in diverse talen leverde niet veel op, alleen een aantal sites waarop telefoonkaart- verzamelingen staan of verzamelaars die kaarten willen ruilen. Wel kwam ik op enkele van die sites de kreet ‘Smartcard’ tegen, waarnaar ik toen ben gaan zoeken. Over dit onderwerp is veel te vinden, bijvoorbeeld de ISO-norm voor smartcards, de werking van telefoonkaarten, het zelf bouwen van een smartcard lezer tot zelfs een telefoonkaart emulator toe!! Gewapend met deze informatie, ben ik een telefoonkaart lezer gaan bouwen. Dit stelt op zich niet zoveel voor, kijk maar naar de tekening in het hoofdstuk ‘hardware’. De rest is een kwestie van software

In de loop der jaren zijn er een aantal generaties smartcards uitgebracht. De meeste kaarten zijn te herkennen aan de opbouw van de contacten. De verschillende generaties zal ik in het kort hieronder beschrijven.

1e Generatie:

Van de 1e generatie smartcards waren 2 varianten in omloop. De eerste variant was in gebruik in Frankrijk en Monaco, en de andere variant in Zweden, Spanje, Noorwegen, Andorra, Ierland, Portugal, Tsjechië, Gabon en Finland. Enkele leveranciers van deze kaarten zijn Solaic, Gemplus, Schlumberger en Oberthur.

Deze generatie smartcards was vrij eenvoudig van opzet. In principe was het een N-MOS EPROM van 256 bit waarvan de eerste 96 bits ‘write protect’ waren gemaakt door na het programmeren een zekering door te branden. Vanaf bit 96 tot het einde staat de kaart vol geschreven met ‘0’. De eerste 10 bitjes waren in de fabriek op ‘1’ gezet om de kaart te testen. Afhankelijk van het aantal units op de kaart, welke aangegeven staat in byte 12 van de ‘write protect’ bytes, werd tijdens het telefoneren bij elke tik een ‘0’ naar een ‘1’ verandert. Omdat men een bitje alleen maar van ‘0’ naar ‘1’ kon schrijven, was de kaart meteen beveiligd tegen opwaarderen. Dit was niet mogelijk. Het nadeel van de gebruikte techniek was dat er 2 spanningen nodig zijn om de kaart te kunnen gebruiken, 21V om de bitjes van ‘0’ naar ‘1’ te schrijven en 5V om de kaart uit te lezen. De kaart was ook vrij eenvoudig te emuleren waardoor er gemakkelijk fraude mee gepleegd kon worden. Dit leidde tot een nieuwe generatie smartcards. Dit type kaart is momenteel niet meer in gebruik.

2e Generatie:

Deze kaarten zijn nog steeds in omloop in Nederland, Duitsland, en Griekenland. Enkele leveranciers van deze kaarten zijn Uniqua, Solaic, Gemplus, Schlumberger en Oldenbourg Kartensysteme.

De smartcard van deze generatie is iets anders van opzet dan de vorige. De EPROM is vervangen door een EEPROM van 128 bits waarvan de eerste 64 bits ‘write protect’ zijn gemaakt door ook hier een zekering door te branden na het programmeren. Men heeft nu alleen maar 5V nodig om bitjes te schrijven of te lezen. Omdat het nu mogelijk was om bitjes te wissen en te zetten, was men niet meer gebonden aan het principe van elke tik is een bitje. Het aantal tikken kon nu als een 5 bytes counter opgeslagen worden. Er is echter ook een beveiliging aangebracht, dat er alleen maar een lagere counter waarde op de kaart geschreven kan worden dan er al stond. Het is dus ook hier niet mogelijk om deze kaarten op te waarderen.

De huidige telefoonkaarten van PTT Telecom zijn van deze generatie maar omdat er steeds meer en beter beveiligde informatie nodig was is er een nieuw type smartcard ontwikkelt, de 3e generatie.

3eGeneratie

Op deze smartcards is een complete microcontroler met eigen operating system geplaatst waardoor het mogelijk werd om nog meer data veilig op te slaan. De beveiliging van deze kaarten bestaat meestal uit een PIN-code en dataencryptie waardoor het moeilijk wordt om hiermee fraude te plegen. Deze kaarten worden onder andere gebruikt in GSM telefoons, als bank pasjes, in TV decoders en als Chip-Knip kaarten.

PTT telefoonkaart:

Over deze kaart wil ik wat meer vertellen omdat dit de meest interessante kaart is waarvoor de hard- en software gemaakt zijn. In Nederland kent men in principe 2 type telefooonkaarten welke aan de vorm van de contacten op de kaart te herkennen zijn. De leveranciers van deze kaarten zijn: Gemplus en Oldenbourg. Gemplus kaarten zijn wat ouder dan de Oldenbourg kaarten. De memory mappen van de kaarten zijn verschillend. Ik heb gedeeltelijk terug kunnen vinden wat de betekenis van de bytes zijn maar er zijn nog steeds een aantal bits waarvan ik niet zeker weet wat ze betekenen. De memory-map indeling is als volgt:

Issuer Code:

Deze code staat in Nederland bij Gemplus- altijd op #80 en bij Oldenbourg kaarten altijd op #D8.

Type kaart:

De waardes die ik uit de documentatie gehaald heb, gelden voor de oudere kaarten (Gemplus). Voor de nieuwere kaarten heb ik een waarde #1A gevonden welke nergens in de documentatie terug te vinden is. Ik heb maar

Maxwaarde:

Voor de maxwaarde stond in de Gemplus documentatie dat bv. een kaart van Fl 5,= byte 4 de waarde #42 moest hebben terwijl ik verschillende kaarten geprobeerd heb welke verschillende waardes bevatte. Daarom staan er bij Fl 5,= twee waardes.

Serienummer:

Op de kaart zijn maar 5 cijfers van het serienummer terug te vinden. Het gaat bij dit nummer dus waarschijnlijk om een complete serie kaarten omdat bij enkele geteste kaarten hetzelfde nummer stond. Het is dus geen uniek nummer.

Een byte van het serienummer is uit 2 nibbles opgebouwd, een hi- (bit 4-7) en een lo-nibble (bit 0-3). De bitjes van de nibble moeten niet van rechts naar links maar van links naar rechts gelezen worden, achterstevoren dus. De laagste bit staat dus links. De volgorde voor het serienummer is: lo-nibble byte 8, hi-nibble byte 8, lo-nibble byte 7, hi-nibble byte 7, lo-nibble byte 6. De hi-nibble van byte 6 is mij onduidelijk waar deze voor is.

Octale counter:

Het geld tegoed wat nog op de kaart staat is als octaal getal opgeslagen. Het aantal bitjes van een byte wordt bij elkaar opgeteld (voor bv. bytenummer 13 stellen we dit voor als B13) en vermenigvuldigd met 8^n. De formule om het tegoed te berekenen is dan als volgt

Totaal= B9*4096+ B10*512+ B11*64+ B12*8/td>+ B13
         8^4          8^3          8^2          8^1   8^0

Bytenr.GemPlus Bytenr.Oldenbourg

1

Issuer Code:
#80
 

1

Issuer Code:
#D8

2

Landcode:
#77, Nederland
 

2

Landcode:
#37, Nederland

3

#FF

 

3

#FF

4

Type kaart:
#4A, Oldenbourg
#CA, Gemplus
#2A, Solaic
#8A, Giesecke & Devrient
 

4

Type kaart:
#1A, Oldenbourg??

5

Maxwaarde:
#62, Fl 25,=
#22, Fl 10,=
#42, #4A, Fl 5,=
 

5

Maxwaarde:
#21, Fl 10,=???

6

Serienummer, cijfer 5

 

6

Serienummer, cijfer 5

7

Serienummer, cijfer 4 en 3

 

7

Serienummer, cijfer 4 en 3

8

Serienummer, cijfer 2 en 1

 

8

Serienummer, cijfer 2 en 1

9

Octale counter, byte 5

 

9

Octale counter, byte 5

10

Octale counter, byte 4

 

10

Octale counter, byte 4

11

Octale counter, byte 3

 

11

Octale counter, byte 3

12

Octale counter, byte 2

 

12

Octale counter, byte 2

13

Octale counter, byte 1

 

13

Octale counter, byte 1

14

#FF

 

14

#FF??

15

#FF

 

15

#F8??

16

#FF

 

16

#00??

Van byte 9 worden maar 5 bitjes gebruikt voor het bel tegoed omdat de eerste 3 bitjes weleens gebruikt worden voor een test. Het maximale tegoed op een kaart is dus 4096 x 5 = 20480 eenheden wat overeenkomt met Fl 204,80.

Communicatie:

De kaarten communiceren met een zogenaamd synchroon serieel protocol. Synchroon wil zeggen dat de gebruiker kan bepalen wanneer er op een I/O poort data staat, serieel wil zeggen dat alle communicatie over een I/O bit geschied en protocol wil zeggen dat er bepaalde regels zijn waaraan men zich moet houden om de juiste informatie te schrijven of te lezen. Op de kaarten zitten een achttal contacten waarmee de communicatie met de buitenwereld tot stand wordt gebracht.

De plaats van de contacten op de kaart is gestandaardiseerd volgens de ISO-7813 norm en zijn te onderscheiden in 2 posities, De AFNOR- en de ISO-positie. De AFNOR-positie kan men in principe vergeten omdat deze alleen op de 1e generatie kaarten toegepast werd en nu niet meer gebruikt wordt. De benaming van de contacten van een smartcard is als volgt:


Contactnr.

1e Generatie:

2e Generatie:

1

Vcc (+5V)

Vcc (+5V)

2

R/W

Reset

3

Clock

Clock

4

Reset

n.c.

5

Gnd (0V)

Gnd (0V)

6

Vpp (+21V)

n.c.

7

Data (I/O)

Data (I/O)

8

Fuse

n.c.

Het is mogelijk om naar de kaart te schrijven maar dit heeft weinig zin omdat men hoogstens een gelijke of lager tegoed op de kaart kan schrijven. Ik wil hieronder wel beide mogelijjkheden beschrijven. Ik zal alleen de timing voor de PTT Telefoonkaarten (2e generatie) beschrijven:

Lezen: telkaart-1.gif
 
Schrijven: telkaart-2.gif

Hardware:

Het enigste wat men nodig heeft is een constructie om de contacten van de kaart te verbinden met de I/O poorten van de computer. De lezer die ik gebouwd heb bestaat uit een aantal stukjes printplaat, wat koperdraad, koperen contacten en een connector. Hoe deze onderdelen zijn samengebouwd zal onderstaande tekening duidelijk maken. De opzet was om de lezer zowel met de PC als met de Atom te kunnen gebruiken. Om dit te bewerkstelligen heb ik een standaard lezer gemaakt met 2 verschillende verbindingskabels, een voor de PC en een voor een standaard Atom. Verder heb ik de I/O bitjes van de Atom poort zodanig gekozen dat deze overeenkomen met die van de I/O bitjes van de printerpoort op de PC, maar hierover meer in het hoofdstuk ‘Software’.

De koperdraad is normale elektriciteitskabel welke in huis gebruikt wordt en de contacten zijn gemaakt van een koperen plaatje waarvan ik stukken strip geknipt en in de juiste vorm gebogen heb.


tek5.gif

Tekening 1: opbouw telefoonkaart lezer

Ik heb een oude 3 ½” drive genomen en hier alles uit gesloopt zodat er alleen een frame overbleef. In dit frame heb ik de printplaten op een dusdanige manier gemonteerd, dat de sleuf waar de kaart in moet recht achter de sleuf van het frontje van de diskdrive zit. Het ledje zit recht achter het venstertje waar vroeger de ‘Drive On’ led gezeten heeft.

Schema:
Het schema stelt niet zo veel voor maar ik heb er toch maar een tekening van gemaakt. Het ledje gaat aan wanneer de kaart in de lezer zit en de schakelaar indrukt.

Tel-kaartlezer.gif

De componenten zijn op een van de printplaten geplaatst en het schakelaartje is zo geplaatst dat hij bedient wordt wanneer de telefoonkaart geheel in de sleuf zit en de contacten van de lezer verbinding maken met de juiste contacten op de kaart.

Kabels

Zoals al eerder vermeld, heb ik 2 kabels gemaakt voor de kaartlezer, een voor de PC en een voor de standaard Atom.
Hieronder staan de penaansluitingen.

tek2.gif

De PC kabel is uitgerust met een externe voedingsplug omdat de printerpoort bijna geen vermogen kan leveren. Ik heb een ongebruikte voedingskabel vanuit de PC door een sleuf aan de achterzijde naar buiten gebracht.


tek3.gif

De Atomkabel zit rechtstreeks op connector PL6/7 van de Atom. Hieruit wordt ook meteen de externe voedingsspanning gehaald.

Software:

Ik heb ervoor gekozen om hetzelfde programma, zonder aanpassingen, zowel op de echte Atom als op de PC onder de Atom emulator v1.33 van Wouter Ras te kunnen gebruiken.

Op de PC kun je adres #378 als output poort gebruiken. Hiervan gebruik ik maar 2 bitjes voor het Reset- (Bit 1) en het Clock (Bit 2) signaal. Adres #379 bevat een aantal bitjes welke normaal gesproken door de PC gebruikt worden om signalen van de printer terug te lezen, zoals ‘Error’ of ‘Paper Out’. Hiervan gebruik ik ook weer 2 bitjes, een voor het I/O (Bit 5) signaal en een om de voedingsspanning terug te lezen waardoor ik kan zien of er een kaart in de lezer aanwezig is (Bit 3).

Op de Atom heb ik de contacten van de lezer aan de A-poort van de VIA 6522 geknoopt. Om hetzelfde programma voor de Atom emulator op de PC en een echte Atom te kunnen draaien, heb ik gebruik gemaakt van bitjes 1, 2, 3 en 5 op zowel de A-poort als die van de printerpoort. Dit heeft als voordeel dat ik hetzelfde masker kan gebruiken om een bitje uit te lezen of te schrijven, alleen het adres is anders. De juiste I/O adressen worden meteen aan het begin van het programma gedeclareerd door te kijken of het programma op een PC of een Atom draait. De methode die ik gebruik is om te kijken of op adres #B779 de waarde #B7 staat. Dit is het geval bij een echte Atom, mits er geen uitbreidingen op dat adres gemaakt zijn. Bij de Atom emulator v1.33 van Wouter, lees je op dat adres LPT1 uit wat niet de waarde #B7 bevat. Op 99,9% van de PC’s is LPT1 aanwezig, dus volgens mij is deze test voldoende. Hieronder staat nog een schermafdruk van het programma.

sv69.gif sv70.gif

Opmerking:

Tijdens het experimenteren traden er wat problemen op. Op een oudere PC werkte het geheel niet. De afzonderlijke bits kwamen goed binnen, het programma werkte dus maar om een of andere rede werkte de lezer niet. De oorzaak heb ik niet kunnen achterhalen maar waarschijnlijk is het een timing probleem. De PC had een pentium 90 processor waarop de emulator draaide. Misschien is dit toch te traag om de juiste waardes uit te lezen.

Enkele internet adressen waar documentatie over telefoonkaarten te vinden is, zijn:
http://www.hacktic.nl/magazine/2426.htm
http://www.fornax.planet.sk/~jeeff/Files/TelKarty/How_chip.txt

Tot zo ver het telefoonkaart verhaal.

Kees van Oss

../../../images/back.gif ../../../images/exit.gif ../../../images/forward.gif