Сгенерировать ОПЦИИ ОБРАБОТКИ ПОЛУЧЕНИЯ (GPO) для карты EMV (APDU) с помощью PDOL

Команда GPO определяется следующим образом как команда APDU:

CLA INS P1 P2 Lc Data Le
80  A8  00 00 Lc Data 00

Таким образом, недостающие части - это Lc и Данные, которые мы должны вычислить из PDOL (если он указан). Если он не указан, мы можем использовать:

80 A8 00 00 02 8300 00

Это работает для мастер-карт, но для VISA мне предоставляется PDOL и я пытаюсь построить недостающую часть APDU (Lc & Data).

ШАГ 1. Я получаю этот PDOL со своей карты EMV:

9F66049F02069F03069F1A0295055F2A029A039C019F3704

ШАГ 2. Разделение по командам:

9F6604 9F0206 9F0306 9F1A02 9505 5F2A02 9A03 9C01 9F3704

ШАГ 3. Снова разделите его по длине байта:

9F66 04 | 9F02 06 | 9F03 06 | 9F1A 02 | 95 05 | 5F2A 02 | 9A 03 | 9C 01 | 9F37 04

ШАГ 4. Дает следующие команды (удалить длину):

Описывает «Что нужно вставить»

9F66 | 9F02 | 9F03 | 9F1A | 95 | 5F2A | 9A | 9C | 9F37

ШАГ 5 - И следующую длину команд (удаление команд):

Описывает «длину каждой команды».

04 | 06 | 06 | 02 | 05 | 02 | 03 | 01 | 04

ШАГ 6. Предполагая, что длина задана как 2 бита, мы удвоим ее:

8 | 12 | 12 | 4 | 10 | 4 | 6 | 2 | 8

ШАГ 7. Ожидаемый результат должен выглядеть так:

aaaaaaaa bbbbbbbbbbbb cccccccccccc dddd eeeeeeeeee ffff gggggg hh iiiiiiii

ШАГ 8. Поиск команд для поиска значений:

9F66 | 9F02 | 9F03 | 9F1A | 95 | 5F2A | 9A | 9C | 9F37

https://www.emvlab.org/emvtags/show/t9F66/ = Неизвестно (Я погуглил и обнаружил, что это: «Квалификаторы терминальных транзакций» = TTQ)

https://www.emvlab.org/emvtags/show/t9F02/ = авторизовано количество

https://www.emvlab.org/emvtags/show/t9F03/ = Secondary / сумма кэшбэка

https://www.emvlab.org/emvtags/show/t9F1A/ = ISO 3166 Код страны терминала (TCC)

https://www.emvlab.org/emvtags/show/t95/ = Терминал результаты проверки (TVR)

https://www.emvlab.org/emvtags/show/t5F2A/ = ISO 4217 Код валюты (CC)

https://www.emvlab.org/emvtags/show/t9A/ = транзакция дата ГГММДД

https://www.emvlab.org/emvtags/show/t9C/ = ISO 8583: 1987 первые 2 цифры (тип транзакции - TT)

https://www.emvlab.org/emvtags/show/t9F37/ = непредсказуемо Число (Случайное число для криптограммы - UN)

ШАГ 9. Вставка данных obvios:

9F66 aaaaaaaa     TTQ      
9F02 bbbbbbbbbbbb Amount   000000001000
9F03 cccccccccccc Cashback 000000000000
9F1A dddd         TCC
95   eeeeeeeeee   TVR
5F2A ffff         CC
9A   gggggg       YYMMDD   190325
9C   hh           TT
9F37 iiiiiiii     UN       12121212

ШАГ 10 - Квалификаторы терминальных транзакций (TTQ):

(Поддерживаемые настройки функции терминала)

9F66 a1 a2 a3 a4   

A. a1 - Hex to binary -> 00000000
B. a2 - Hex to binary -> 00000000
C. a3 - Hex to binary -> 00000000
D. a4 - Hex to binary -> 00000000 - RFU (Reserved Future Use)

Каждый ноль можно включить или выключить.

