Как получить данные CPLC со смарт-карты?

Я использую GPShell на виртуальной машине Ubuntu с устройством чтения смарт-карт (модель ACR122) и использую несколько разных чипов NXP SmartMX.

Используя их приложение Android TagInfo, я могу просматривать "Данные жизненного цикла производства карт" при сканировании одного конкретного чипа SmartMX.

Тем не менее, я хотел бы также использовать GPShell для получения данных CPLC. Я предполагаю, что это доступно, потому что я вижу это, когда я сканирую тег на устройстве Android.

У меня есть программа под названием connect.txt, и это имеет это как содержание:

mode_211
enable_trace
establish_context
card_connect
get_data -identifier 9F7F
card_disconnect
release_context

Это вывод:

josh@josh-VirtualBox:~/projects/gpshell-test$ gpshell connect.txt
mode_211
enable_trace
establish_context
card_connect
* reader name ACS ACR122U PICC Interface 00 00
get_data -identifier 9F7F
Command --> 80CA9F7F00
Wrapped command --> 80CA9F7F00
Response <-- 
get_data() returns 0x80200000 (Unknown ISO7816 error: 0x0000)

Я пытаюсь следовать документации GPShell для приведенной выше команды (get_data -identifier 9F7F) которая должна быть командой для получения данных CPLC.

Как я могу получить данные CPLC?

Что касается отладки, я попробовал некоторые примеры сценариев, которые поставляются с GPShell (например, выбор определенного AID или перечисление AID, попытки аутентификации с использованием ключей по умолчанию и т. Д.). Все команды дают мне точно такой же вывод, как указано выше. Я тоже ищу gpshell на Stackru и прочитайте большинство вопросов / ответов, но ни один из них, по-видимому, не совсем соответствует тому, что я спрашиваю здесь (я могу предоставить ссылки, если потребуется). Благодарю.

2 ответа

Решение

Короткий ответ: мне пришлось сначала выбрать приложение, а затем пройти аутентификацию с использованием ключа по умолчанию перед отправкой GET DATA команда.

В итоге я установил GlobalPlatformPro, еще один инструмент командной строки для получения данных со смарт-карты.

я использовал gp -list -d перечислить все AID на карте (-d отладка для отображения отправляемых APDU). Оказывается, карта использует ключ по умолчанию 404142434445464748494a4b4c4d4e4f (находится в документации gpshell под заголовком "Ключи безопасного канала".

Выводится несколько приложений. ПОМОЩЬ, которую мне пришлось использовать (после нескольких попыток), была:

ISD: A000000151000000 (OP_READY)
     Privs:   SecurityDomain, CardLock, CardTerminate, CardReset, CVMManagement

Я изменил свой connect.txt Запрограммируйте это:

mode_211
enable_trace
establish_context
card_connect
select -AID A000000151000000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f 
get_data -identifier 9f7f
card_disconnect
release_context

Это закончилось выводом (используя GPShell):

josh@josh-VirtualBox:~/projects/gpshell-test$ gpshell connect.txt
mode_211
enable_trace
establish_context
card_connect
* reader name ACS ACR122U PICC Interface 00 00
select -AID A000000151000000
Command --> 00A4040008A000000151000000
Wrapped command --> 00A4040008A000000151000000
Response <-- 6F648408A000000151000000A5589F6501FF9F6E06479120813B00734906072A864886FC6B01600B06092A864886FC6B020202630906072A864886FC6B03640B06092A864886FC6B040255650B06092B8510864864020103660C060A2B060104012A026E01029000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f 
Command --> 80CA006600
Wrapped command --> 80CA006600
Response <-- 664B734906072A864886FC6B01600B06092A864886FC6B020202630906072A864886FC6B03640B06092A864886FC6B040255650B06092B8510864864020103660C060A2B060104012A026E01029000
Command --> 80500000082F7E9B47AA9F32E400
Wrapped command --> 80500000082F7E9B47AA9F32E400
Response <-- 0000518900148698000501020008402AF999F42B742FD206C0ECDA169000
Command --> 8482010010DF9FA8285DE2C6747D14AD51EFF92D3C
Wrapped command --> 8482010010DF9FA8285DE2C6747D14AD51EFF92D3C
Response <-- 9000
get_data -identifier 9f7f
Command --> 80CA9F7F00
Wrapped command --> 84CA9F7F08EEAA80A1B0DB13D500
Response <-- REDACTED-CPLC-DATA
REDACTED-CPLC-DATA
card_disconnect

Ответ, который меня волнует, - это последняя строка вывода, которая представляет собой данные CPLC (отредактированные). Вы можете проверить globalplatform.h, начиная со строки 128, чтобы увидеть, как анализируется CPLC:

/**
 * Whole CPLC data from ROM and EEPROM.
 * 9F7F // TAG
 * 2A // Length of data
 * ////////////////Data /////////////
 * 4250 // ic fabricator
 * 3272 // ic type
 * 1291 // os id
 * 6181 // os date
 * 0700 // os level
 * 8039 // fabrication date
 * 0106D0BB // ic serial
 * 1D3C // ic batch
 * 0000 // module fabricator
 * 8148 // packing date
 * 0000// icc manufacturer
 * 8148 // ic embedding date
 * 0000 // pre - personalizer
 * 0000 // IC Pre Personalization Date
 * 00000000 //IC Pre Personalization Equipment Identifier
 * 0000// IC Personalizer
 * 0000 // IC Personalization Date
 * 00000000 // IC Personalization Equipment Identifier
 */

Просто gp -i с GlobalPlatformPro даст вам CPLC в удобочитаемой форме.

Другие вопросы по тегам