Как читать данные смарт-карты VISA на основе EMV

Я пытаюсь прочитать данные кредитной карты с карты VISA, но не смог добиться успеха. Как в интернет-ресурсах я обнаружил, что для карты MASTER мы можем выбрать каталог PSE, используя 1PAY.SYS.DDF01 файл, а затем прочитать записи. Но для VISA это не обязательно, и когда я использую следующий файл, используя команду SELECT для получения каталога PSE, я получаю ответ как "6A82". Это означает, что он не поддерживается файловой системой. Я искал ошибку в EMV 4.2 Book 1 (спецификация EMV) и говорит, что мы должны использовать "Список AID". В нем говорится: "Терминал выдает еще одну команду SELECT, используя следующую AID в своем списке". Я не могу понять это и продолжать дальше.

Любая помощь в том, как получить PSE для карты VISA или AID, чтобы получить данные кредитной карты?

Спасибо, Шекхар

Ответы

Ответ 1

Прежде всего, апплет PPSE не имеет ничего общего с VISA и MasterCard. Он определен EMV, и он используется, как вы правильно заметили, для перечисления AID доступных платежных приложений на карте. Но если это не так, терминалы пытаются использовать все поддерживаемые AID для создания списка кандидатов.

Если вы хотите выбрать апплет VISA, но вы не знаете полную AID, вы можете использовать частичный выбор. Поскольку все VISA AID начинаются с VISA RID: A0 00 00 00 03. Вы можете попробовать отправить эту команду:

Это вернет первый экземпляр:

00 A4 04 00 05 A0 00 00 00 03 00

и это даст вам больше, если у вас есть на карте:

00 A4 04 02 05 A0 00 00 00 03 00

Ответ 2

Итак, проблема в том, что вы не знаете AID своего приложения на карте? Нет способа получить их (кроме PSE), вы должны сначала знать, какие приложения на карте вы поддерживаете. Таким образом, "Список AID" - это список AID, который вы поддерживаете, о чем вам сказал ваш покупатель. Вы можете попытаться создать этот список самостоятельно на основе некоторых стандартных идентификаторов безопасности, которые вы указали здесь: http://en.wikipedia.org/wiki/EMV#Application_selection

Ответ 3

Это немного странно для меня... Мои исследования показывают, что для VISA это приложение всегда будет доступно, но для Mastercard оно не является обязательным...

В любом случае, вот команда, которую я отправляю на свой кард-ридер, чтобы выбрать это приложение:

//               OP CL P1 P2 LN DATA------------------------------------- EL
//select command 00 A4 04 00 0E 31 50 41 59 2E 53 59 53 2E 44 44 46 30 31 00

NSString* str= @"1PAY.SYS.DDF01";
NSData* data=[str dataUsingEncoding:NSUTF8StringEncoding];
int datalength = data.length; 
NSMutableData *selectPSECommand = [[NSMutableData alloc] init];

[selectPSECommand appendBytes:"\x00" length:1]; //command class
[selectPSECommand appendBytes:"\xA4" length:1]; //APDU_INSTRUCTION_SELECT_FILE
[selectPSECommand appendBytes:"\x04" length:1]; //select file by name
[selectPSECommand appendBytes:"\x00" length:1]; //First or only occurrence of file
[selectPSECommand appendBytes:&datalength length:1]; //data length
[selectPSECommand appendData:data]; //the data we are sending
[selectPSECommand appendBytes:"\x00" length:1]; //expected response length. here it is 0. We are only selecting a file.

Образец кода предназначен для Objective C.

Сравните данные, которые вы отправляете, с данными, которые я отправляю, и посмотрим, соответствует ли это. Тем временем я буду искать в списке AID.

Надеюсь, это поможет. Ezfrag

Ответ 4

Вы можете использовать список AID, например этот. Однако некоторые карты отвечают "неправильными" данными при переходе по списку. то есть я имел случай, когда карта VISA V-Pay была прочитана как Maestro. Если вам нужно выполнить итерацию через большой список AID, чтобы "открыть" информацию о карте, я бы рекомендовал вам добавить флаг для получения фактических AID с карты, а затем вернуться к основному методу, чтобы прочитать карту с помощью главной AID при условии,.

Что-то вроде:

  • Прочитайте итерирование карты через список AID.
  • Если возвращается 0x90 (успешное чтение), извлеките данные
  • Проверьте, где возвращены данные типа AID (0x4f).
  • Когда это так, очистите свой список и получите данные снова с помощью надлежащей AID, теперь, когда вы знаете, что это правильно, поскольку оно поступает непосредственно с карты.

Поскольку AID обычно входит в первые записи с карты, этот цикл гарантирует правильность процесса с минимальными затратами времени.