A. a1 (hex to binary gives 8 numbers)

  8. 0 - Contactless MSD          - Example: 0 - false
  7. 0 - Contactless VSDC         - Example: 1 - true
  6. 0 - Contactless qVSDC        - Example: 0 - false
  5. 0 - EMV contact chip         - Example: 1 - true
  4. 0 - Offline-only reader      - Example: 0 - false
  3. 0 - Online PIN               - Example: 0 - false
  2. 0 - Signature                - Example: 0 - false
  1. 0 - Offline data auth (ODA)  - Example: 1 - true

Пример дает: 01010001. Двоичное преобразование в HEX -> 51

B. a2 (hex to binary gives 8 numbers)

  8. 0 - Require Online Crypt     - Example: 0 - false
  7. 0 - CVM required .           - Example: 0 - false
  6. 0 - Offline PIN support      - Example: 0 - false
  5. 0 - RFU(Reserved Future Use) - Example: 0 - false
  4. 0 - RFU(Reserved Future Use) - Example: 0 - false
  3. 0 - RFU(Reserved Future Use) - Example: 0 - false
  2. 0 - RFU(Reserved Future Use) - Example: 0 - false
  1. 0 - RFU(Reserved Future Use) - Example: 0 - false

Пример дает: 00000000. Из двоичного в HEX -> 00

C. a3 (hex to binary gives 8 numbers)

  8. 0 - Issuer update process    - Example: 0 - false
  7. 0 - Mobile functionality     - Example: 1 - true
  6. 0 - RFU(Reserved Future Use) - Example: 0 - false
  5. 0 - RFU(Reserved Future Use) - Example: 0 - false
  4. 0 - RFU(Reserved Future Use) - Example: 0 - false
  3. 0 - RFU(Reserved Future Use) - Example: 0 - false
  2. 0 - RFU(Reserved Future Use) - Example: 0 - false
  1. 0 - RFU(Reserved Future Use) - Example: 0 - false

Пример дает: 01000000. Из двоичного в HEX -> 40

D. a4 = RFU(Reserved Future Use) = 00000000 = 00

Выдает: 00000000. Из двоичного в HEX -> 00

Объединение значений HEX возвращает: TTQ = 51004000.

ШАГ 11. Обновите значения ISO (Google it) и вставьте TTQ:

Ссылка: https://en.wikipedia.org/wiki/ISO_8583

TT
Authorization:   00
Balance inquiry: 31
Sale:            00
Cash:            01
Void:            02
Mobile topup:    57

9F66 aaaaaaaa     TTQ      51004000     TTQ
9F02 bbbbbbbbbbbb Amount   000000001000
9F03 cccccccccccc Cashback 000000000000
9F1A dddd         TCC      0578         ISO 3166 Norway (not same as phone)
95   eeeeeeeeee   TVR
5F2A ffff         CC       0978         ISO 4217 Euro
9A   gggggg       YYMMDD   190325
9C   hh           TT       00           ISO 8583:1987 first 2 digits
9F37 iiiiiiii     UN       12121212

ШАГ 12. Результаты проверки терминала (TVR):

https://en.wikipedia.org/wiki/Terminal_verification_results

9F66 e1 e2 e3 e4 e5 

A. e1 - Hex to binary -> 00000000
B. e2 - Hex to binary -> 00000000
C. e3 - Hex to binary -> 00000000
D. e4 - Hex to binary -> 00000000
E. e5 - Hex to binary -> 00000000

Каждый ноль можно включить или выключить.

A. e1 (hex to binary gives 8 numbers)

  8. 0 - Offline process not performed - Example: 0 - false
  7. 0 - SDA failed                    - Example: 0 - false
  6. 0 - ICC data missing              - Example: 0 - false
  5. 0 - Card number on hotlist        - Example: 0 - false
  4. 0 - DDA failed                    - Example: 0 - false
  3. 0 - CDA failed                    - Example: 0 - false
  2. 0 - RFU (SDA was selected)        - Example: 0 - false
  1. 0 - RFU                           - Example: 0 - false

Пример дает: 00000000. Из двоичного в HEX -> 00

B. e2 (hex to binary gives 8 numbers)

  8. 0 - Card/terminal version differ. - Example: 0 - false
  7. 0 - Expired app                   - Example: 0 - false
  6. 0 - App not yet effective         - Example: 0 - false
  5. 0 - Service not allowed for card  - Example: 0 - false
  4. 0 - New card                      - Example: 0 - false
  3. 0 - RFU(Reserved Future Use)      - Example: 0 - false
  2. 0 - RFU(Reserved Future Use)      - Example: 0 - false
  1. 0 - RFU(Reserved Future Use)      - Example: 0 - false

