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 1 e
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 3 e 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 1 e 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: |
|
|
Schrijven: |
|
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.
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.
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.
KabelsZoals 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.
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.
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 PCs
is LPT1 aanwezig, dus volgens mij is deze test voldoende. Hieronder
staat nog een schermafdruk van het programma.
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
|