Аутентификация CDA на MasterCard

Я работаю с кредитной картой MasterCard, и у меня есть вопрос о конкретных шагах, которые мне нужно предпринять для выполнения аутентификации CDA.

Если я правильно понял процедуру, я должен сначала отправить команду GENERATE AC, а затем EXTERNAL AUTHENTICATE?

Моя команда GENERATE AC выглядит так:

80 AE 40 00 42 00 00 00 00 01 00 00 00 00 00 00 00 01 91 00 00 00 00 00 01 91 01 01 01 00 01 02 03 04 12 01 02 01 02 03 04 05 06 07 08 00 01 02 12 04 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

И ответ (RESPONSE), который я получаю от карты, выглядит так:

77 29

9F 27 01 80

9F 36 02 00 5C

9F 26 08 AE 7D 66 E4 50 15 D5 A4 (Криптограмма приложения)

9F 10 12 02 10 A0 00 00 2A 08 00 01 02 00 00 00 00 00 00 00 FF

90 00

На следующем шаге я запускаю «ВНЕШНЮЮ АУТЕНТИФИКАЦИЮ» с помощью команды:

00 82 00 00 AE 7D 66 E4 50 15 D5 A4 02 10 A0 00 00 2A 08 00

Ответ, который я получаю после этого, представляет собой 2-байтовый массив [109, 0], то есть 6D. Значит ли это, что я делаю что-то не так?

Любой совет будет принят во внимание.


person magic    schedule 11.03.2016    source источник


Ответы (5)


В команде First Generate AC вы отправили байт P1 = "40", пытаясь завершить транзакцию с помощью криптограммы TC. Но карта решила заставить вас выйти в интернет с помощью криптограммы ARQC. В ответе карты тег 0x9F27 указывает на тип криптограммы и значение криптограммы ARQC в теге 0x9F26.

- TLVs:  # EMV, Tag + Length + Value (TLV) series
 - x77:  # EMV, Template, Response Message Format 2
    tag: "77"
    len: "29" #   // 41
  - val:  # Template, Response Message Format 2.
   - x9F27:  # EMV, Cryptogram Information Data (CID)
      tag: "9F27"
      len: "01" #   // 1
      val: "80" # Cryptogram Information Data (CID).
      # 10______ - bits 8-7, ARQC
      # _____000 - bits 3-1 (Reason/Advice/Referral Code), No information given
   - x9F36:  # EMV, Application Transaction Counter (ATC)
      tag: "9F36"
      len: "02" #   // 2
      val: "005C" # Application Transaction Counter (ATC).  // 92
   - x9F26:  # EMV, Cryptogram, Application
      tag: "9F26"
      len: "08" #   // 8
      val: "AE7D66E45015D5A4" # Cryptogram, Application.
   - x9F10:  # EMV, Issuer Application Data (IAD)
      tag: "9F10"
      len: "12" #   // 18
      val: "0210A000002A0800010200000000000000FF" # Issuer Application Data (IAD).

Вы пытаетесь выполнить внешнюю аутентификацию без использования правильных данных аутентификации издателя (тег 0x91). В реальном мире ваш терминал должен подключиться к сети с хоста авторизации. В тестовой среде вы можете сами рассчитать значение этого тега (если знаете алгоритмы и некоторые данные карты, ключи, необходимые для расчета ARPC). Кроме того, как было замечено ранее, вы забыли указать длину Lc байта в команде APDU.

Это может быть случай, когда проверка криптограммы ARQC в режиме онлайн невозможна (терминалы с поддержкой офлайн, разрыв связи и т. д.). В этом случае ваш терминал должен выполнить Вторую генерацию AC, повторно запросив завершение транзакции с помощью криптограммы TC и используя Код ответа авторизации (тег 0x8A), специфичный для завершения транзакции в автономном режиме.

Также имейте в виду, что существует 4 режима CDA, которые могут поддерживаться ядрами терминала EMV и вашим приложением.

Пожалуйста, следуйте потокам транзакций, определенным в спецификациях EMV, представленных на сайте EMVCo.

person iso8583.info support    schedule 13.03.2016
comment
Итак, я отправил сообщение First Generate AC, и карта ответила ARQC. Значит, мне нужно отправить второй генератор переменного тока? Не ВНЕШНЯЯ АУТЕНТИФИКАЦИЯ? Что такое код ответа авторизации (тег 0x8A) в этом случае? - person magic; 15.03.2016

Вы просите карту сначала сгенерировать TC. Карта управляет рисками и возвращает вас обратно с ARQC. ARQC должен быть проверен эмитентом, поэтому вы отправляете ARQC со всеми необходимыми данными эмитенту. Если терминал способен отправлять данные на хост { Эмитент проверяет ARQC и генерирует ARPC — тег 91 (при генерации используется ARC — тег 8A). ARPC отправляется обратно на терминал. Терминал должен выполнить внешнюю аутентификацию ( 91 [len] [data] 81 [len] [date] ). Это должно дать вам либо 9000, либо 6300. Если это 9000, вы просите карту сгенерировать TC во втором поколении AC.
} иначе, если терминал не может подключиться к сети, а TAC и IAC по умолчанию разрешают автономный режим, { вы просите карту сгенерировать TC в AC второго поколения } иначе, если терминал не может подключиться к сети, а TAC и IAC По умолчанию автономный режим не разрешен, { вы просите карту сгенерировать AAC в AC второго поколения } Транзакция завершается.

Надеюсь, это прояснит

person Adarsh Nanu    schedule 25.03.2016

MasterCard не поддерживает команду EXTERNAL AUTHENTICATE в фазе USER. Вот почему ответ карты 6D00 («Код инструкции не поддерживается или недействителен»). Вы должны выполнить второе создание AC с данными аутентификации эмитента.

person Alexander Vgn    schedule 28.03.2016

6D00 означает «Код инструкции не поддерживается или недействителен».

77 29 9F 27 01 80 Когда информационная дата криптограммы равна 80, это означает, что 4-й бит включен. правильный ? что означает, что это не ARQC, а «требуется уведомление». Может причина в этом?

Вместо того, чтобы публиковать необработанный шестнадцатеричный дамп, было бы лучше, если бы вы могли разделить сообщение на компоненты.

person Adarsh Nanu    schedule 11.03.2016
comment
Вы пропустили Lc во внешней аутентификации? - person Adarsh Nanu; 11.03.2016
comment
Ответ будет таким же, даже если я добавлю Lc в EXTERNAL AUTHENTICATE. - person magic; 18.03.2016
comment
поток, как показано ниже - person Adarsh Nanu; 25.03.2016