Пример дает: 00000000. Из двоичного в HEX -> 00

C. e3 (hex to binary gives 8 numbers)

  8. 0 - Cardholder verification fail  - Example: 0 - false
  7. 0 - Unrecognised CVM              - Example: 0 - false
  6. 0 - PIN try limit exceeded        - Example: 0 - false
  5. 0 - PIN required, but no pinpad   - Example: 0 - false
  4. 0 - PIN req. & present & missing  - Example: 0 - false
  3. 0 - On-line PIN entered           - Example: 0 - false
  2. 0 - RFU(Reserved Future Use)      - Example: 0 - false
  1. 0 - RFU(Reserved Future Use)      - Example: 0 - false

Пример дает: 00000000. Из двоичного в HEX -> 00

D. e4 (hex to binary gives 8 numbers)

  8. 0 - Transact. exceeds floor limit - Example: 0 - false
  7. 0 - Lower offline limit exceeded  - Example: 0 - false
  6. 0 - Upper offline limit exceeded  - Example: 0 - false
  5. 0 - Transa. randomly sele. online - Example: 0 - false
  4. 0 - Merch. forced online transac. - Example: 0 - false
  3. 0 - RFU(Reserved Future Use)      - Example: 0 - false
  2. 0 - RFU(Reserved Future Use)      - Example: 0 - false
  1. 0 - RFU(Reserved Future Use)      - Example: 0 - false

Пример дает: 00000000. Из двоичного в HEX -> 00

E. e5 (hex to binary gives 8 numbers)

  8. 0 - Default TDOL Used             - Example: 0 - false
  7. 0 - Issuer authentication failed  - Example: 0 - false
  6. 0 - Script fail before final GAC  - Example: 0 - false
  5. 0 - Script fail after final GAC   - Example: 0 - false
  4. 0 - RFU(Reserved Future Use)      - Example: 0 - false
  3. 0 - RFU(Reserved Future Use)      - Example: 0 - false
  2. 0 - RFU(Reserved Future Use)      - Example: 0 - false
  1. 0 - RFU(Reserved Future Use)      - Example: 0 - false

Пример дает: 00000000. Из двоичного в HEX -> 00

Объединение всех шестнадцатеричных значений вместе дает: TVR = 0000000000.

ШАГ 13 - Последняя команда:

9F66 aaaaaaaa     TTQ      51004000
9F02 bbbbbbbbbbbb Amount   000000001000
9F03 cccccccccccc Cashback 000000000000
9F1A dddd         TCC      0578
95   eeeeeeeeee   TVR      0000000000
5F2A ffff         CC       0978
9A   gggggg       YYMMDD   190325
9C   hh           TT       00
9F37 iiiiiiii     UN       12121212

Результаты в:

51004000 000000001000 000000000000 0578 0000000000 0978 190325 00 12121212

ШАГ 14 - Получите значение длины тега:

Получите длину результатов: 510040000000000010000000000000000578000000000009781903250012121212 = 66 чисел Это 2 бита, поэтому: 66/2 = 33 символа

Convert 33 to HEX = 21

tlv = 21

tlv следует применять до получения результатов из шага 13:

21 510040000000000010000000000000000578000000000009781903250012121212

ШАГ 15. Добавьте тег GPO, равный «83»:

83 21 510040000000000010000000000000000578000000000009781903250012121212

Итак, Данные = 8321510040000000000010000000000010000578000000000009781903250012121212.

ШАГ 16. Получите значение длины тега для всей команды (Lc):

Получите длину результатов:

8321510040000000000010000000000000000578000000000009781903250012121212
= 70 numbers
It is 2-bits, so:
70 / 2 = 35 characters

Convert 35 to HEX = 23

Lc = 23

ШАГ 17. Собираем все вместе:

Помните, что отсутствует часть Lc & Data.

CLA INS P1 P2 Lc Data Le
80  A8  00 00 Lc Data 00
80  A8  00 00 23 Data 00

Добавление данных:

APDU =
80A8000023832151004000000000001000000000000000057800000000000978190325001212121200

ВОПРОС

