Реклама:

В стандарте ISO 7816, нормализующем чип-карты, самая важная информация содержится в трех частях:

• ISO 7816-1 (физические характеристики карт);

• ISO 7816-2 (размеры и расположение контактов); ■ ISO 7816-3 (сигналы и протоколы связи).

В частности, в третьей части зафиксировано, что асинхронная карта, соответствующая этому стандарту, должна самостоятельно выдавать особое сообщение, содержащее не более 33 байт, сразу после завершения операции НАЧАЛЬНАЯ УСТАНОВКА/СБРОС (RESET). Эта операция выполняется тогда, когда на каргу подается напряжение

Питания, но в принципе может быть инициирована в любой момент. Выдача этого ответа на сброс, или ATR (answer to reset), происходит только при наличии синхросигнала, а содержание различно в зависимости от типа карты.

Данное сообщение является своеобразной "личной подписью" карты: оно содержит в себе определенную информацию, часть которой стандартизована, и описывает основные характеристики карты: напряжение и ток программирования, тактовую частоту, кодировку битов данных и пр.

Таким образом, чтение ответа на сброс позволяет более-менее точно узнать, какого типа карта обрабатывается. К тому же это хороший способ основательнее изучить используемый протокол связи и в конце концов убедиться, что он не настолько сложен, насколько могло показаться. Только стандарт ISO 7816-3 является единственным документом, полностью формализующим расшифровку ответа на сброс. Тем не менее ниже приводится несколько примеров информации, содержащейся в ATR.

Самый первый символ имеет особое значение, поскольку указывает на то, в каком формате ISO - прямом или обратном - будет происходить обмен данными. В первом случае байты передаются по линии ISO 7 последовательно, младшими разрядами вперед, а логической единице соответствует высокоимпедансное состояние выхода. Во втором случае обмен происходит старшими разрядами вперед, а логической единице соответствует низкий уровень (0 В).

Если обозначить буквой Z высокоимпедансное состояние, а буквой А - низкий логический уровень, то первый передаваемый символ ATR (вместе со стартовым битом и битом проверки на четность) можно представить следующим образом:

" AZZAAAAAAZ - для карт с обратным форматом передачи;

" AZZAZZZAAZ - для карт с прямым форматом передачи.

При преобразовании в шестнадцатеричный формат по принятым соглашениям это числа 3Fh и 3Bh соответственно. Наличие любого другого символа в начале ATR или же отсутствие ответа на сброс свидетельствует о том, что обрабатывается либо нестандартная, либо синхронная, либо дефектная карта.

1С ЯЕИ - ATR.6AS -

20 KEY OFF XLS

30 РВИТ'Чтение ответа на сброс" :PRIMT :PRINT 40 DPEN С0Л11 :9600,е.8,2" AS "1

50 on EPP0R GOTO 410

60 PRINT"- Вставить асинхронную карту в картоприемник -" :РРШ

70 IF LOC(1)<>0 THEN GOTO 100

80 IF 1NKEY$=CHRJ(27) THEN END

90 GOTO 70

100 TJ=TIHEJ :BEEP

110 IF T$=TIME$ THEM 110

120 A$=""

130 WHILE MOT E0F(1)

