Команда 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/ =Неизвестный (я погуглил и обнаружил, что это: «Терминал Транса»ction Qualifiers '= TTQ)
https://www.emvlab.org/emvtags/show/t9F02/ = Авторизованная сумма
https://www.emvlab.org/emvtags/show/t9F03/ = Вторичная / кэшбэк сумма
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
Объединение всех значений HEX дает: 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 - Получить значение длины тега:
Получить длину результатов: 51004000000000001000000000000000057800000000000578000000000009781903250012121212 = 66 цифр. Это 2-битные символы, поэтому: 66/2 = 33 знака
Convert 33 to HEX = 21
tlv = 21
tlv должен быть применен до результатов с шага 13:
21 510040000000000010000000000000000578000000000009781903250012121212
ШАГ 15 - Добавьте тег GPO, который имеет значение "83":
83 21 510040000000000010000000000000000578000000000009781903250012121212
Итак, Данные = 8321510040000000000010000000000010000000000010000578000000000009781903250012121212
ШАГ 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 / т / дом
Анализ PDOL для команды GET PROCESSING OPTIONS в транзакции EMV
Ошибка синтаксического анализа при запросе команды GPO для карты EMV
https://www.iban.com/currency-codes
https://www.iban.com/country-codes
http://www.emvlab.org/tlvutils/