Последняя сгенерированная мной команда apdu возвращает значение отсутствует. Кто-нибудь знает на каком шаге я вываливаюсь или видит что делаю не так?

Ресурсы:

https://www.emvlab.org/emvtags/

https://en.wikipedia.org/wiki/Terminal_verification_results

https://www.rapidtables.com/convert/number/decimal-to-hex.html

https://tvr-decoder.appspot.com/t/home

Разбор PDOL для команды GET PROCESSING OPTIONS в транзакции EMV

Получение ошибки парсера по запросу для Команда GPO для карты EMV

https://www.iban.com/currency-codes

https://www.iban.com/country-codes

http://www.emvlab.org/tlvutils/


person Steffan    schedule 25.03.2019    source источник


Ответы (1)


Я нашел ошибку. Проблема заключалась в настройке правильной функции транзакции в ШАГЕ 10.

Поскольку мой процессор является только устройством чтения NFC, мне пришлось изменить STEP 10 следующим образом:

ШАГ 10 - Квалификаторы терминальных транзакций (TTQ):

(Поддерживаемые настройки функции терминала)

9F66 a1 a2 a3 a4   

A. a1 - Hex to binary -> 00000000
B. a2 - Hex to binary -> 00000000
C. a3 - Hex to binary -> 00000000
D. a4 - Hex to binary -> 00000000 - RFU (Reserved Future Use)

Каждый ноль можно включить или выключить.

A. a1 (hex to binary gives 8 numbers)

  8. 0 - Contactless MSD          - Example: 1 - true
  7. 0 - Contactless VSDC         - Example: 1 - true
  6. 0 - Contactless qVSDC        - Example: 1 - true
  5. 0 - EMV contact chip         - Example: 1 - true
  4. 0 - Offline-only reader      - Example: 0 - false
  3. 0 - Online PIN               - Example: 0 - false
  2. 0 - Signature                - Example: 0 - false
  1. 0 - Offline data auth (ODA)  - Example: 0 - false

Пример дает: 11110000. Из двоичного в HEX -> F0

B. a2 (hex to binary gives 8 numbers)

  8. 0 - Require Online Crypt     - Example: 0 - false
  7. 0 - CVM required .           - Example: 0 - false
  6. 0 - Offline PIN support      - Example: 1 - true
  5. 0 - RFU(Reserved Future Use) - Example: 0 - false
  4. 0 - RFU(Reserved Future Use) - Example: 0 - false
  3. 0 - RFU(Reserved Future Use) - Example: 0 - false
  2. 0 - RFU(Reserved Future Use) - Example: 0 - false
  1. 0 - RFU(Reserved Future Use) - Example: 0 - false

Пример дает: 00100000. Из двоичного в HEX -> 20

C. a3 (hex to binary gives 8 numbers)

  8. 0 - Issuer update process    - Example: 0 - false
  7. 0 - Mobile functionality     - Example: 1 - true
  6. 0 - RFU(Reserved Future Use) - Example: 0 - false
  5. 0 - RFU(Reserved Future Use) - Example: 0 - false
  4. 0 - RFU(Reserved Future Use) - Example: 0 - false
  3. 0 - RFU(Reserved Future Use) - Example: 0 - false
  2. 0 - RFU(Reserved Future Use) - Example: 0 - false
  1. 0 - RFU(Reserved Future Use) - Example: 0 - false

Пример дает: 01000000. Из двоичного в HEX -> 40

D. a4 = RFU(Reserved Future Use) = 00000000 = 00

Выдает: 00000000. Из двоичного в HEX -> 00

Объединение значений HEX возвращает: TTQ = F0204000.


Таким образом, изменение значения TTQ на F0204000 заставило карту ответить на команду GPO. :)

person Steffan    schedule 25.03.2019
comment
+1 за усилия, предпринятые для объяснения проблемы. Я предполагаю, что проблема была связана только с B1b6 (если вы не использовали бесконтактную карту пути MSD). - person Adarsh Nanu; 26.03.2019
comment
PDOL и тег 0x9F66 в нем указывают на VISA PayWave или EMV Contactless Kernel 3. Просмотр спецификации бесконтактных платежей Visa (VCPS) может помочь понять поток и обязательные вещи. - person iso8583.info support; 26.03.2019