140 A$=A$+IHPUTJ(1."1)

150 WEND

160 CL0SEH1

170 C$=LEFT$(A$,1)

180 C=ASC(CS)

190 OS

200 IF C=59 THEN PRINT 'Карта с прямьи форматов ISO" :G0TD 420

210 IF C=3 THEN PRINT "Карта с обратном форматом ISO" :G0T0 23D

220 PRINT'THn ISO асинхронной карты не определен" :END

230 Tt='"":D$=" :PR1MT гРИИГОтвет на сброс (ATR) :' :PR1NT :

240 FOR F=1 TO LEN(AS)

250 N$=MID$(A$.F.1)

260 M=ASC(N$)

270 M=2S5

260 IF N>127 THEN N="-128 :M=h-1 290 IF M>63 THEM N=M-64 :M=M-2 300 IF N>31 THEM N=N-32 :M=M-4 310 IF N>16 THEN N=N-16 :M=M-8 320 IF M>7 THEN N=M-8 :N=M-16 330 IF N>3 THEN M=M-4 :M=h-32 340 IF N>1 THEN N=N-2 :M=M-64 350 IF N>0 THEN M=M-128 360 H$=HEX$№ :D$=DJ+CHRJ(M) 370 IF LEM(M$)=1 THEM N$="0"4+l$ 380 PRINT MS; ' "; T$=TS+M$ 390 MEXT F 400 GOTO 500 410 RESUME

420 T"=":0$="":PRINT : PRINT'otbct на сброс (A7fl) :" :PfflNT : 430 FOR F=1 TO LEN(AI) 440 N$=MID$(A$.F.1) 450 M=AX(N$) :DJ=D$tN$ 460 "=HEK$(N)

470 IF LEN(M$)=1 ГНЕМ M$="D"*M$ 480 PRINT MJ:" ": :TJ=TJ+M$ 490 MEXT F

500 OPEN'atr.car" FOR OUTPUT AS "1 610 K=0

520 FOR F=1 TO LEN(D$)

530 BJ=M1D$(DS.F,1)

540 B=ASC(B$)

550 IF(B AND 128)= 128 THEM PflINT|t1.~1 "; ELSE PRINT#1."0 " 560 IF(B AND 64)= 64 THEM PRINTöl."1 ": ELSE PRINT#V0 "; 570 IF(B AND 32)= 32 THEN PRINT#1,"1 "; ELSE PRlNTfll, "0 560 IF(B AND 1Б)= 1Б THEN PRIMTffVI ELSE PRIMTfll, * 0 \ 590 IF(B AND 8)= 8 THEN PRINTB1, "1 "; ELSE PMHT*1,"0 "; 600 IF(B AND 4)= 4 THEN PRIlVTfll, *1 ELSE PfllNT"1,"0 "; 610 IF(B ANO 2)= 2 THEN PRlNTeVI ELSE PRINTJtl."0 ~; 820 IF(B AMD 1)= 1 THEM PRINTS,"1 "; ELSE PRIMTfll, "0 *; 630 K=K+1

640 IF K>3 THEN PRINTJM. : K=0 650 NEXT F

660 PRINT '.PRINT :EMD

670 FEH (c)1997 Patrick GUEULLE

Программа ATR. BAS была написана для того, чтобы обрабатывать посылку ATR любой асинхронной карты, помещенной в устройство чтения-записи, определять ее стандарт (тип) и создавать файл (ATR.CAR), полностью повторяющий в кодах ASCII содержание ответа на сброс. Так же, как и все остальные программы управления блоком чтения-записи, описанным в этой книге, она снабжена защитой, исключающей всякий риск несвоевременной подачи напряжения на карту, и организована следующим образом:

• до тех пор, пока программа не запущена, устройство не может подать напряжение на карту, даже если ее неоднократно помещали в картоприемник;

" вставлять карту в картоприемник следует только после того, как программа запущена. Если во время запуска программы карта уже была в устройстве, необходимо вынуть ее и вставить вновь;

• сразу после завершения работы (или прерывания ее пользователем) программа полностью отключает питание, в том числе снимает его с карты;

• если карта выдергивается из картоприемника до завершения цикла, устройство тем не менее обеспечивает нормальный порядок выключения питания.

Важно отметить, что все программы, работающие с устройством чтения-записи напрямую, должны обязательно компилироваться в файл с расширением .ЕХЕ перед их запуском (который выполняется непосредственно из командной строки DOS). Действительно, используемый режим работы последовательного порта (8 бит данных

II плюс бнт контроля четности) не поддерживается интерпретатором GWBASIC. При попытке непосредственного запуска исходной программы интерпретатор BASIC сразу же прервет работу и выведет сообщение об ошибке.

Соответствующая директория на сайте www.dmk.ru содержит откомпилированные версии программ, начиная с ATR.EXE. В случае, если вы захотите внести в них изменения (например, чтобы сменить последовательный порт, "ли СОМ1: занят), следует использовать компилятор, подобный TURBO-BASIC.

В рассматриваемом случае после того, как карта закончила передачу ответа на сброс, программа выводит иа экран применяемый протокол (тип) il весь ATR в шестнадцатеричном формате. Например, при работе с французской банковской карточкой, выпущенной несколько лет назад, можно получить результат вида:

3F 65 25 0В 31 04 БС 90 00 Карточка сотового телефона GSM с прямым форматом передачи может выдать примерно такой ответ:

ЗВ 7В 11 00 00 29 Cl 01 05 00 1Е 55 00 00 90 00

Карта DOSCARD компании Gemplus, принадлежащая к семейству COS и запрограммированная так, что ее можно использовать в качестве обычной дискеты, могла бы "ответить":

3F 6С 00 00 24 АО 13 00 FF DO СА 01 00 ОС 90 00

В табл. 6.2 приведено несколько элементов, позволяющих частично расшифровать ATR, но для более подробного изучения этого вопроса необходимо обратиться к стандарту ISO 7816-3. Символ ТО, который следует за TS, являйся признаком формата и выполняет двойную роль:

• уточняет, какие из символов ТА1, TBI, TCI, и TD1 последуют за ним. Эти символы, называемые интерфейсными, описывают некоторые основные характеристики карты;

• уточняет количество исторических символов, расположенных в конце сообщения. Значения этих символов не стандартизованы, поэтому у карт разных изготовителей они могут отличаться. Как правило, в них содержится информация о номере или дате выпуска карты, а также некоторые данные об ее использовании.

Часто (хотя не всегда) два последних "исторических^ символа имеют значение 90 00; эта пара байтов свидетельствует о том, что все

Таблица 6.2. Рссшифровкс некоторых элементов ответа на сброс

Чтение ответа на сброс

в порядке. Символы ТБ информируют о типе протокола, на котором должен вестись диалог. ТСК является контрольным символом, не всегда присутствующим в сообщении. Он определяется так, чтобы результат операции "Исключающее ИЛИ" над всеми символами от ТО до ТСК был равен нулю.

В качестве примера в табл. 6.3 приведены результаты частичной расшифровки ответа двух распространенных карт: ООБСАІЮ и простои банковской карточки, недействительной уже в течение нескольких лет.

Используемое программное обеспечение || Оглавление || Расшифровка ответа на сброс