Предварительная персонализация смарт-карт и исторические байты
У меня была смарт-карта, чтобы она не была слита (я имею в виду, что она не была предварительно персонализирована). Имеет ATR= 3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2
,
Q1: Что / где находится исторический байт моей карты? Как я могу их проанализировать?
Q2: Где я могу найти модель моей карты? Я искал его ATR в интернете, но ничего не нашел!
Когда вы пытаетесь перечислить апплеты действительно пустой карты (я имею в виду карту, которая не слилась) с помощью такого инструмента, как GPJ, вы получите такой вывод:
>> gpj -list
>> java -jar gpj.jar -list
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
Found card in terminal: ACS CCID USB Reader 0
ATR: 3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2
DEBUG: Command APDU: 00 A4 04 00 07 A0 00 00 01 51 00 00
DEBUG: Response APDU: 6A 82
Failed to select Security Domain GP211 A0 00 00 01 51 00 00 , SW: 6A 82
DEBUG: Command APDU: 00 A4 04 00 08 A0 00 00 00 18 43 4D 00
DEBUG: Response APDU: 6A 82
Failed to select Security Domain GemaltoXpressPro A0 00 00 00 18 43 4D 00 , SW:6A 82
DEBUG: Command APDU: 00 A4 04 00 08 A0 00 00 00 03 00 00 00
DEBUG: Response APDU: 6A 82
Failed to select Security Domain OP201a A0 00 00 00 03 00 00 00 , SW: 6A 82
DEBUG: Command APDU: 00 A4 04 00 07 A0 00 00 00 03 00 00
DEBUG: Response APDU: 6A 82
Failed to select Security Domain OP201b A0 00 00 00 03 00 00 , SW: 6A 82
net.sourceforge.gpj.cardservices.exceptions.GPSecurityDomainSelectionException:Could not select any of the known Security Domains!
at net.sourceforge.gpj.cardservices.GlobalPlatformService.open(Unknown Source)
at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown Source)
Вышеуказанный вывод означает, что инструментам не удалось найти ни одного SC для выбора.
Я много искал в Интернете и, наконец, обнаружил, что мне нужен ключ (транспортный ключ) для процедуры предварительной персонализации.
Позвольте мне поделиться некоторыми знаниями!
Процедура предварительной персонализации описана ниже (для JCOP):
- Запрос ATR
- Команда select для выбора корневого апплета (Transport-Key является AID этого апплета)
- Boot Command
- Максимально возможное количество команд Read, WRITE, ADMINEXEC, SB_NAT_APPLET_INSTRUCTION и AUTH
- ЗАЩИТА команда
- Запал команды
- Сбросить карту.
На шаге 4 мы инициализируем IC с настройками по умолчанию (настройка требуемого жизненного цикла ИС, определение поведения связи, параметров ATR и / или ATS или предварительная загрузка апплетов).
Кстати, я сделал первые два шага (1 и 2), а затем я сбросил карту и попытался снова перечислить апплеты:
>> gpj -list
>> java -jar gpj.jar -list
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
Found card in terminal: ACS CCID USB Reader 0
ATR: 3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2
DEBUG: Command APDU: 00 A4 04 00 07 A0 00 00 01 51 00 00
DEBUG: Response APDU: 6F 64 84 08 A0 00 00 01 51 00 00 00 A5 58 9F 65 01 FF 9F 6E 06 47 91 23 47 41 00 73 49 06 07 2A 86 48 86 FC 6B 01 60 0B 06 09 2A 86 48 86 FC 6B 02 02 02 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B 06 09 2A 86 48 86 FC 6B 04 02 55 65 0B 06 09 2B 85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04 01 2A 02 6E 01 02 90 00
Successfully selected Security Domain GP211 A0 00 00 01 51 00 00
DEBUG: Command APDU: 80 50 00 00 08 E7 41 23 4E F5 3B EB E3
DEBUG: Response APDU: 00 00 41 98 00 17 14 97 42 48 FF 02 00 00 BA FF B1 51 C8 BD F1 69 59 8D 80 D6 72 66 90 00
javax.smartcardio.CardException: Card cryptogram invalid.at net.sourceforge.gpj.cardservices.GlobalPlatformService.openSecureChannel(Unknown Source)
at net.sourceforge.gpj.cardservices.GlobalPlatformService.main
(Unknown Source)
Как вы видите, апплеты появляются с AID= A0 00 00 01 51 00 00
, Но я не смог выполнить команду EXTERNAL AUTHENTCAT успешно!
Q3: почему внешняя аутентификация не удалась? Потому что я не установил SD-ключи?
Я попытался выбрать этот апплет с помощью OpenSC Tool:
>> opensc-tool -s 00A4040007A0000001510000
Using reader with a card: ACS CCID USB Reader 0
Sending: 00 A4 04 00 07 A0 00 00 01 51 00 00
Received (SW1=0x90, SW2=0x00):
6F 64 84 08 A0 00 00 01 51 00 00 00 A5 58 9F 65 od......Q....X.e
01 FF 9F 6E 06 47 91 23 47 41 00 73 49 06 07 2A ...n.G.#GA.sI..*
86 48 86 FC 6B 01 60 0B 06 09 2A 86 48 86 FC 6B .H..k.`...*.H..k
02 02 02 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B ...c...*.H..k.d.
06 09 2A 86 48 86 FC 6B 04 02 55 65 0B 06 09 2B ..*.H..k..Ue...+
85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04 ...Hd...f...+...
01 2A 02 6E 01 02 .*.n..
Q4: что означает этот вывод?
Ниже вы можете увидеть вывод GP Shell после скрипта get-data:
.:: gpshell get_data.txt
establish_context
enable_trace
enable_timer
card_connect
command time: 281 ms
get_data -identifier 9F7F
Command --> 80CA9F7F00
Wrapped command --> 80CA9F7F00
Response <-- 9F7F2A4790507547912347410041980017149742484812420500000000143E24303
137313400000000000000009000
9F7F2A4790507547912347410041980017149742484812420500000000143E243031373134000000
0000000000
command time: 62 ms
get_data -identifier 66
Command --> 80CA006600
Wrapped command --> 80CA006600
Response <-- 664B734906072A864886FC6B01600B06092A864886FC6B020202630906072A86488
6FC6B03640B06092A864886FC6B040255650B06092B8510864864020103660C060A2B060104012A0
26E01029000
664B734906072A864886FC6B01600B06092A864886FC6B020202630906072A864886FC6B03640B06
092A864886FC6B040255650B06092B8510864864020103660C060A2B060104012A026E0102
command time: 47 ms
card_disconnect
command time: 141 ms
release_context
command time: 0 ms
.::
Q5: Что означает этот вывод? Как я могу проанализировать это?
3 ответа
Q1: Что / где находится исторический байт моей карты? Как я могу их проанализировать?
A1: Вы можете ввести ATR на этом сайте, и он проанализирует его для вас. Исходя из этого, исторический байт вашей карты 4A 43 4F 50 32 34 32 52 33
,
Q2: Где я могу найти модель моей карты? Я искал его ATR в интернете, но ничего не нашел!
A2: Вам не нужно ничего делать, потому что этот сайт делает все проще для вас:) поздравляю, он узнал вашу карту! Это NXP JCOP v2.4.x
,
Q3: почему внешняя аутентификация не удалась? Потому что я не установил SD-ключи?
A3: ошибка Card cryptogram invalid
, Кажется, ключи, которые используются со стороны карты и со стороны gpj, различны. Вам нужно знать, какие ключи установлены на карте и установлены одинаково для gpj.
Q4: что означает этот вывод?
A4: Если вы хотите продолжить работу над картами Java, важно прочитать документ о глобальной платформе. Поле данных, возвращаемое в ответном сообщении команды выбора, поясняется в разделе 9.9.3.1 документа GP.
На основании вашего результата я разделил каждую часть и затем перечислил каждый тег ниже. Обратите внимание, что выделенные жирным шрифтом шестнадцатеричные байты являются тегами.
6F 64 84 08 A0 00 00 01 51 00 00 00 A5 58 9F 65 od...... Q.... Xe
01 FF 9F 6E 06 47 91 23 47 41 00 73 49 06 07 2A... nG # GA.sI.. *
86 48 86 FC 6B 01 60 0B 06 09 2A 86 48 86 FC 6B.H..k..... .H..k
02 02 02 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B... c....H..kd
06 09 2A 86 48 86 FC 6B 04 02 55 65 0B 06 09 2B.. *. H..k..Ue... +
85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04... Hd... f... +...
01 2A 02 6E 01 02
Тег 6F: Информация об управлении файлами (шаблон FCI) [Обязательный]-> 64
Тег 84: AID приложения / файла [Обязательный]-> 08 A0 00 00 01 51 00 00 00
Тэг A5: Собственные данные [Обязательно]-> 58
Тег 9F65: Максимальная длина поля данных в командном сообщении [Обязательный]-> 01 FF
Тег 9F6E: Данные жизненного цикла производства приложения [Необязательно]-> 06 47 91 23 47 41 00
Тег 73: Данные управления доменом безопасности [Необязательно]-> 49 06 07 2A 86 48 86 FC 6B 01 60 0B 06 09 2A 86 48 86 FC 6B 02 02 02 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B 06 09 2A 86 48 86 FC 6B 04 02 55 65 0B 06 09 2B 85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04 01 2A 02 6E 01 02
Q5: Что означает этот вывод? Как я могу проанализировать это?
A5: Проверьте эту вики для Global Platform, чтобы узнать все команды GP и затем самостоятельно проанализировать вывод
И наконец, пожалуйста, никогда больше не задавайте такой длинный вопрос:(пожалуйста, разбейте части и задайте каждую часть как отдельный вопрос, спасибо:)
ATR в основном предназначен для установления связи с читателем. Хотя с помощью опыта и большого количества сравнительных данных можно сделать некоторые сопоставления этой информации, это не гарантируется. ISO 7816-3 описывает кодирование ATR, которое также может содержать некоторые исторические байты (не оцениваются читателем и, следовательно, часто используются для просто извлекаемой идентификации).
В вашем случае 9 исторических байтов содержат простой текст ASCII 'JCOP242R3', который может помочь вам начать работу.
Ответ 1: Согласно вашей карте ATR(3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2) ваши исторические байты **(4A 43 4F 50 32 34 32 52 33**)анализируют исторические байты:--- В соответствии с ИСО / МЭК 7816-3 Бит 4 к 1 в байте формата T0(в вашем ATR, например, F9) сообщает о доступном количестве исторических байтов, т.е. всего доступно 9 исторических байтов.
Ваше описание ATR приведено ниже
TS = 0x3B Direct Convention
T0 = 0xF9 Y(1): b1111, K: 9 (historical bytes)
TA(1) = 0x13 Fi=372, Di=4, 93 cycles/ETU (43010 bits/s at 4.00 MHz, 53763 bits/s for fMax=5 MHz)
TB(1) = 0x00 VPP is not electrically connected
TC(1) = 0x00 Extra guard time: 0
TD(1) = 0x81 Y(i+1) = b1000, Protocol T=1
----
TD(2) = 0x31 Y(i+1) = b0011, Protocol T=1
----
TA(3) = 0xFE IFSC: 254
TB(3) = 0x45 Block Waiting Integer: 4 - Character Waiting Integer: 5
----
Historical bytes 4A 43 4F 50 32 34 32 52 33
Category indicator byte: 0x4A (proprietary format) "JCOP242R3"
TCK = 0xA2 correct checksum
Ответ 2: Что вы подразумеваете под карточным режимом l?