Оттиски (Thumbprints)
Оттиски определяются путем вычисления хэш функции SHA-1, следуя кодировке DER ASN.1 структур:
UnsignedCertificate
UnsignedCertificateRevocationList
UnsignedBrandCRLIdentifier
Оттиск является тем же самым хэшем, который используется для подписи, верификации, CRL или BCI. Оттиски посылаются в сообщениях-запросах SET и могут игнорироваться получателем. Отправитель не обязан посылать все оттиски для всех сертификатов, CRL и BCI, имеющимся в его кэше, а только те, которые имеют отношение к конкретной паре сообщений запрос/отклик. Например, программа продавца не обязана посылать оттиски для всех держателей карт или всем платежным системам. Процедура отправки оттиска представлена в таблице 4.6.2.7.
Таблица 4.6.2.7. Посылка оттиска
Шаг | Действие |
1 | Инициализировать буфер для запоминания оттисков |
2 | Добавить оттиск (хэш):
|
3 | Присылается результат работы шага 2. |
Получатель проверяет то, что отправитель владеет всеми сертификатами, CRL и BCI, необходимыми для завершения обработки сообщения. Получатель может проигнорировать оттиски и послать эту информацию запросившему. Обработка оттисков получателем представлена в таблице 4.6.23.8.
Таблица 4.6.2.8. Обработка оттисков получателем
Шаг | Действие |
1 | Инициализировать буфер для запоминания оттисков |
2 | Для каждого из них:
|
3 | Присылается результат работы шага 2 со списком сертификатов, CRL и BCI, которые следует послать в отклике. |
Простая инкапсуляция с оператором подписи Enc(s,r,t) представляет данные, которые были сначала подписаны, а затем зашифрованы. Этот случай соответствует варианту PKCS#7 SignedData, инкапсулированных в EnvelopedData. Процедура выполняется следующим образом.
Шаг | Действие |
1 | Используя оператор подписи и секретный ключ объекта s, подписать содержимое группы t |
2 | Добавить результат шага 1 в группу t |
3 | Используя оператор асимметричного шифрования и общедоступный ключ получателя r, зашифровать результат шага 2 |
4 | Послать результат работы шага 3 |
Шаг | Действие |
1 | Инициализировать и загрузить информационные поля, зависимые от типа сообщения |
2 | Преобразовать информационные поля, подлежащие шифрованию, в формат DER |
3 | Сформировать новый ключ DES |
4 | Зашифровать результат работы шага 2, используя ключ DES из шага 3. Используется режим DES-CBC. |
5 | Инициализировать буфер зашифрованных данных с помощью кода типа данных, идентификатора алгоритма и добавить эту информацию к результату шага 4. |
6 | Инициализировать буфер цифрового конверта, в зависимости от получателя (128 байт) |
7 | Инициализировать буфер дополнительного шифрования OAEP с использование ключа из шага 3. |
8 | Применить OAEP для буфера цифрового конверта |
9 | Зашифровать результат шага 8, используя асимметричный общедоступный ключ объекта r |
10 | Инициализировать информационный буфер получателя посредством идентификатора алгоритма RSA и добавить туда результат работы шага 9 |
11 | Инициализировать буфер EnvelopedData PKCS#7 и положить туда результат шага 10 и 5 |
12 | Прислать результат шага 11 |
Он предполагает быстрое симметричное шифрование открытого текста сообщения и последующее шифрование секретного ключа с использование общедоступного ключа получателя. Процедура такого шифрования представлена в таблице 4.6.2.10. Таблица 4.6.2.10. Асимметричное шифрование с гарантией целостности
Шаг | Действие |
1 | Инициализировать и загрузить информационные поля, зависимые от типа сообщения |
2 | Преобразовать информационные поля, подлежащие шифрованию, в формат DER |
3 | Вычислить хэш SHA-1 результата шага 2 |
4 | Сформировать новый ключ DES |
5 | Зашифровать результат работы шага 2, используя ключ DES из шага 4. Используется режим DES-CBC. |
6 | Инициализировать буфер зашифрованных данных с помощью кода типа данных, идентификатора алгоритма DES и добавить эту информацию к результату шага 5. |
7 | Инициализировать буфер цифрового конверта, в зависимости от получателя (128 байт) |
8 | Инициализировать буфер дополнительного шифрования OAEP с использование ключа из шага 4 и хэша, вычисленного на шаге 5. |
9 | Применить OAEP для буфера цифрового конверта |
10 | Зашифровать результат шага 9, используя асимметричный общедоступный ключ объекта r |
11 | Инициализировать информационный буфер получателя посредством идентификатора алгоритма RSA и добавить туда результат работы шага 10 |
12 | Инициализировать буфер PKCS#7 и положить туда результат шага 11 и 6 |
13 | Прислать результат шага 12 |
Шаг | Действие |
1 | Инициализировать и загрузить информационные поля, зависимые от типа сообщения |
2 | Преобразовать информационные поля, подлежащие шифрованию, в формат DER |
3 | Зашифровать результат работы шага 2, используя ключ k. Применяется алгоритм DES или CDMF в зависимости от того, какой из этих алгоритмов поддерживается получателем сообщения. Для DES используется режим DES-CBC. |
4 | Инициализировать буфер зашифрованных данных с помощью кода типа данных, идентификатора алгоритма (DES или CDMF) и добавить к этой информации результат шага 3. |
5 | Прислать результат шага 4 |
Для SET алгоритмом подписи по умолчанию является RSA с хэшем SHA-1. Обычно для SET подпись делается до шифрования. Операция цифровой подписи для SignedData всегда производится над данными, представленными в формате DER (ASN.1). Операции подпись SignedData никогда не производятся для произвольных строк октетов (например, для ASCII-строк). По этой причине тип содержимого data не используется никогда. PKCS#7 требует включения в подписываемый текст двух аутентифицированных атрибутов. Такими атрибутами являются contentType и messageDigest, оба они включаются в содержимое, которое подписывается в рамках SET. SignedData имеет формат DER, и содержат октеты тэга и длины атрибутов. Исходные данные для расчета дайджеста сообщения берутся из компонента content последовательности ContentInfo. ContentInfo связывает идентификатор компонента contentType с типом компонента >content. В SET каждый тип содержимого однозначно именуется объектным идентификатором. Так как это значение не защищено от атак подмены, он также включается в authenticateAttributes. Атрибут contentType специфицирует идентификатор объекта, который соответствует значению компонента contentType последовательности ContentInfo. Атрибут messageDigest содержит значение хэшированного компонента content ContentInfo. Определение последовательности SignerInfos в PKCS#7 допускает любое число подписантов (по одному SignerInfo на каждого). SET PKCS#7 SignedData требует наличия одного подписанта для всех сообщений кроме CertReq и CertInqReq, которые требуют две подписи, когда используются для обновления сертификата. Таким образом, требования SET несколько мягче, чем PKCS#7. В компоненте SignerInfo из SignerInfos как authenticateAttributes, так и unauthenticateAttributes компоненты специфицируются опционно. В SET компонент unauthenticateAttributes последовательности SignerInfo всегда отсутствует и никогда не появляется при кодировании SignedData. Компонент же authenticateAttributes всегда присутствует и включается в процесс вычисления дайджеста.
Процедура цифровой подписи представлена в таблице 4.6.2.12. Таблица 4.6.2.12. Процедура формирования цифровой подписи
Шаг | Действие |
1 | Инициализировать тип SignedData, введя код версии, идентификатор алгоритма и тип содержимого, подлежащего подписанию |
2 | Преобразовать информацию, подлежащую подписанию в формат DER |
3 | Использовать результат шага 2 для инициализации компонента content из ContentInfo. |
4 | Инициализировать тип SignerInfo, введя код версии, идентификаторы алгоритмов вычисления и шифрования дайджеста |
5 | Вычислить дайджест сообщения, используя SHA-1 для результата шага 3 |
6 | Инициализировать структуру authenticatedAttributes и занести в структуру атрибуты contentType и messageDigest. Установить компоненты type атрибутов равными идентификаторам этих атрибутов |
7 | Инициализировать компонент values первого атрибута типа кодом содержимого, подлежащего подписанию, а второго атрибута - значением дайджеста, вычисленного на этапе 5 |
8 | Закодировать аутентифицированные атрибуты и зашифровать результат, используя секретный ключ отправителя. Поместить результат в SignedData |
9 | Выбрать соответствующие сертификаты Х.509 и CRL, необходимые для верификации подписи, и включить их в SignedData |
10 | Если тип сообщения требует двух подписей, повторить шаги с 4 по 9 |
Шаг | Действие |
1 | Установить ipad соответствующим буферу, который содержит 64 байта с кодами 0х36 |
2 | Установить opad равным буферу, содержащему 64 байта с кодами 0х5С |
3 | Добавить нули в конец k, чтобы размер строки стал равным 64 байтам. Например, если длина k равна 20 байт, то следует добавить 44 нуля. |
4 | Осуществить операцию побитового исключающего ИЛИ для результата шага 3 и ipad |
5 | Добавить данные группы t в 64-байтовый буфер, сформированный на этапе 4 |
6 | Вычислить хэш SHA-1 для результата шага 5 с привлечением Hash-оператора |
7 | Осуществить операцию побитового исключающего ИЛИ для результата шага 3 и opad |
8 | Добавить результат SHA-1 шага 6 к 64-байтовому буферу, заполненному в результате шага 7 |
9 | Вычислить хэш SHA-1 для результата шага 8 с привлечением Hash-оператора |
10 | Прислать результат работы шага 9 |
Этот оператор соответствует параметризованному типу ASN.1 H{}. Он используется только в обработке OAEP. Оператор DigestedData DD(T) соответствует 160-битовому хэшу SHA-1 группы, вложенной в последовательность PKCS DigestedData. Протокол SET использует параметризованный тип DD{} (detached digests). Каждый тип содержимого типа дайджест в SET имеет имя, уникальный идентификатор объекта. Компонент contentType из ContentInfo делается равным значению этого идентификатора. Компонент digest из DigestedData является результатом вычисления дайджеста сообщения. Он содержит дайджест сообщения типа SET, идентифицируемый компонентом contentType из contentInfo. Дайджест вычисляется с помощью алгоритма из перечня DigestAlgorithm. Вычисление производится для полного DER-представления, включая тэг, длину в октетах и типа ASN.1. Компонент digestAlgorithm из DigestedData устанавливается равным одному из значений кодов алгоритма. Код digestAlgorithm используется получателем для проверки дайджеста сообщения. Верификация осуществляется путем независимого вычисления дайджеста сообщения и сравнения его значения с компонентом digest из DigestedData. Последовательность действий показана в таблице 4.6.2.14. Таблица 4.6.2.14. Процедура вычисления дайджеста сообщения.
Шаг | Действие |
1 | Установить B равным адресу группы t, для которой вычисляется дайджест |
2 | Установить L равным длине группы t |
3 | Инициализировать 160-битный буфер для хранения хэша SHA-1 |
4 | Вычислить хэш SHA-1 для буфера, используя B и L |
5 | Положить результат шага 4 в поле digest DigestedData |
6 | Положить идентификатор хэш-алгоритма SHA-1 в digestAlgorithm |
7 | Установить значение версии равным нулю |
Существуют криптографические методы, которые позволяют определить одни биты сообщения легче, чем другие. OAEP случайным образом перераспределяет биты блока PKCS#7 так, что все биты становятся с этой точки зрения эквивалентными. Примитивы шифрования E, EH, EX и EXH объединяют RSA-шифрование и алгоритм OAEP (Bellare-Rogaway Optimal Asymmetric Encryption Padding). SET использует OAEP для получения дополнительной защиты информации о счете клиента (владельца карты, продавца или получателя) с помощью цифрового конверта. Реализация алгоритма OAEP продемонстрирована в таблице 4.6.2.15. Таблица 4.6.2.15. Описание алгоритма OAEP
Шаг | Действие |
1 | Подготовить дополнительные данные, как это описано в формате сообщения |
2 | Если используется оператор шифрования EH или EXH, вычислить хэш SHA-1 для данных подлежащих DES-шифрованию |
3 | Сформировать новый случайный ключ для DES-шифрования регулярной части данных |
4 | Объединить DES-ключ, хэш SHA-1 данных (HD) перед DES-шифрованием (если оно применяется) и любые дополнительные данные, чтобы сформировать действительный блок данных ADB (Actual Data Block). |
5 | Взять байт, содержащий код 0х03 (тип блока - BT), семь байтов нулей (байты верификации - V) и байт блока содержимого (BC) и положить в ADB, тем самым формируя блок данных (DB). DB= BT|BC|V|ADB |
6 | Сгенерировать случайную 16-битовую строку E-Salt и вычислить H1(E-Salt). H1 выдает лидирующие байты хэша SHA-1 |
7 | Вычислить А=DB Е H1(E-Salt) |
8 | Осуществить присвоение B= E-Salt Е H2(A). Сформировать PDB, объединив А и В. Н2 предоставляет завершающие байты хэша SHA-1 |
9 | Присвоить I случайное значение, не равное 0х00 или 0х80 |
10 | Зашифровать полученный блок R с помощью RSA |
Диаграмма работы OAEP Обработка ошибок Каждому сообщению-запросу должно соответствовать сообщение-отклик. Сообщения об ошибках могут соответствовать как запросам, так и откликам. Сообщение об ошибке указывает, что приславший его не смог разобрать формат полученного запроса или отклика, или при обработке потерпели неудачу верификационные тесты. Не следует путать отрицательный отклик с сообщением об ошибке. Сообщение об ошибке посылается при невозможности обработать входное сообщение. Сообщение Error не посылается, например, при непрохождении аутентификации. Причиной сигнала ошибки может быть искажение пакета при транспортировке по локальной сети или через Интернет, нелегальные значения полей сообщения или протокольные искажения. Для выявления сообщений-дубликатов достаточно использовать открытый текст, содержащийся в цифровом конверте сообщения. Реакция получателя на сообщение-дубликат зависит от свойств идемпотентности конкретного типа сообщения, от числа дубликатов, частоты их поступления и от того, кто является их отправителем. Поврежденным сообщением считается такое, которое не может быть обработано. В норме такие сообщения не должны приходить, так как имеется контроль корректности пакетов на транспортном уровне и при обнаружении любых повреждений сообщение должно быть переслано повторно. Но если такое “невозможное событие” все-таки произойдет, будет послано сообщение Error, содержащие код типа ошибки и идентификатор сообщения, ее вызвавшего. Приложение никогда не посылает сообщение Error в ответ на другое сообщение Error. Сообщения, которые не являются протокольными для SET, просто игнорируются. Если тэг типа сообщения равен 999 (указывая, что это сообщение об ошибке), приложение SET не должно ни при каких обстоятельствах посылать на него отклик. Когда приложение сталкивается с ошибкой, оно формирует Error-сообщение в следующей последовательности.
Шаг | Действие |
1 | Сформировать ErrorTBC следующим образом:
|
2 | Подписать сообщение Error, если имеется сертификат подписи |
3 | Вызвать формирование цифрового конверта и отправить сообщение |
Для сообщения Error определены следующие поля
Имя поля | Описание |
Error | <Signed Error, UnsignedError > |
SignedError | S(EE, ErrorTBS) |
UnsignedError | ErrorTBSНеподписанная версия Error будет использоваться, если объект не имеет сертификата подписи |
ErrorTBS | { ErrorCode, ErrorNonce, [ErrorOID], [ErrorThumb], ErrorMsg} |
ErrorCode | Цифровой код, определяющий условия ошибки (см. табл. 4.6.2.16) |
ErrorNonce | Разовый код, который гарантирует, что подпись генерируется для трудно предсказуемых данных |
ErrorOID | Объектный идентификатор неподдерживаемых критических расширений, вызвавших ошибку |
ErrorThumb | Оттиск сертификата, который вызвал ошибку или хэш сертификата, если произошла ошибка верификации подписи |
ErrorMsg | <MessageHeader, BadWrapper> |
MessageHeader | Заголовок сообщения, которое вызвало ошибку |
BadWrapper | Цифровой конверт сообщения, которое вызвало ошибку (не более 20 килобайт) |
Ошибка | Описание |
unspecifiedFailure | Причина неудачи не фигурирует в списке стандартных ошибок |
messageNotSupported | Этот вполне корректный тип сообщения не поддерживается получателем |
decodingFailure | Произошла ошибка в процессе DER-кодирования сообщения |
invalideCertificate | Сертификат, необходимый для обработки сообщения, некорректен. Поле ErrorThumb идентифицирует этот сертификат. |
expiredCertificate | Время действия сертификата, необходимого для обработки сообщения, иссякло. Поле ErrorThumb идентифицирует этот сертификат. |
revokedCertificate | Сертификат, необходимый для обработки сообщения, отозван. Поле ErrorThumb идентифицирует этот сертификат. |
missingCertificate | Сертификат, необходимый для обработки этого сообщения, отсутствует в кэше сертификатов получателя. |
signatureFailure | Цифровая подпись сообщения не может быть верифицирована |
badMessageHeader | Заголовок сообщения не может быть обработан |
wrapperMsgMismatch | Содержимое цифрового конверта сообщения не согласуется с внутренним содержимым сообщения. |
versionTooOld | Номер версии сообщения слишком стар для получателя |
versionTooNew | Номер версии сообщения слишком нов для получателя |
unrecognizedExtension | Сообщение или сертификат содержит критическое расширение, которое получатель не может обработать. Поле ErrorOID идентифицирует расширение. Если расширение присутствует в сертификате, поле ErrorThumb идентифицирует сертификат |
messageTooBig | Сообщение слишком длинно для получателя |
signatureRequired | Неподписанная версия сообщения неприемлема |
messageTooOld | Дата сообщения слишком далеко в прошлом для получателя |
messageTooNew | Дата сообщения слишком близка для получателя |
thumbsMismatch | Оттиск, посланный в неподписанном запросе, не согласуется с тем, что прислано запрашивающей стороне |
unknownXID | Получен неизвестный RRPID |
challengeMismatch | Вызов, посланный в запросе, не согласуется с вызовом в отклике |
Так как сообщения Error могут посылаться, в том числе и в ответ на отклик, возникает проблема при работе с протоколами, базирующимися на алгоритмах запрос-отклик (например, HTTP). В этом случае сообщение об ошибке может посылаться в качестве запроса, на который необязательна посылка отклика. На нижележащем протокольном уровне при этом может происходить таймаут. Работа с сертификатами В работе с сертификатами участвуют девять субъектов. Иерархия этих субъектов представлена на рис. 4.6.2.10. Верхнюю позицию в иерархии занимает корневой центр сертификации. Корневой сертификат следует требованиям документа X.509 (версия 3) с некоторыми расширениями, вводимыми протоколом SET. Прежде чем система будет развернута, должны быть проделаны следующие операции:
- Нужно сформировать пару #1 корневых ключей R1
- Сгенерировать сертификат для корневого ключа #1 (C1)
- Сформировать пару #2 корневых ключей R2
- Вычислить оттиск (хэш - H2) общедоступной составляющей R2
- Вычисляется общедоступная часть корневого ключа #3 (R3)
- Определяется оттиск R3 (хэш H3)
- Формируется сертификат корневого ключа #2 (C2 - содержит H3)
Проверка сертификатов производится строго в соответствии с данной иерархической схемой. Доступ к корневому центру сертификации производится крайне редко, только в случае получения нового сертификата платежной системы или при обновлении корневого сертификата. При взаимодействии с ним привлекается в максимально возможной мере аппаратный контроль. Если произойдет раскрытие секретного ключа платежной системы, то RCA сформирует и разошлет новый список отмененных сертификатов CRL (Certificate Revocation List). BCA являются независимыми для каждой платежной системы и реализуются практически теми же мерами безопасности, как и RCA. Эти центры служат для формирования и рассылки геополитических и/или сертификатов владельцев карты, продавцов или платежных центров, размещенных ниже по иерархии. Они также ответственны за обновление и рассылку списков CRL и BCI, содержащие все CRL платежной системы. Геополитические центры сертификации (являются опционными) позволяют платежным системам перераспределять ответственность между отдельными географическими и политическими регионами. Эти центры ответственны за формирование и рассылку соответствующих региональных CRL. Центры сертификации владельцев карт (ССА) формируют по запросу и отсылают сертификаты владельцам платежных карт. Запрос сертификата может быть послан через WEB или по электронной почте. ССА поддерживают взаимоотношения с эмитентами карт для сертификации счетов владельцев карт. ССА также занимаются рассылкой CRL, сформированных RCA, BCA, GCA и центров сертификации платежных центров. Функции CCA может выполнять центр платежной системы, эмитента карты или какой-то иной субъект, который отвечает требованиям конкретной платежной системы. Центр МСА ответственен за рассылку сертификатов продавцам. Получатели (Acquirers) проверяют и одобряют запросы сертификатов продавца до их выдачи центром MCA. Центр PCA служит для выдачи сертификатов для платежных центров. Их функции, также как и в случае CCA, могут выполняться центрами платежной системы, получателя и т.д. Любой центр сертификации выполняет следующие функции:
- Формирование и выдача сертификата
- Обновление сертификатов
- Контроль работоспособности сертификатов и удаление непригодных
Для владельцев карты формируются только сертификаты подписи, для продавцов и платежных центров формируются сертификаты подписи и шифрования. Сертификаты для владельцев карт формируются центрами CCA. Выпуск сертификата держателя карты включает в себя следующие обмены между держателем карты и CCA (см. также рис. 4.6.2.2).
- Владелец карты посылает запрос сертификата
- ССА производит шифрование сертификата для защиты передачи номера платежной карты в ССА
- Владелец шифрует номер своей карты, используя сертификат ССА, и посылает результат в ССА
- ССА откликается посылкой формы для регистрации сертификата карты
- Владелец карты заполняет форму, которая включает в себя его общедоступный ключ, и посылает форму в ССА для регистрации
- ССА верифицирует полученную регистрационную информацию с привлечением эмитента карты и генерирует сертификат, подписывает его и посылает владельцу карты.
- Продавец посылает запрос сертификата в МСА.
- МСА откликается посылкой регистрационной формы.
- Продавец заполняет форму и посылает ее и свой общедоступный ключ в МСА для обработки.
- Банк продавца или центр управления платежной системы проверяет запрос продавца и МСА генерирует, подписывает и посылает сертификат продавцу.
При аннулировании идентификатор и некоторые другие характеристики сертификата заносятся немедленно в список CRL. Последний сразу подлежит рассылке всем субъектам, которые могут использовать этот сертификат. При выполнении любой операции в рамках протокола SET производится проверка всех сертификатов, образующих иерархическую цепочку (см. рис. 4.6.2.11), начиная от конечного объекта (ЕЕ) до корневого (Root). Стрелки означают, чей сертификат использовался для подписи. Таким образом, каждый сертификат связан с сертификатом подписи субъекта его сформировавшего. Рис. 4.6.2.11. Иерархия проверок Основной протокол Далее рассматривается протокол и обработка откликов владельца карты, продавца или платежного центра (конечный объект - EE), а также получение подписей и/или сертификатов Х.509 шифрования данных от СА (Certificate Authority). Протокол определяет процедуры получения первого сертификата или обновления предшествующего. Прежде чем запросить сертификат владелец карты должен выполнить следующее:
- Получить счет в одной из платежных систем, например, в VISA или MasterCard.
- Иметь возможность формировать общедоступный и секретные ключи. Обеспечить безопасное хранение секретного ключа. Понятно, что местом его хранения не может быть оперативная память, да и дисковые накопители вряд ли можно считать приемлемым местом записи, если хотя бы теоретически к ним может быть получен доступ.
- Программа владельца карты должна иметь определенную информацию, которая может быть использована для идентификации и аутентификации владельца карты. Это должно быть сделано в соответствии с требованиями эмитента карты.
- Иметь URL или электронный почтовый адрес для связи с ССА.
- Обзавестись прикладной программой (например, броузером), поддерживающей протокол SET.
- Идентификатор, присланный получателем (Acquirer - банк продавца)
- Иметь возможность формировать общедоступный и секретные ключи. Обеспечить безопасное хранение секретного ключа.
- Программа продавца должна иметь определенную информацию, объем и характер которой согласуется с банком продавца.
- URL или электронный почтовый адрес для связи с MCA.
- Обзавестись прикладной программой (например, броузером), поддерживающей протокол SET.
- Возможностью формировать пары ключей (секретый/общедоступный) и местом их надежного храниения.
- Получить банковский идентификационный номер BIN (Bank ID)
- Программа владельца карты должна иметь определенную информацию, которая может быть использована для идентификации и аутентификации платежного центра.
Объем и характер этой информации согласуется с банком продавца. - Иметь URL или электронный почтовый адрес для связи с PCA
- Обзавестись прикладной программой (например, броузером), поддерживающей протокол SET.
- Приложение владельца карты посылает CardCInitReq CCA. При этом используется идентификатор платежной системы или идентификатор, полученный из стартового сообщения.
- ССА посылает приложению SET сообщение CardCInitRes.
- Приложение владельца карты посылает ССА сообщение RegFormReq.
- ССА отправляет сообщение RegFormRes, содержащее регистрационную форму и формулировку общих требований.
- Приложение владельца карты заполняет регистрационную форму, заносит свой общедоступный ключ и сертификат, подлежащий обновлению (если имеется) в CertReq и посылает его ССА.
- ССА формирует сертификат, включает его в CertRes и посылает владельцу карты.
- Приложение SET посылает сертификационному центру СА сообщение Me-AqCInitReq, при этом используется BIN и идентификатор продавца, полученные от системного администратора продавца или платежного центра.
- СА посылает приложению SET сообщение Me-AqCInitRes, содержащее регистрационную форму и формулировку общих требований.
- Приложение SET отображает эту форму и требования. Пользователь должен заполнить регистрационную форму и согласиться с предлагаемыми требованиями.
- Приложение SET включает в CertReq заполненную форму, новый общедоступный ключ и сертификат, подлежащий обновлению (если он имеется) и посылает это все СА.
- СА формирует сертификат, включает его в CertRes и посылает продавцу или платежному центру.
Логика обменов для получения сертификата владельцем карты при начальной регистрации была показана на рис 4.6.2.12. Рис. 4.6.2.12. Схема обмена сообщениями при получении сертификата между владельцем карты и ССА Если ЕЕ уже имеет регистрационную информацию, обмены CardCInitReq/Res и RegFormReq/Res могут быть опущены. При работе через WWW используется во всех случаях полный перечень обменов. После того как приложение SET инициализировано, владелец карты посылает ССА сообщение CardCInitReq, указывающее через оттиски на сертификаты, CRL и BrandCRLIdentifier, которые содержаться в его кэше сертификатов. ССА реагирует посылкой сообщения CardCInitRes, содержащего любые сертификаты, CRL и BrandCRLIdentifier, которые потребуются владельцу карты для верификации подписи, а также сертификат шифрования, используемый для последующих сообщений. Приложение SET формирует сообщение CardCInitReq следующим образом.
Шаг | Действие |
1 | Генерируется RRPID |
2 | Генерируется LID-EE |
3 | Формируется новый случайный Chall-EE |
4 | Копируется BrandID, который запомнен или получен в инициализирующем сообщении |
5 | Опционно заполняется поле Thumbs, которое содержит оттиски для каждого CRL, сертификатов SET, BrandCRLIdentifier и корневой сертификат, резидентный в кэше владельца карты |
6 | Формируется цифровой конверт сообщения, чтобы послать CardCInitReq центру ССА |
CardCInitReq | {RRPID, LID-EE, Chall-EE, BrandID, [Thumbs]} |
RRPID | Идентификатор пары запрос/отклик |
LID-EE | Локальный ID, сформированный для системы владельца карты |
Chall-EE | Вызов владельца карты по поводу пригодности подписи, адресованный ССА |
BrandID | Идентификатор платежной системы для запрошенного сертификата |
Thumbs | Список оттисков сертификатов (включая корневой), CRL и BrandCRLIdentifier, которые хранятся в данный момент владельцем карты |
Шаг | Действие |
1 | Получить CardCInitReq из сообщения Receive |
2 | Проверить, что RRPID в CardCInitReq соответствует RRPID в цифровом конверте сообщения. Если проверка не прошла, присылается сообщение об ошибке с кодом ErrorCode= unknownRRPID |
3 | Запомнить список откликов, LID-EE, Chall-EE и RRPID, которые должны быть использованы в CardCInitRes |
После того как ССА обработает CardCInitReq, он выполнит следующие шаги, для того чтобы сформировать CardCInitRes. Как и в случае SignedData, сертификаты и CRL, нужные для верификации подписи, включаются в CardCInitRes вне данных, которые должны быть подписаны. Последовательность действий представлена ниже в таблице.
Шаг | Действие |
1 | Сформировать структуру данных CardCInitResTBS, для этого:
|
2 | Подписать DER-кодированный массив кодов CardCInitResTBS, установить тип содержимого SigneadData равным id-set-content- CardCInitResTBS.Включить в SigneadData любые сертификаты, CRL или BrandCRLIdentifier, которые отсутствуют в списке оттисков. |
3 | Сформировать цифровой конверт сообщения и послать сообщение CardCInitRes владельцу карты |
CardCInitRes | S(CA, CardCInitResTBS) |
CardCInitResTBS | {RRPID, LID-EE, Chall -EE, [LID-CA], CAEThumb, [BrandCRLIdentifier], [Thumbs]} |
RRPID | Идентификатор пары запрос/отклик |
LID-EE | Копируется из CardCInitReq |
Chall-EE | Копируется из CardCInitReq |
LID-CA | Локальный ID. Генерируется системойCCA или для нее |
CAEThumb | Оттиск сертификата ключевого обмена CCA, котоый владелец карты должен использовать для шифрованияRegFormReq |
BrandCRLIdentifier | Смотри секцию описания BrandCRLIdentifier |
Thumbs | Копируется из CardCInitR |
Шаг | Действие |
1 | Получить CardCInitRes из входного сообщения (Receive) |
2 | Проверить, что RRPID соответствует тому, что был послан в CardCInitReq и тому, который получен в цифровом конверте сообщения CardCInitRes. Если соответствия нет, посылается сообщение об ошибке с кодом ErrorCode равным unknownRRPID |
3 | Проверить, что полученный список оттисков соответствует тому, что был послан в сообщении CardCInitReq. Если соответствия нет, посылается сообщение об ошибке с кодом ErrorCode равным thumbsMismatch |
4 | Проверить, что полученный Chall-EE равен посланному в CardCInitReq. Если равенство отсутствует, посылается сообщение об ошибке с кодом ErrorCode равным challengeMismatch. |
5 | Запомнить LID-CA (если этот элемент был включен) для последующей записи в RegFormReq. Проверить, что полученный Chall-EE равен посланному в CardCInitReq. |
6 | Проверить, что приложение владельца карты поддерживает один из алгоритмов, перечисленных в туннельном расширении сертификата шифрования CA. Если приложение владельца карты не поддерживает ни одного общего с СА алгоритма, следует уведомить об этом пользователя и прервать дальнейшую обработку сообщения СА. |
Если приложение владельца карты успешно обработало отклик CardCInitRes, оно может сформировать и послать сообщение RegFormReq. Это сообщение шифруется приложением владельца карты с использованием сертификата, полученного от ССА в CardCInitRes. Последовательность формирования и посылки RegFormReq представлена ниже в таблице.
Шаг | Действие |
1 | Сформировать RegFormReqData согласно следующему формату:
|
2 | Сформировать структуру RegFormReqTBE:
|
3 | Оформить поле данных, подлежащих дополнительному шифрованию:
|
4 | Зашифровать данные, используя оператор EXH со следующими параметрами:
|
5 | Вложить результат в цифровой конверт комбинированного сообщения и послать RegFormReq в центр СА |
RegFormReq | EXH(CA, RegFormReqData, PANOnly) |
RegFormReqData | {RRPID, LID-EE, Chall-EE2,[LID-CA], RequestType, Language, [Thumbs]} |
PANOnly | Структуру смотри в табл. ниже |
RRPID | ID пары запрос/отклик |
LID-EE | Копируется из CardCInitRes |
Chall-EE2 | Вызов ЕЕ, имеющий целью обновление подписи СА |
LID-CA | Копируется из CardCInitRes |
RequestType | Смотри табл. 4.6.2.19 |
Language | Предпочтительный язык последующего текста |
Thumbs | Списки сертификатов (включая корневой), CRL и BrandCRLIdentifier, хранимых в данный момент владельцем карты |
Поля данных PANOnly
Имя поля | Описание |
PAN | Номер платежной карты владельца |
EXNonce | Случайное число, используемое для маскирования PAN |
Тип запроса | Только сертификат подписи | Только сертификат шифрования | Оба сертификата |
Начальный запрос владельца карты | 1 | 2* | 3* |
Запрос обновления владельца карты | 10 | 11* | 12* |
Шаг | Действие |
1 | Извлечь RegFormReq из входного сообщения |
2 | Заполнить PAN из данных, которые подлежат шифрованию. Это делается после удаления заполнителя. |
3 | Из данных RegFormReqData запомнить RequestType, RRPID, LID-EE, Chall-EE2, LID-CA, список оттисков (Thumbs) и код языка. |
4 | Проверить, что RRPID, полученный из цифрового конверта сообщения соответствует одному коду из RegFormReqTBE. Если соответствия нет, возвращается сообщение об ошибке с ErrorCode равным unknownRRPID |
Шаг | Действие |
1 | Сформировать RegFormTBS в соответствии со следующей процедурой:
|
2 | Подписать результат шага 1 (то есть данные RegFormTBS), установить contentType для SignedData равным id-set-content-RegFormTBS. |
3 | Сформировать цифровой конверт сообщения и послать владельцу карты RegFormRes |
Структура сообщения RegFormRes представлена в таблице 4.6.2.20. Таблица 4.6.2.20. Структура RegFormRes
RegFormRes | S(CA, RegFormResTBS) |
RegFormResTBS | {RRPID, LID-EE, Chall-EE2,[LID-CA], Chall-CA, [CAEThumb], RequestType, RegFormOrReferral, [BrandCRLIdentifier], [Thumbs]} |
RRPID | ID пары запрос/отклик |
LID-EE | Копируется из RegFormReq |
Chall-EE2 | Копируется из RegFormReq |
LID-CA | Локальный ID. Формируется для системы СА. |
Chall-CA | СА обращение по поводу пригодности сертификата запрашивающей стороны |
CAEThumb | Оттиск сертификата ключевого обмена, который должен использоваться для шифрования CertReq. Если это поле отсутствует, используется сертификат, идентифицированный в CardCIntRes. |
RequestType | Смотри табл. 4.6.2.19 |
RegFormOrReferral | Смотри табл. 4.6.2.21 |
BrandCRLIdentifier | Смотри описание в разделе о BrandCRLIdentifier ниже. |
Thumbs | Копируется из RegFormReq |
RegFormOrReferral | <RegFormData, ReferralData> |
RegFormData | {[RegTemplate], PolicyText} |
ReferralData | {RegFormID, [BrandLogoURL], [CardLogoURL], RegFieldSeq} |
RegTemplate | {RegFormID, [BrandLogoURL], [CardLogoURL], RegFieldSeq} |
PolicyText | Заявление, которое должно быть отображено в системе отправителя запроса вместе с RegTemplate |
Reason | Заявление, связанное с запросом и отображаемое в системе отправителя запроса |
ReferralURLSeq | {ReferralURL +}Опционные URL ссылок, перечисленные в порядке важности |
RegFormID | Идентификатор, присвоенный СА |
BrandLogoURL | URL базовой страницы расчетной системы |
CardLogoURL | URL базовой страницы финансовой организации |
RegFieldSeq | {RegField +} |
ReferralURL | URL альтернативного СА для обработки запросов сертификатов для данного объекта |
RegField | {[FieldId], FieldName, [FieldDesc], [FieldLen], FieldRequired, FieldInvisible} |
FieldID | Идентификаторы объекта для полей регистрационной формы |
FieldName | Одно или более имен полей, которые должны быть отображены в качестве меток для заполнения формы; текст записывается на языке, определенном в RegFormReq или Me-AqCInitReq |
FieldDesc | Описание содержимого поля на языке, заданном в RegFormReq или Me-AqCInitReq; содержит дополнительную информацию для использования в случае, когда владелец карты запросит помощи при заполнении формы |
FieldLen | Максимальная длина поля |
FieldRequired | Булево значение, указывающее на необходимость ввода (должен ли поле заполнить владелец карты или оно будет заполнено приложением) (невидимое поле) |
FieldInvisible | Булево значение, указывающее на то, что поле не должно отображаться пользователю; приложение должно заполнить FieldValue, основываясь на FieldID, или оставить его пустым |
Шаг | Действие |
1 | Получить RegFormRes из входного сообщения |
2 | Проверить подпись. Если подпись некорректна, отправить сообщение об ошибке с ErrorCode равным signatureFailure. |
3 | Получить RRPID, RequestType, LID-EE, Chall-EE2, CAEThumb из RegFormTBS |
4 | Проверить, что RRPID является тем же самым, что и идентификатор, записанный в цифровом конверте сообщения, и совпадет с кодом, присланным в RegFormReq. Если совпадения нет, отправить сообщение об ошибке с ErrorCode равным unknownRRPID. |
5 | Проверить, что RequestType, LID-EE и Chall-EE2 идентичны присланным в RegFormReq. Если совпадения нет, отправить сообщение об ошибке с ErrorCode равным challengeMismatch. |
6 | Если был включен CAEThumb, запомнить соответствующий сертификат шифрования, использованный для шифрования CertReq. |
7 | Проверить, что полученные оттиски, соответствуют посланным в сообщении CardCInitReq. Если соответствия нет, отправить сообщение об ошибке с ErrorCode равным thumbsMismatch. |
8 | Если в RegFormTBS включены данные RegFormData то:
|
9 | Если в RegFormResTBS включено поле ReferralData то:
|
Пары сообщений Me-AqCInitReq/ Res используются продавцом или расчетным центром для получения регистрационной формы сертификата. Продавец или расчетный центр запускают сертификатный протокол путем посылки запроса Me-AqCInitReq. Это сообщение содержит банковскую информацию продавца или расчетного центра, тип запрашиваемого сертификата, а также сертификаты, CRL и BrandCRLIdentifier, которые хранятся в надежном сертификатном кэше. Если MCА или РСА имеют регистрационные формы на подходящем языке для указанного банка, она присылается в сообщении Me-AqCInitRes вместе с любыми сертификатами, CRL и BrandCRLIdentifier, которые могут потребоваться продавцу или расчетному центру для проверки цифровой подписи. Если MCА или РСА не имеют подходящей регистрационной формы и/или имеют дополнительную информацию относительно отклонения поступившего запроса, эти данные также заносятся в Me-AqCInitRes. Схема работы протокола сертификатов для данного случая показана на рис. 4.6.2.13. Рис. 4.6.2.13. Схема обмена сообщениями при получении сертификата между продавцом и MCA или между платежным центром и PCA При получении Me-AqCInitRes программа конечного пользователя (ЕЕ) может послать сообщение CertReq, содержащее заполненную форму. Процедура формирования Me-AqCInitReq включает в себя следующие операции:
Шаг | Действие |
1 | Сформировать новый RRPID |
2 | Сформировать новый LID-EE |
3 | Сформировать новый случайный код Chall-EE |
4 | Занести BrandID, который хранится в приложении или получен в стартовом сообщении |
5 | Заполнить поле RequestType |
6 | Заполнить поле Language (язык) |
7 | Опционно создать оттиски для каждого CRL, сертификата, BrandCRLIdentifier и корневого сертификата, резидентно размещенных в кэше (если имеются) |
8 | Если ЕЕ (конечным пользователем) является продавец, заполнить поля BIN и ID продавца. В противном случае BIN получателя и его рабочий ID. |
9 | Сформировать цифровой конверт и послать сообщение Me-AqCInitReq СА. |
Me-AqCInitReq | {RRPID, LID-EE, Chall-EE, RequestType, IDData, BrandID, Language, [Thumbs]} |
RRPID | ID пары запрос/отклик |
LID-EE | Локальный ID; формируется ЕЕ-системой или для нее |
Chall-EE | Обращение EE к СА по поводу пригодности подписи |
RequestType | Смотри табл. 4.6.2.24 |
IDData | См. табл. 4.6.2.23 |
BrandID | BrandID запрошенного сертификата |
Langauage | Желательный язык последующих текстов |
Thumbs | Список оттисков сертификатов, CRL и BrandCRLIdentifier, хранимых ЕЕ |
Формат поля IDData описан в таблице 4.6.2.23. Таблица 4.6.2.23. Формат IDData
IDData | <MerchantAcquirerID, AcquirerID> (только для продавца и получателя) |
MerchantAcquirerID | {MerchantBIN, MerchantBIN} |
AcquirerID | {AcquirerBIN, [AcquirerBusinessID]} |
MerchantBIN | Идентификационный номер банка для обработки транзакции продавца в его банке (Acquirer) |
MerchantID | Идентификатор продавца, присвоенный ему его банком (Acquirer) |
AcquirerBIN | Идентификационный номер банка для Acquirer (BIN получателя) |
AcquirerBusinessID | Рабочий идентификационный номер банка продавца |
Тип запроса | Только сертификат подписи | Только сертификат шифрования | Оба сертификата |
Начальный для продавца | 4 | 5 | 6 |
Начальный для расчетного центра | 7 | 8 | 9 |
Обновление для продавца | 13 | 14 | 15 |
Обновление для расчетного центра | 16 | 17 | 18 |
Шаг | Действие |
1 | Выделяеть Me-AqCInitReq из входного сообщения |
2 | Проверяеть, что RRPID из цифрового конверта сообщения совпадает с полученным в Me-AqCInitReq. Если это не так, формируется сообщение об ошибке с errorCode unknownRRPID. |
3 | Запоминается RRPID, LID-EE, Chall-EE, BrandID, Language, Thumbs и IDData |
Шаг | Действие |
1 | Сформировать сообщение Me-AqCInitResTBS:
|
2 | Подписать Me-AqCInitResTBS, установить тип содержимого SignedData равным id-set-content-Me-AqCInitResTBS. |
3 | Сформировать цифровой конверт и послать сообщение Me-AqCInitRes продавцу или расчетному центру. |
табл. 4.6.2.25) Таблица 4.6.2.25. Шаблон регистрационной формы MCA и PCA
Me-AqCInitRes | S(CA, Me-AqCInitResTBS) |
Me-AqCInitResTBS | {RRPID, LID-EE, Chall-EE, [LID-CA], Chall-CA, RequestType, RegFormOrReferral, [AcctDataField], [Thumbs]} |
RRPID | ID пары запрос/отклик |
LID-EE | Копируется из Me-AqCInitReq |
Chall-EE | Копируется из Me-AqCInitReq |
LID-CA | Локальный ID; генерируется СА системой или для нее |
Chall-CA | СА обращение по поводу пригодности сертификата запрашивающей стороны |
RequestType | Смотри табл. 4.6.2.24 |
RegFormOrReferral | Смотри табл. 4.6.2.21 |
AcctDataField | RegField; дополнительное поле регистрационной формы, которое следует отобразить, для того чтобы получить значение AcctData в CertReq |
CAEThumb | Оттиск сертификата ключевого обмена СА, который должен использоваться для шифрования CertReq |
BrandCRLIdentifier | Смотри раздел описания BrandCRLIdentifier ниже. |
Thumbs | Копируется из Me-AqCInitReq |
Шаг | Действие |
1 | Получить Me-AqCInitRes из входного сообщения. |
2 | Верифицировать подпись. Если она некорректна, послать сообщение об ошибке с ErrorCode равным signatureFailure. |
3 | Из Me-AqCInitResTBS извлекаются и запоминаются RRPID, LID-EE, Chall-EE, CAEThumb, BrandCRLIdentifier, оттиски и TequestType |
4 | Проверяется, что RRPID совпадает со значением, извлеченным из цифрового конверта сообщения и кодом, посланным в Me-AqCInitReq. Если равенства нет, посылается сообщение об ошибке с ErrorCode равным unknownRRPID. |
5 | Проверяется, что полученный Chall-EE соответствует посланному в Me-AqCInitReq. Если соответствие отсутствует, посылается сообщение об ошибке с ErrorCode равным challengeMisMatch. |
6 | Проверяется, что полученный список оттисков соответствует посланному в сообщении Me-AqCInitReq. Если соответствие отсутствует, посылается сообщение об ошибке с ErrorCode равным thumbsMisMatch. |
7 | Если в Me-AqCInitResTBS включено поле RegFormData то:
|
8 | После того как продавец или расчетный центр заполнили регистрационную форму и ввели AcctData, (если это требуется) генерируется CertReq. |
9 | Если в Me-AqCInitResTBS включено поле ReferrelData, то:
|
Владелец карты, системный администратор продавца или расчетного центра вводит информацию, необходимую для RegForm, а приложение SET (EE) посылает сообщение CertReq центру СА. После успешной верификации CertReq формируются сертификаты, которые посылаются ЕЕ в сообщениях CertRes. Если в регистрационной форме обнаружены ошибки, СА оповещает об этом в CertRes. Приложение SET может повторно представить исправленную регистрационную форму в новом CertReq. Владелец карты вводит ее номер, дату пригодности и другие данные, запрошенные ССА в регистрационной форме. Системный администратор продавца вводит аутентификационные данные расчетного центра и другую информацию, запрошенную МСА в регистрационной форме. Системный администратор расчетного центра вводит аутентификационные данные продавца (если таковые имеются) и другую информацию, запрошенную РСА в регистрационной форме. Запрос сертификата (CertReq) содержит в себе:
- Новые общедоступные ключи.
- Обновляемые сертификаты (если таковые есть).
- Заполненную регистрационную форму.
- Информацию об аккоунте ЕЕ
- Секретные ключи, которые должен использовать СА для шифрования отклика CertRes,
- Другие контрольные коды
EncX используется лишь при наличии AcctInfo. Если ЕЕ является владельцем карты, продавцом или расчетным центром и намерен послать AcctInfo, то CertReq формируется с привлечением методики EncX следующим образом.
Шаг | Действие |
1 | Если RequestType соответствует новому сертификату подписи или его обновлению, формируется пара ключей (общедоступный/секретный), необходимых для подписи сертификата |
2 | Если запрашивающим субъектом не является владелец карты и, если RequestType соответствует новому сертификату шифрования, формируется пара ключей (общедоступный/секретный), необходимых для сертификата шифрования. |
3 | Если ЕЕ является владельцем карты, генерируется 160-битовый случайный код - CardSecret. |
4 | Генерируется 160-битовый случайный код - EXNonce |
5 | Формируется CertReqTBS:
|
6 |
|
7 | Данные, подлежащие дополнительному шифрованию, имеют следующий формат. Если ЕЕ является продавец карты, заполняется PAN, CardExpiry, CardSecretCardNonce и EXNonce в PANData0. Если ЕЕ является продавец или расчетный центр, опционно заполняется AccTData и EXNonce. |
8 | Данные укладываются в конверт с использованием техники EncX: Включить: Обработка а. В качестве подписанных данных CertReqTBS То, как данные подписываются зависит от RequestType. Имеется как минимум одна и допускаются две подписи, т.е. SignerInfo для CertReq. Если тип запроса относится к новому сертификату подписи, подписать данные, используя секретный ключ, соответствующий общедоступному ключу, содержащемуcя в PublicKeyS. Если тип запроса относится к обновлению сертификата подписи, подписать данные, используя секретный ключ, соответствующий общедоступному ключу, содержащемуся в PublicKeyS и, используя секретный ключ, соответствующий обновляемому сертификату. Если тип запроса относится к сертификату шифрования, подписать данные, используя секретный ключ, соответствующий существующему сертификату подписи. Если данные подписаны секретным ключом, который не соответствует сертификату, установить SignerInfo.SerialNumber равным нулю, а SignerInfo.IssuerName=”Null-DN”, т.е. RDNSequence равна кодированному NULL. Тип содержимого SignedData устанавливается равным id-set-content-CertReqTBS. b. Результат шага 6 в качестве данных, подлежащих дополнительному шифрованию Провести дополнительное шифрование, используя СА-сертификат, указанный CAEThumb в CardCInitRes или RegFormRes, если один из них был включен, или Me-AqCInitRes c. CertReqTBEX в качестве данных, подлежащих шифрованию Зашифровать CertReqTBEX и установить тип содержимого EnvelopedData равным id-set-content-CertReqTBEX |
9 | Сформировать цифровой конверт и послать сообщение CertReq центру СА |
Если приложением ЕЕ является продавец или расчетный цент, который не имеет данных AcctData (в AcctInfo), чтобы их послать, тогда генерируется CertReq с привлечением техники Enc:
Шаг | Действие |
1 | Если RequestType соответствует обновлению сертификата подписи, формируется пара ключей (секретный/общедоступный) для сертификата подписи |
2 | Если RequestType соответствует новому или обновляемому сертификату шифрования, формируется пара ключей (секретный/общедоступный) для сертификата шифрования |
3 | Сгенерируется 160-битное случайное число - EXNonce |
4 | Данные CertReqData формируются следующим образом:
|
5 | Поместить данные в цифровой конверт, используя инкапсуляцию Enc: Включить: Обработка
Если тип запроса соответствует новому сертификату подписи, данные подписываются с применением секретного ключа, составляющего пару с общедоступным ключом, который содержится в PublicKeyS. Если тип запроса соответствует обновлению сертификата подписи, данные подписываются с применением секретного ключа, составляющего пару с общедоступным ключом, который содержится в PublicKeyS, а затем посредством секретного ключа, соответствующего обновляемому сертификату. Если тип запроса соответствует сертификату шифрования, данные подписываются с применением секретного ключа, составляющего пару с общедоступным ключом, который соответствует существующему сертификату подписи. Если данные подписаны ключом, который еще не соответствует сертификату, следует установить Signer.Info.SerialNumber равным “Null-DN”. Тип содержимого SignedData делается равным id-set-content-CertReqData. Производится DER-кодирование полученной информации SignedData с целью получения CertReqTBE.
|
6 | Подготовить цифровой конверт и послать CertReq центру СА |
Формат сообщения CertReq, генерируемого EE (End Entity) представлен ниже в таблице 4.6.2.26: Таблица 4.6.2.26. Формат CertReq
CertReq | <EncX(EE, CA, CertReqData, AcctInfo), Enc(EE, CA, CertReqData)> Допускается инкапсуляция с двумя подписями. CertReqTBE и AcctInfo могут быть подписаны любым или всеми секретными ключами, соответствующими следующим сертификатам ЕЕ:
|
CertReqData | {RRPID, LID-EE, Chall-EE3, [LID-CA], [Chall-CA], RequestType, RequestDate, [IDData], RegFormID, [RegForm], [CABackKeyData], publicKeySorE, [EEThumb], [Thumbs]} |
AcctInfo | <PANData0, AcctData> Если отправитель запроса - владелец карты, вводится PANData0. Если отправитель запроса - продавец или получатель, вводится AcctData |
RRPID | ID пары запрос/отклик |
LID-EE | Копируется из RegFormRes или Me-AqCInitRes |
Chall-EE3 | Обращение ЕЕ по поводу обновления подписи СА |
LID-CA | Копируется из RegFormRes или из Me-AqCInitRes |
Chall-CA | Копируется из RegFormRes или из Me-AqCInitRes |
RequestType | Смотри таблицу 4.6.2.24 |
RequestDate | Дата запроса сертификата |
IDData | См. табл. 4.6.2.23. Опускается, если ЕЕ является владельцем карты. |
RegFormID | Идентификатор, присвоенный СА |
RegForm | {RegFormItems +} Имена полей копируются из RegFormRes или из Me-AqCInitRes вместе со значениями, внесенными ЕЕ |
CABackKeyData | {CAAIgId, CAKey} |
publicKeySorE | {[ PublicKeyS], [PublicKeyE]} Общедоступный ключ объекта. Должен быть специфицирован, по крайней мере, один ключ. Пользователь может запросить сертификат подписи, сертификат шифрования или оба эти сертификата. |
EEThumb | Оттиск сертификата ключа шифрования, который обновляется |
Thumbs | Списки сертификатов, включая корневой, CRL и BrandCRLIdentifier, используемые в данный момент ЕЕ. |
PANData0 | См. табл. 4.6.2.27 |
AcctData | См. табл. 4.6.2.28 |
RegFormItems | {FieldName, FieldValue} |
CAAlgId | Идентификатор симметричного алгоритма шифрования |
CAKey | Секретный ключ, соответствующий идентификатору алгоритма |
PublicKeyS | Предлагаемый для сертификации общедоступный ключ подписи |
PublicKeyE | Предлагаемый для сертификации общедоступный ключ шифрования |
FieldName | Одно или более имен полей, которые надо отобразить в качестве заполняемой формы в системе отправителя запроса. Это текстовые поля с текстом на языке, специфицированном в RegFormReq или Me-AqCInitReq |
FieldValue | Величина, введенная ЕЕ |
Таблица 4.6.2.27. Формат PANData0
PANData0 | {PAN, CardExpiry, CardSecret, EXNonce} |
PAN | Первичный номер счета ( Primary Account Number) для данной карты |
CardExpiry | Дата пригодности карты |
CardSecret | Предложенная владельцем карты часть секретного ключа PANSecret. Эта величина используется для генерации TransStain. |
EXNonce | Новый код (Nonce) для предотвращения атак на PANData0 |
AcctData | {AcctIdentification, EXNonce} |
AcctIdentification | Для продавца это поле уникально и определяется платежной системой карты (Brand) и получателем (банк продавца) |
EXNonce | Новый код Nonce для предотвращения атак на PANData0 |
Шаг | Действие |
1 | Получить CertReq из входного сообщения
|
2 | Из данных CertReqTBS запомнить RRPID, LID-EE, Chall-EE3, RequestType, LID-CA, Chall-CA, IDData, RegForm, CaBackKeyData, список оттисков и новые сертификаты подписи и/или шифрования |
3 | Проверить то, что RRPID и RequestDate соответствуют значениям, полученным из цифрового конверта сообщения. Если соответствия нет, выдается сообщение Error с ErrorCode равным unknownRRPID. |
4 | Проверить то, что полученный Chall-CA соответствует посланному в Me-AqCInitRes или RegFormRes. Если соответствия нет, выдается сообщение Error с ErrorCode равным challengeMismatch. |
5 | Проверить PAN (если он включен) в соответствии с политикой платежной системы (Brand), в противном случае проверить AcctData. Если соответствия нет, возвращается CertRes c кодом CertStatusCode равным rejectByIssuer. |
6 | Если RequestType соответствует обновлению, проверить, что сертификаты, подлежащие обновлению, не были до этого обновлены. Если проверка не прошла, возвращается CertRes c кодом CertStatusCode равным rejectedByCA. |
7 | Проверить то, что RegFormID корректен с точки зрения языка, RequestType и BIN или PAN. Если проверка не прошла, возвращается CertRes c кодом CertStatusCode равным rejectByCA. |
8 | Если отправителем CertReq является владелец карты, запомнить алгоритм и ключ, включенные в CABackKeyData, для шифрования CertRes, посылаемого владельцу карты. |
9 | Проверить невидимые пункты формы регистрации. Если некоторые пункты необходимы, но заполнены некорректно, вернуть CertRes с CertStatusCode равным rejectedByIssuer. |
10 | Если все предшествующие проверки прошли успешно, проверить все позиции регистрационной формы, проверить также, что длина, формат и типы символов правильны. Проверить, что все необходимые поля имеются. Если обнаружены какие-то ошибки, вернуть номер позиции и текст сообщений, где обнаружены ошибки в последовательности FailedItems в CertRes с CertStatusCode равным regFormAnswerMalformed. |
Если верификация не прошла, СА подготавливает и отсылает сообщение CertRes c соответствующим статусом. Если обнаружены ошибки в CertReq, СА отметит эти ошибки в CertRes и приложение ЕЕ должно будет послать повторно CertReq. При полном успехе система перейдет к аутентификации в финансовом учреждении. Здесь, прежде чем формировать сертификат, проверяется запрос CertReq. Методика этой проверки зависит от типа платежной системы (Brand) и находится за пределами спецификации SET. В зависимости от результатов проверки CertReq, CertRes будет содержать сертификат или статусный код (при неуспехе). Сообщение CertRes будет подписано и в зависимости от характера данных, уложенных в него, зашифровано. Если CertRes уведомляет владельца карты об успехе, то сообщение шифруется с использованием обычного симметричного алгоритма, поддерживаемого приложениями СА и владельца карты. Если сообщение CertRes предназначено для продавца или расчетного центра или возвращает владельцу карты статусные данные, то оно подписывается, но не шифруется. Если CertReq аутентичен и корректен, а СА сформировал сертификат, используя представленный ключ, то будет возвращен CertRes с завершенным статусом. Если CertRes предназначен для владельца карты и содержит ключ (в CaBackKeyData) для шифрования CertRes, СA сформирует CertRes как SignedData. Осуществляется это следующим образом.
Шаг | Действие |
1 | CertResData формируется как:
|
2 | Подписать и вложить данные в цифровой конверт, используя технику EncK-инкапсуляции, для CertResData в качестве данных, подлежащих подписке.
|
3 | Сформировать цифровой конверт и послать EE CertRes. |
Подписанное сообщение CertRes формируется следующим образом:
Шаг | Действие |
1 | Если СА сгенерировал сертификат, который будет включен в CertRes, выполняется формирование CertResTBS. |
2 | Если СА не сгенерировал сертификат, т.е. имеет статус, отличный от “Request Complete”, создается CertResData:
|
3 | Сформировать цифровой конверт и послать конечному пользователю (ЕЕ) CertRes |
CertRes | <S(CA, CertResData), EncK(CABackKeyData, CA, CertResData)> EncK-версия этого сообщения необходима только в случае, когда в CertRes включен опционный компонент CAMsg. Эта версия используется, если в CertReq включено поле CABackKeyData |
CertResData | {RRPID, LID-EE, Chall-EE3, LID-CA, CertStatus, [CertThumbs], [BrandCRLIdentifier], [Thumbs]} |
CABackKeyData | Копируется из CertReq |
RRPID | ID пары запрос/отклик |
LID-EE | Копируется из CertReq |
Chall-EE3 | Копируется из CertReq. Источник запроса проверяет соответствие со значением, хранящимся в памяти. |
LID-CA | Копируется из CertReq. Если в CertReq его нет, то присваивается новое значение. |
CertStatus | {CertStatusCode, [Nonce-CCA], EEMessage], {CaMsg], [FailedItemSeq]} |
CertThumbs | Если запрос обслужен, то это список оттисков вложенных сертификатов подписей и/или шифрования |
BrandCRLIdentifier | Смотри раздел об идентификаторах списков отмененных сертификатов платежной системы. |
Thumbs | Копируется из CertReq. |
CertStatusCode | Нумерованный код, указывающий на статус запроса сертификата |
Nonce-CCA | Присутствует, если в качестве ЕЕ выступает владелец карты. Этот код представляет собой дополнительный секретный ключ, используемый совместно владельцем карты и ССА. |
EEMessage | Сообщение на естественном языке, предназначенное для отображения в системе ЕЕ |
CAMsg | {[CardLogoURL], [BrandLogoURL], [CardCurrency], [CardholderMsg]} |
FailedItemSeq | {FailedItem+} |
CardLogoURL | URL - указатель на логотип эмитента карты |
BrandLogoURL | URL - указатель на логотип платежной системы |
CardCurrancy | Вид валюта, хранящейся на счете владельца карты |
CardholderMsg | Сообщение на естественном языке владельца карты, которое должно быть отображенопрограммой |
FailedItem | {ItemNumber, ItemReason} |
ItemNumber | Указывает на позицию в списке полей регистрационной формы, интерпретация которой невозможна. Значение нуль указывает на поле AcctData |
ItemReason | Причина неудачи. Текстовое поле на естественном языке. |
Таблица 4.6.2.30. Статусные коды для запросов сертификата
Код | Значение | Источник |
requestComplete | Запрос сертификата одобрен | CA |
invalidLanguage | В запросе указан неверный язык | CA |
invalidBIN | Запрос сертификата отклонен из-за некорректного BIN | Эмитент или получатель |
sigValidationFail | Запрос сертификата отклонен по причине некорректной подписи | CA |
decryptionError | Запрос сертификата отклонен из-за ошибки дешифрования | CA |
requestInProgress | Запрос сертификата обрабатывается | СА, эмитент или получатель |
rejectedByIssuer | Запрос сертификата отклонен эмитентом карты | Эмитент |
requestPended | Запрос сертификата ждет обработки | СА, эмитент или получатель |
rejectedByAquirer | Запрос сертификата отклонен банком продавца (получателем) | Получатель |
regFormAnswerMalformed | Запрос сертификата отклонен из-за неверной позиции в регистрационной форме. | CA |
rejectedByCA | Запрос сертификата отклонен центром сертификации | CA |
unableToEncryptCertRes | Центр сертификации не получил ключа и по этой причине не может зашифровать отклик для владельца карты | CA |
Шаг | Действие |
1 | Выделить CertRes из входного сообщения. Если CertRes содержит подписанные данные, дешифровать их и проверить подпись CertRes (см. описание методики EncK). Процедура осуществляется для полученных сертификатов CRL и BrandCRLIdentifier. |
2 | Проверить, что полученные оттиски соответствуют посланным в сообщении CardCInitReq. Если проверка не прошла, возвращается сообщение Error с ErrorCode равным thumbsMismatch. |
3 | Проверить, что LID-EE и Chall-EE соответствуют значениям, посланным в CertReq. Если проверка не прошла, возвращается сообщение Error с ErrorCode равным challengeMismatch. |
4 | Если CertStatusCode указывает “Certificate request complete” (с запросом сертификата все в порядке), то:
|
5 | Если CertStatusCode равен “MalFormed Registration Form Items”, это означает, что некоторые позиции регистрационной формы заполнены неверно. Для каждой ошибочной позиции приложение ЕЕ занесет в CertRes номер этой позиции и соответствующее сообщение об ошибке. ЕЕ разрешается повторить ввод для полей с ошибкой и повторно послать CertReq с новым запросом сертификата. |
6 | Если CertStatusCode установлен равным requestinProgress или requestPended, сертификат может быть доставлен позднее с помощью процедуры CertInqReq |
7 | Если CertStatusCode указывает какой-либо иной статус, отображается EEMessage. |
Информационные сертификатные запросы и обработка статуса Если сертификат не возвращен немедленно в CertRes, EE может попросить прислать ему информацию о состоянии его запроса путем присылки CertReq в центр СА. Запрос CertInqRes возвращает сертификат, если он готов, или предоставляет информацию о том, когда сертификат будет прислан. Такие запросы могут посылать владелец карты, продавец или расчетный центр. Адресуются эти запросы CA, CCA, MCA или PCA (источникам сертификатов). Если CertStatusCode из CertRes равен “Certificate Request in Progress” или “Certificate Request Pending”. EE формирует CertInqReq для получения сертификата следующим образом:
Шаг | Действие |
1 | Копируется LID-CA3 из CertRes в поле данных “CertInqReqTBS” |
2 | Генерируется новый RRPID |
3 | Генерируется новый LID-EE |
4 | Генерируется новый Chall-EE3 |
5 | Копируется LID-CA из предыдущего CertRes |
6 | Подписывается CertInqReqTBS. Устанавливается тип содержимого равным id-set-content-CertInqReqTBS. CertInqReq подписывается также как и CertReq. |
7 | Формируется цифровой конверт и посылается CertInqReq в центр СА. |
CertInqReq | S(EE, CertInqReqTBS) |
CertInqReqTBS | {RRPID, LID-EE, Chall-EE3, LID-CA} |
RRPID | Идентификатор пары запрос/отклик |
LID-EE | Копируется из CertRes |
Chall-EE3 | Требование ЕЕ по поводу обновления подписи СА |
LID-CA | Копируется из CertRes |
Шаг | Действие |
1 | Из входного сообщения извлекается CertInqReq. Подпись CertInqReqTBS верифицируется также как и для CertReq. Если проверка не прошла отклик будет таким как при CertReq(EncX) |
2 | Проверить, что RRPID соответствует посланному в цифровом конверте. Если соответствия нет, возвращается сообщение об ошибке с ErrorCode равным unknownRRPID. |
3 | Используя LID-CA в качестве индекса, определяется статус CertReq. |
4 | Если сертификат сформирован, он посылается ЕЕ в отклике CertInqRes, в противном случае в CertInqRes возвращается актуализованный код CertStatusCode |
Этот отклик имеет ту же структуру и формат, что и CertRes. Обработка CertInqRes происходит аналогично. Реальный формат сертификатов определяется документом Х.509. Характеристики различных полей такого сертификата представлены в таблице 4.6.2.32. Таблица 4.6.2.32. Поля формата сертификата Х.509
Имя | Ограничения на формат и значения | Описание |
Version (Версия) | Целое | Указывает на версию сертификата |
SerialNumber | Целое | Уникальный порядковый номер, приписываемый СА, сформировавшим сертификат |
Signature.AlgorithmIdentifier | OID и тип | Определяет алгоритм, используемый для генерации подписи сертификата |
Issuer (эмитент) | Имя | Содержит уникальное имя (Distinguished Name) CA, выдавшего сертификат |
Validity.notBefore | Время UTC | Специфицирует время, когда сертификат становится активным |
Validity.notAfter | Время UTC | Специфицирует время, когда сертификат перестает действовать. Если это относится к сертификату владельца карты, то его время действия не может быть дольше пригодности карты. |
Subject | Имя | Содержит уникальное имя объекта владельца ключа |
SubjectPublicKeyInfo.algorithm. AlgorithmIdentifier | OID и тип | Специфицирует алгоритм, который может использоваться с этим ключом. |
SubjectPublicKeyInfo. subjectPublicKey | Строка битов | Содержит общедоступный ключ, представленный в запросе сертификата |
IssuerUniqueID | В SET не используется | |
SubjectUniqueID | В SET не используется | |
Extensions.extnId | Формат OID | Содержит расширение OID, как это определено Х.509 или SET |
Extensions.critical | Булево: 0=ложно 1=истинно | Каждое описание расширения определяет то, какое значение должно принимать это поле |
Extensions.extnValue | Информация расширения |
- countryName [2 5 4 6]
- organizationName [2 5 4 10]
- organizationUnitName [2 5 4 11]
- commonName [2 5 4 3]
id-at-organizationNameOBJECT IDENTIFIER ::= { id-at 10 }
id-at-organizationalUnitNameOBJECT IDENTIFIER ::= { id-at 11 }
id-at- commonNameOBJECT IDENTIFIER ::= { id-at 3 } Владелец карты
countryName=<Страна, где размещается финансовое учреждение, выпустившее карту>
organizationName=<BrandID> (идентификатор платежной системы)
organizationalUnitName=<Название финансового учреждения, выпустившее карту>
organizationalUnitName=<Опционно - название карты>
commonName=<Уникальный идентификатор владельца карты>
Если в перечне появляется два атрибута organizationalUnitName, первый из них представляет название финансового учреждения, выпустившее карту. Продавец
countryName=< Страна, где размещается банк продавца - Acquirer>
organizationName=<BrandID>
organizationalUnitName=<Название банка продавца>
commonName=<Имя продавца, как написано в заявлении владельца карты>
Расчетный центр
countryName=<Страна, где размещается банк продавца - Acquirer>
organizationName=<BrandID>
organizationalUnitName=<Название банка продавца>
commonName=<Уникальный идентификатор расчетного центра>
Центр сертификации владельца карты
countryName=<Страна, где размещается финансовое учреждение, выпустившее карту>
organizationName=<BrandID>
organizationalUnitName=<Описательное имя>
commonName=<Опционный уникальный идентификатор>
Центр сертификации продавца
countryName=<Страна, где размещается банк продавца - Acquirer >
organizationName=<BrandID>
organizationalUnitName=<Описательное имя>
commonName=<Опционный уникальный идентификатор>
Центр сертификации расчетного центра
countryName=<Страна, где размещается банк продавца - Acquirer >
organizationName=<BrandID>
organizationalUnitName=<Описательное имя>
commonName=<Опционный уникальный идентификатор>
Геополитический центр сертификации
countryName=<Страна геополитической организации>
organizationName=<BrandID>
organizationalUnitName=<Описательное имя>
commonName=<Опционный уникальный идентификатор>
Центр сертификации платежной системы (Brand)
countryName=<Страна, где размещен центр сертификации платежной системы>
organizationName=<BrandID>
organizationalUnitName=<Описательное имя>
commonName=<Опционный уникальный идентификатор>
Корневой центр сертификации
countryName=<Страна, где размещен корневой центр сертификации - СА>
organizationName=<Корневой центр SET>
commonName=<Опционный - уникальный ID>
Поля имен в имени субъекта сертификата определены в таблице ниже:
Country | 2 символа кода страны (ISO 3166) |
BrandID | <Brand Name>:<Product>, где название продукта является опционным. |
Brand Name | Платежная система карты, которая определяется разработчиками платежной системы. |
Product Type | Опционное поле, которое определяет тип продукта в рамках заданной платежной системы. |
Описательное имя | Это описательное имя объекта, ответственного за выпуск сертификата в рамках данного СА. Например:
|
Официальное название карты | Это опционное поле содержит официальное название карты. Примерами могут служить, например: Frequent Flayer Program, Affinity Program и т.д. |
Название финансовой организации | Имя финансовой организации, выпускающей расчетные карты |
Уникальный идентификатор владельца карты | Уникальным идентификатором владельца карты в сертификате владельца является хэшированный номер его счета. |
Уникальный идентификатор расчетного центра | Поле содержит BIN, за которым следует серийные номера банка продавца или расчетной системы. Поле форматировано как <BIN:SerialNumber>. Серийный номер позволяет однозначно идентифицировать каждый расчетный центр, ассоциированный с одним и тем же банком продавца (Acquirer). В пределах расчетной системы (Brand) может быть несколько сертификатов для одного BIN. |
PAN маскируется с использованием общего секретного ключа (PANSecret), который состоит из комбинации CardSecret владельца карты и Nonce-CCA сертификационного центра. Вычисление хэша производится с привлечением алгоритма HMAC-SHA1 (RFC-2105). Функция HMAC-SHA1 определяется в терминах ключа K и текста, который кэшируется следующим образом: Hash(KЕ opad|hash((KЕipad)|text)), где Е - оператор исключающее ИЛИ, а оператор | - обозначает объединение кодов. K, text, ipad и opad определяются в SET следующим образом:
K | Равно PANSecret и представляет собой 20-байтовую строку, полученную в результате операции исключающее ИЛИ, выполненной над DER-кодированными значениями CardSecret и Nonce-CCA. |
Text | Представляет собой DER-кодированную копию исходного текста, содержащего PAN и CardExpiry.Text ::= SEQUENCE {pan PAN cardExpiry CardExpiry } PAN ::= NumberString (SIZE(1..19)) CardExpiry ::= NumericString (SIZE(6)) --YYYMM Время истечения действия карты |
ipad | 64 байта, содержащих код 0x36 |
opad | 64 байта, содержащих код 0x5C |
Объект | Цифровая подпись | Шифрование_ключей/ шифрование_данных | ПодписьkeyCert | ПодписьCRL |
Владелец карты | Х | |||
Продавец | Х | Х | ||
Расчетный центр | Х | Х | ||
Центр сертификации владельца карты | Х | Х | Х | |
Центр сертификации продавца | Х | Х | Х | |
Центр сертификации расчетного центра | Х | Х | Х | Х |
Геополитический центр сертификации | Х | Х | Х | |
Центр сертификации платежной системы | Х | Х | ||
Корневой центр сертификации | Х | Х |
- привилегии keyCertSign и offLineCRLSign или
- keyEncipherment и dataEncipherment
Обязательные расширения сертификата ЕЕ.
Сертификат владельца карты | Сертификат продавца | Сертификат расчетного центра | |||
Расширение Х.509 | Подпись | Подпись | Шифрова-ние ключа | Подпись | Шифрова-ние ключа |
AuthorityKeyIdentifier | Х | Х | Х | Х | Х |
KeyUsage | Х | Х | Х | Х | Х |
PrivateKeyUsagePeriod | Х | Х | Х | ||
CertificatePolicies | Х | Х | Х | Х | Х |
SubjectAltName | O | O | O | O | O |
BasicConstraints | Х | Х | Х | Х | Х |
IssuerAltName | O | O | O | O | O |
Частное расширение | |||||
HashedRootKey | |||||
CertificateType | Х | Х | Х | Х | Х |
MerchantData | Х | Х | |||
CardCertRequired | Х | ||||
Tunneling | Х | ||||
SETExtensions | Х |
O - опционный Таблица 4.6.2.35. Обязательные расширения сертификатов СА
СА | Корневой центр сертификации | ||||
Расширение Х.509 | Цифровая подпись | Подпись серти-фиката | Шифрова-ние ключа | Подпись CRL | Подпись сертификата & CRL |
AuthorityKeyIdentifier | Х | Х | Х | Х | Х |
KeyUsage | Х | Х | Х | Х | Х |
PrivateKeyUsagePeriod | Х | Х | Х | ||
CertificatePolicies | Х | Х | Х | Х | Х |
SubjectAltName | O | O | O | O | O |
BasicConstraints | Х | Х | Х | Х | Х |
IssuerAltName | O | O | O | O | O |
Частное расширение | |||||
HashedRootKey | Х | ||||
CertificateType | Х | Х | Х | Х | Х |
MerchantData | |||||
CardCertRequired | |||||
Tunneling | Х | ||||
SETExtensions |
- Номер CRL. Номера монотонно возрастают.
- Список серийных номеров устаревших сертификатов.
- Даты, когда конкретные сертификаты были признаны устаревшими.
- Даты, когда был сформирован CRL и когда завершается срок его действия (замещается новым CRL).
- Уникальное имя СА, который поддерживает данный CRL.
- Эмитент и серийный номер сертификата СА, который используется для подписи данного CRL.
Формат полей CRL и ограничения для их значений
Имя поля | Формат и ограничения на значение | Описание |
CRL.version (версия) | Целое; V2 | Определяет версию CRL. В настоящее время =2. |
CRL.signature .algorithmIdentifier | OID и тип | Определяет алгоритм, использованный для подписи CRL |
CRL.Issuer | Имя | Содержит DN субъекта для СА, который выпустил устаревший сертификат. Должен совпадать с именем субъекта в сертификате СА |
CRL.thisUpdate | Время UTC | Определяет время, когда был сформирован CRL |
CRL.nextUpdate | Время UTC | Определяет время, когда CRL устареет |
CRL.revokedCertificate .certSerialNumber | Целое | Номер по порядку устаревшего сертификата |
CRL. RevokedCertificate .revocationDate | Время UTC | Дата признания сертификата устаревшим |
CRL. RevokedCertificate .extensions | Расширения | Не используется в SET |
CRL.extensions | Расширения | В этом поле используются два расширения: CRLNumber и AuthorityKeyIdentifier |
- корневой СА - для поддержки незапланированной замены корневых сертификатов или сертификатов СА платежных систем.
- СА платежных систем - для поддержки незапланированной замены или прекращения действия сертификата, выданного центром сертификации платежной системы.
- геополитические СА - для поддержки незапланированной замены сертификатов CCA, MCA или PCA.
- CA расчетного центра - для поддержки незапланированной замены сертификатов ключевого обмена расчетного центра.
- Используется AuthorityKeyIdentifier расширения CRL для контроля корректности сертификата подписи.
- Расширение KeyUsage в сертификате подписи указывает на CRLsign(6)
3. IssuerDN и устаревший certSerialNumber сравниваются с проверяемым сертификатом Следующие проверки производятся для того, чтобы выяснить, не входит ли данный сертификат в список CRL:
- IssuerDN рассматриваемого сертификата должен соответствовать содержимому поля IssuerDN CRL
- certSerialNumber должно соответствовать значению поля revokedCertificates.certSerialNumber списка CRL.
BrandCRLIdentifier содержит в себе следующую информацию:
- Номер BCI (увеличивается для каждого нового BCI)
- Название платежной системы
- Время пригодности BCI
- Список номеров CRL (из расширения номера CRL)
- Эмитент и серийный номер сертификата СА платежной системы, который используется для подписи BCI (включается в расширение)
Сертификат для: | Формируется и подписывается: |
СА платежной системы | Корневой СА |
Геополитический СА | СА платежной системы |
ССА, МСА или РСА | Геополитический СА, если таковой имеется, в противном случае СА платежной системы |
ССА, МСА или РСА | Геополитический центр сертификации или СА платежной системы | ||||
Атрибут SET | Сертификат подписи | Подпись CRL | Сертификат и подпись CRL | ||
KeyUsage | X | X | X | X | X |
PrivateKeyUsagePeriod | X | X | X | X | |
AdditionalPolicy | O | O | O | O | O |
SubjectAltName | O | O | O | O | O |
CertificateType | X | X | X | X | X |
Tunneling | X |
O - опционный При получении CertificationRequest СА должен проверить запрос и сформировать отклик в соответствии со следующей процедурой:
Шаг | Действие |
1 | Используя процедуру, определенную платежной системой, проверить аутентичность CertificationRequest |
2 | Используя общедоступный ключ, присланный в запросе, проверить подпись |
3 | Проверить, что уникальное имя субъекта (Distinguished Name) согласуется с форматом Certificate Subject Name |
4 | Используя тип сертификата и атрибуты использования ключа, проверить, что имеются необходимые атрибуты (см. таблицу 4.6.2.37) |
5 | Для сертификатов подписи проверить, что запрошенный PrivateKeyUsagePeriod находится в пределах допустимого диапазона пригодности по времени для подписывающего СА, и что дата notBefore в запрошенном PrivateKeyUsagePeriod находится в пределах допустимого для подписывающего СА. |
6 | Если какая-либо из вышеперечисленных проверок не прошла, сертификат не будет сформирован. |
7 | Если верификация прошла успешно, сертификат формируется с применением атрибутов, включенных в запрос. Сформированный сертификат помещается в соответствующую секцию SignedData. |
8 | SignedData помещается в цифровой конверт и посылается отправителю запроса. Транспортные механизмы находятся вне зоны ответственности SET. |
Рассылка CRL CRL представляет собой механизм, определенный Х.509, и предназначенный для публикации и рассылки списков выведенных из употребления сертификатов, срок действия которых еще не истек. Когда корневой СА актуализует свой CRL, он посылает его каждому центру сертификации платежной системы. Когда нижерасположенный центр сертификации актуализует свой CRL, он рассылает его своим СА платежных систем. CRL рассылаются в секции SignedData сообщений CRLNotification согласно следующему алгоритму.
Шаг | Действие |
1 | Сформировать CRLNotificationTBS:
|
2 | Подписать содержимое, используя сертификат подписи СА. Установить тип содержимого равным id-set-content-CRLNotificationTBS |
3 | Внести новый CRL в CRL-секцию SignedData. Вложить CRL в сертификационную секцию сообщения. |
4 | Закодировать и вложить в цифровой конверт подписанное сообщение CRLNotification. Следует заметить, что это не SET-сообщение. SignedData подвергается DER-кодированию и вкладывается в цифровой конверт MIME. |
Название поля | Описание |
CRL-Notification | S(CA, CRLNotificationTBS) |
CRL-NotificationTBS | {Date, CRLThumbprint} |
Дата | Дата, когда сформировано сообщение |
CRLThumbprint | Оттиск CRL, заключенный в CRL-секцию SignedData |
Шаг | Действие |
1 | Если дата раньше, чем для любого предыдущего CRL, полученного от этого СА, сообщение проигнорировать и откликнуться отправившему СА сообщением Error c кодом ошибки badDate. |
2 | Если CRL-оттиск не согласуется с тем, который записан в CRL-секции SignedData, сообщение проигнорировать и откликнуться отправившему СА сообщением Error c кодом thumbMismatch. |
3 | Запомнить модифицированный CRL и послать СА платежной системы для добавления в последующее сообщение рассылки BCI. |
Шаг | Действие |
1 | Заполнить NotificationResTBS:
|
2 | Подписать содержимое, используя сертификат подписи центра сертификации платежной системы. Установить contenttype равным id-set-content-CRLNotificationResTBS |
3 | Закодировать и вложить в цифровой конверт подписанное сообщение CRLNotificationRes в форме согласованной с транспортным механизмом. Послать сообщение отклика CRLNotification запросившему СА. |
Сообщение- отклик CRLNotification содержит следующие поля.
Название поля | Описание |
CRL-NotificationRes | S(CA, CRLNotificationTBS) |
CRL-NotificationResTBS | {Date, CRLThumbprint} |
Дата | Копируется из сообщения CRLNotification |
CRLThumbprint | Оттиск CRL, копируется из сообщения CRLNotification |
Шаг | Действие |
1 | Заполнить BCIDistributionTBS:
|
2 | Подписать содержимое, используя сертификат подписи центра сертификации платежной системы. Установить contenttype равным id-set-content-BCIDistributionTBS. В CRL секцию SignedData ввести все CRL, перечисленные в BCI. В сертификатную часть вставить все сертификаты, необходимые для верификации всех CRL. |
3 | Закодировать и вложить в цифровой конверт подписанное сообщение BCIDistribution в форме, согласованной с транспортным механизмом. |
Название поля | Описание |
BCIDistribution | S(CA, BCIDistributionTBS) |
BCIDistributionResTBS | {Date, BCIDistribution} |
Дата | Дата формирования сообщения |
BrandCRLIdentifier | Список текущих CRL для всех СА в зоне ответственности центра сертификации платежной системы и корневого СА. Сообщение подписывается сертификационным центром платежной системы. |
Обработка пришедшего сообщения BCIDistribution соответствующим СА производится согласно алгоритму, приведенному ниже:
Шаг | Действие |
1 | Извлечь BCIDistribution из транспортного сообщения. Проверить подпись сообщения, используя сертификат подписи СА платежной системы. |
2 | Если дата относится к моменту времени раньше, чем та, что в предыдущем сообщении BCIDistribution, сообщение следует выбросить. |
3 | Если BrandCRLIdentifier отличается от текущего, проверить подпись каждого CRL из BCI. Если подпись некорректна или список CRL из перечня BCI не включен в сообщение, оно отбрасывается. |
4 | Запомнить все CRL и BrandCRLIdentifier для последующей рассылки |
TransID | {LID-C, [LID-M], XID, PReqData, [PaySysID], Language} |
LID-C | Локальный ID. Метка, генерируемая системой владельца карты или для нее. |
LID-M | Локальный ID. Метка, генерируемая системой продавца или для нее. |
XID | Глобально уникальный идентификатор |
PReqData | Дата запроса покупки. Генерируется продавцом в PInitRes или владельцем карты в PReq. |
PaySysID | Используется некоторыми платежными системами для пометки транзакций |
Language | Естественный язык владельца карты |
XID представляет собой псевдослучайный 20 байтовый код, который должен быть уникальным. В таблице 4.6.2.38 рассмотрено, когда формируется и используется поле TransID в сообщениях SET. Таблица 4.6.2.38. Условия формирования и использование поля TransID
Сообщение | LID-C | LID-M | XID | PaySysID |
PInitReq | R | C1 | N/P | N/P |
PInitRes | Я | Я (C2) | R | N/P |
PReq | Я | Я | Я (R3) | N/P |
PRes | Я | Я (C2) | Я | C4 |
InqReq | Я | Я | Я | C5 |
InqRes | Я | Я | Я | C4 |
AuthReq | Я | Я | Я | N/P |
AuthRes | Я | Я | Я | C6 |
AuthRevReq | Я | Я | Я | C |
AuthRevRes | Я | Я | Я | Я |
CapReq | I | I | I | I |
CapRes | I | I | I | I |
CapRevReq | I | I | I | I |
CapRevRes | I | I | I | I |
CredReq | I | I | I | I |
CredRes | I | I | I | I |
CredRevReq | I | I | I | I |
CredRevRes | I | I | I | I |
PCertReq | N/P | C | N/P | N/P |
PCertRes | N/P | Я | N/P | N/P |
BatchAdminReq | I | I | I | I |
BatchAdminRes | I | I | I | I |
CardCInitReq | R | N/P | N/P | N/P |
CardCInitRes | Я | N/P | N/P | N/P |
Me-AdCInitReq | N/P | C | N/P | N/P |
Me-AdCInitRes | N/P | Я | N/P | N/P |
RegFormReq | Я | Я | N/P | N/P |
RegFormRes | Я | Я | N/P | N/P |
CertReq | Я | Я | N/P | N/P |
CertRes | Я | Я | N/P | N/P |
CertInqReq | Я | Я | N/P | N/P |
CertInqRes | Я | Я | N/P | N/P |
R | Поле является обязательным, генерируется отправителем сообщения и копируется в цифровой конверт. |
C | Наличие поля является условным. Оно может быть сформировано для этого сообщения и задублировано в цифровом конверте. В противном случае поле копируется из предыдущего сообщения. |
N/P | (Not Present) Отсутствует как в сообщении так и в цифровом конверте. |
Я | Копируется из запроса или предыдущего сообщения, дублируется в цифровом конверте |
I | Может присутствовать в элементе информационной структуры сообщения, отсутствует в цифровом конверте. |
- Копируется из процесса инициализации SET (если имеется)
- Если для данной транзакции нет предшествующего LID-M, продавец может сформировать его для данного сообщения.
- Если пара PinitReq/PinitRes отсутствует, то генерируется владельцем карты.
- Если послано после получения AuthRes с PaySysID
- Если послано после получения PRes с PaySysID
- Может быть сформировано расчетным центром для данного сообщения.
Шаг | Действие |
1 | Если сообщение для данной транзакции получено раньше, следует запомнить все его поля. |
2 | Если это новая транзакция, сформировать все необходимые поля (см таблицу выше) |
3 | Заполнить любые опционные поля, которые могут быть сформированы данным объектом. |
Она используется для передачи информации, необходимой для авторизации операции платежа владельца карты расчетному центру. Данная операция служит для инициализации транзакции с привлечением традиционной платежной карты. Данные шифруются владельцем карты и посылаются через продавца получателю (банку продавца - Acquirer). Эта информация не может быть прочитана продавцом. Имеется три разновидности PI. Первые два формируются владельцем карты, третье - расчетным центром.
PIUnsigned | Формируется владельцем карты без использования сертификата подписи. Используется в сообщениях PReqUnsigned.Целостность данных обеспечивается за счет добавления хэша PI-данных, которые защищены в блоке OAEP. В данном механизме аутентификация отправителя не производится. |
PIDualSigned | Формируется владельцем карты, который владеет сертификатом подписи. Используется в сообщениях PreqDualSigned. Подпись владельца карты аутентифицирует отправителя и гарантирует целостность данных. |
AuthToken | Формируется расчетным центром. Продавец извлекает PI для дальнейшего вложения в AuthReq. Этот вариант используется для поддержки доставки по частям и передается назад из расчетного центра после первичной авторизации с тем, чтобы использоваться для запросов последующих авторизаций. |
PI | <PIUnsigned, PIDualSigned, AuthToken> Владелец карты создает PIUnsigned или PIDualSigned инструкцию. Расчетный центр формирует AuthToken для поддержки поставки по частям и последовательных платежей. Продавец запишет PI для последующего вложения в AuthReq. |
PIUnsigned | EXH(P, PI-OILink, PANToken)} (См. табл. 4.6.2.46) |
PIDualSigned | {PISignature, EX(P, PI-OILink, PANData)} (См. табл. 4.6.2.45) |
AuthToken | См. табл. 4.6.2.42 |
PI-OILink | L(PIHead, OIData) (см. табл. 4.6.2.40) |
PISignature | SO(C, PI-TBS) |
PI-TBS | {HPIData, HOIData} |
HPIData | DD(PIData) |
HOIData | DD(OIData) |
PIData | {PIHead, PANData} (см. табл. 4.6.2.40 и 4.6.2.45) |
Структура PIHead
PIHead | {TransIDs, Inputs, MerchantID, [InstallRecurData], TransStain, SWIdent, [AcqBackKeyData], [PIExtensions]} |
TransIDs | См. выше описание TransIDs |
Inputs | {HOD, PurchAmt} |
MerchantID | Копируется из сертификата подписи продавца |
InstallRecurData | См. табл. 4.6.2.41 |
TransStain | HMAC(XID, CardSecret) |
SWIdent | Строка, идентифицирующая программное обеспечение (разработчик и версия), инициирующее запрос. Оно специфицируется в PI, чтобы расчетный центр знал программное обеспечение владельца карты. |
AcqBackKeyData | {AcqBackAlg, AcqBackKey} |
PIExtensions | Данные из расширения платежных инструкций должны быть финансовыми и важными для обработки авторизации расчетного центра, эмитента или финансовой сети |
InstallRecurData | {InstallRecurDInd, [IRExtensions]} |
InstallRecurDInd | < InstallTotalTrans, Recurring > |
IRExtensions | Данные в расширении или рекурсивные данные. Они должны носить финансовый характер и должны иметь отношение к последующим процедурам авторизации продавца и расчетного центра |
InstallTotalTrans | Владелец карты специфицирует максимально допустимое число авторизаций для последовательных платежей |
Recurring | {RecurringFrequency, RecurringExpiry} |
RecurringFrequency | Минимальное число дней между авторизациями (ежемесячная авторизация обозначается 28 днями) |
RecurringExpiry | Окончательная дата, после которой никакие авторизации не разрешены |
Данные, содержащиеся там должны быть доступны только расчетному центру. Структура данных AuthToken представлена в таблице 4.6.2.42. Таблица 4.6.2.42. Структура AuthToken
AuthTokenData | {TransIDs, PurchAmt, MerchantID, [AcqBackKeyData], [InstallRecurData], [RecurringCount], PrevAuthDataTime, TotalAuthAmount, AuthTokenOpaque} |
PANToken | Поля копируются из поля PI-Head, сформированного владельцем карты (см. табл. 4.6.2.40) |
TransIDs | |
PurchAmt | |
MerchantID | |
AcqBackKeyData | |
InstallRecurData | |
RecurringCount | Число реализованных рекуррентных авторизаций |
PrevAuthDateTime | Дата и время последней авторизации продавца в последовательности рекуррентных авторизаций |
TotalAuthAmount | Полное число авторизованных в результате всех авторизаций для данного XID |
AuthTokenOpaque | Невидимые данные, генерируемые расчетным центром |
Шаг | Действие |
1 | Генерируется AuthTokenTBE как: Если это первая авторизация (выполнена согласно PI) а. Заполняется из PI поля PANToken, TransIDs, PurchAmt, MerchantID и, если имеется в PI, AcqBackInfo и InstallRecurData б. RecurringCount делается равным 1 в. В PrevAuthDateTime записывается текущая дата г. В TotalAuthAmount заносится AuthAmt из авторизационного отклика, который содержит данный AuthTokenЕсли это очередная аутентификация (сгенерирована из предыдущего AuthToken) а. Заполняется из предыдущего AuthToken поля PANToken, TransIDs, PurchAmt, MerchantID и, если имеется, AcqBackInfo и InstallRecurData б. Инкрементируется на 1 RecurringCount в. В PrevAuthDateTime записывается текущая дата г. TotalAuthAmount увеличивается на AuthAmt, взятое из авторизационного отклика, который содержит данный AuthTokenЕсли это полная (reversal) аутентификация (сгенерирована из предыдущего AuthToken) а. Из предыдущего AuthToken заполняются поля PANToken, TransIDs, PurchAmt, MerchantID, PrevAuthDateTime и, если имеется, AcqBackInfo и InstallRecurData б. Если это повторное выполнение всех авторизаций (т.е. AuthNewAmt в AuthRevReq равно нулю), уменьшить RecurringCount на 1 в. Уменьшить TotalAuthAmount на AuthNewAmt из авторизацилнного отклика, который будет содержать маркер AuthToken. |
2 | Сформировать PANToken (см. табл. 4.6.2.46) |
3 | С привлечением инкапсуляции EncX уложить данные в цифровой конверт, используя P1=P2=Cert-PE в качестве s и r параметров, AuthTokenTBE (из шага 1) - в качестве параметра t и PANToken - в качестве параметра p. |
Обработка AuthToken выполняется в следующем порядке:
Шаг | Действие |
1 | Извлечь AuthToken из EncX-конверта, используя секретный ключ расчетного центра. |
2 | Если это автризационный запрос и AuthToken уже использовался при авторизации, установить AuthCode равным piPreviouslyUsed |
3 | Если это запрос повторной авторизации (reversal request) и AuthToken не использовался при авторизации, установить AuthCode=piAuthMismatch. |
4 | Если это авторизационный запрос и InstallRecurData специфицирована рекурентной информацией:
|
5 | Если это автризационный запрос и InstallRecurData специфицирована информацией Installment, реализовать специфические требования платежной системы карты. |
6 | Если на предыдущих шагах AuthCode не был установлен, переадресовать данные от AuthToken авторизационному процессу. |
AcqCardMsg | EncK(AcqBackKeyData, P, AcqCardCodeMsg) AcqBackKeyData предоставляется владельцем карты в PI. Зашифрованное сообщение адресуется владельцу карты. |
AcqBackKeyData | Копируется из PIHead.AcqBackKeyData (см. табл. 4.6.2.40) |
AcqCardCodeMsg | {AcqCardCode, AcqCardMsgData} |
AcqCardCode | Числовой код |
AcqCardMsgData | {[AcqCardText], [AcqCardURL], [AcqCardPhone]} |
AcqCardText | Текстовое сообщение, отображаемое владельцу карты |
AcqCardURL | URL HTML-сообщения, отображаемого владельцу карты |
AcqCardPhone | Телефонный номер, предоставляемый владельцу карты |
messageOfDay | Банк продавца хочет, чтобы это сообщение было передано всем |
accountInfo | Информация о счете должна быть передана назад пользователю |
сallCustomerService | Предлагает приложению отобразить сообщение, рекомендующее пользователю обратиться в службу обслуживания клиентов |
Структура данных CapToken представлена в таблице 4.6.2.44. Таблица 4.6.2.44. Структура CapToken
CapToken | <Enc(P1, P2, CapTokenData), EncX(P1, P2, CapTokenData, PANToken), {}> P1 и P2 обозначают платежные центры:
|
CapTokenData | {AuthRRPID, AuthAmt, TokenOpaque} |
PANToken | Смотри табл. 4.6.2.46 |
AuthRRPID | RRPID, который появляется в соответствующем AuthReq или AuthRevReq |
AuthAmt | Действительное число авторизованных, которое может отличаться от PurchAmt владельца карты |
TokenOpaque | Невидимые данные, определенные расчетным центром |
Шаг | Действие |
1 | Если формируется в ходе авторизации, установить AuthAmt в CapTokenData равным AuthAmt в AuthRes. В противном случае, если генерируется во время повторного авторизационного процесса, занести AuthAmt в CapTokenData равным AuthNewAmt для последующей посылки в AuthRevRes |
2 | Занести в TokenOpaque из CapTokenData частные данные, необходимые для расчетов |
3 | Если продавец получает PANToken из своего банка, тогда:
|
Шаг | Действие |
1 | Используя секретный ключ расчетного центра, извлечь CapTokenData из упаковки ЕncX или Enc. |
2 | Если это платежный запрос (capture request) и CapToken уже использовался в таком запросе, установить CapCode в CapResPayload равным dublicateRequest. |
3 | Если это аннулирование (reversal) платежного запроса, запрос кредита или отзыв кредита и CapToken ранее не использовался в платежных запросах, установить CapRevOrCredCode в поле CapRevOrCredResPayload равным originalNotFound |
4 | Если это аннулирование платежного запроса, а CapToken уже использовался в подобном запросе, установить CapRevOrCredCode в CapRevOrCredResPayload равным dublicateRequest. |
5 | Если CapCode или CapRevOrCredCode не были установлены при выполнении предыдущих шагов, переадресовать данные из CapToken процессу платежного запроса. |
Структура данных PANData представлена в таблице 4.6.2.45. Таблица 4.6.2.45. Структура PANData
PANData | {PAN, CardExpiry, PANSecret, EXNonce} |
PAN | Первичный номер счета, обычно номер счета карты |
CardExpiry | Дата действительности карты |
PANSecrit | Секретный код, используемый совместно владельцем карты, расчетным центром и сертификационным центром владельца карты. Предотвращает атаки на PAN в сертификате владельца карты. |
EXNonce | Новый код (Nonce), который препятствует атаке на PANData |
Шаг | Действие |
1 | Занести в PAN номер счета владельца карты |
2 | Записать в CardExpiry дату действительности карты |
3 | Занести PANSecret, который был получен от СА вместе с сертификатом владельца карты. Для владельца карты без сертификата все октеты этого поля устанавливаются равными нулю. |
4 | Сформировать новое значение EXNonce |
PANToken | {PAN, CardExpiry, EXNonce} |
PAN | Первичный номер счета, обычно номер счета карты |
CardExpiry | Дата действительности карты |
EXNonce | Новый код (Nonce), который препятствует атаке на PANData |
Шаг | Действие |
1 | Занести в PAN номер счета владельца карты |
2 | Записать в CardExpiry дату действительности карты |
3 | Сформировать новое значение EXNonce. |
SaleDetail | {[BatchID],[BatchSequenceNum], [PayRecurInd], [MerOrderNum], [AuthCharInd], [MarketSpecSaleData], [CommercialCardData], [OrderSummery], [CustomerReferenceNumber], [CustomerServicePhone], OktoPrintPhoneInd, [SaleExtensions]} Это поле может появляться в AuthReq с флагом CaptureNow установленным равным TRUE или в сообщениях, связанных с платежным запросом. |
BatchID | Идентификация последовательности операций в системе продавец и его банк |
BatchSequenceNum | Порядковый номер позиции в данной последовательности расчетных операций. |
PayRecurInd | Номер типа транзакции |
MerOrderNum | Номер заказа продавца |
AuthCharInd | Копируется из AuthResPayload |
MarketSpecSaleData | {[MarketSpecDataID], [MarketSpecCapData]} |
CommercialCardData | Описание позиции в платежном запросе (см. табл. 4.6.2.48) |
OrderSummary | Краткое описание заказа |
CustomerReferenceNumber | Номер ссылки, присвоенный заказу владельца карты |
CustomerServicePhone | Номер телефона службы обслуживания клиентов данного продавца |
OKtoPrintPhoneInd | Булево число, указывающее, может ли эмитент выдавать телефон службы сервиса в ответ на запрос владельца карты. |
SaleExtensions | Данные этого расширения должны быть финансовыми и важными для обработки платежного запроса расчетного центра или эмитента |
MarketSpecDataID | Копируется из AuthResPayload |
MarketSpecCapData | <MarketAutoCap, MarketHotelCap, MarketTransportCap> |
MarketAutoCap | Описание оплаты проката автомобиля (см. табл. 4.6.2.49) |
MarketHotelCap | Описание оплаты гостиницы (см. табл. 4.6.2.50) |
MarketTransportCap | Данные о пассажире (см. табл. 4.6.2.51) |
PayRecurInd может принимать следующие значения:
unknown | Тип транзакции неизвестен |
singleTransaction | Транзакция состоит из одной авторизации и платежного запроса |
recurringTransaction | Транзакция состоит из нескольких авторизаций и платежных запросов, которые повторяются регулярно |
installmentPayment | Транзакция состоит из нескольких авторизаций и заказов-резервирований, которые выполняются фиксированное число раз |
otherMailOrder | Прочие транзакции заказов по почте |
CommercialCardData | {[ChargeInfo], [MerchantLocation], [ShipFrom], [ShipTo], [ItemSeq]} |
ChargeInfo | {[TotalFreightShippingAmount], [TotalDutyTariffAmount], [DutyTariffReference], [TotalNationalTaxAmount], [TotalLocalTaxAmount], [TotalOtherTaxAmount], [TotalTaxAmount], [MerchantTaxID], [MerchantDutyTariffRef], [CustomerDutyTariffRef], [SummaryCommodityCode], [MerchantType]} |
MerchantLocation | Местоположение продавца |
ShipFrom | Адрес отправки |
ShipTo | Адрес получателя |
ItemSeq | {Item +} Номера от 1 до 999 |
TotalFreightShippingAmount | Общее количество позиций, подлежащих обработке и доставке |
TotalDutyTariffAmount | Полная сумма налога или тариф для заказа |
DutyTariffReference | Код ссылки, приписанный налогу или тарифу для данного заказа |
TotalNationalTaxAmount | Полная величина национального налога (с продаж или на добавленную стоимость), распространяющегося на данный заказ |
TotalLocalTaxAmount | Размер местного налога, распространяющегося на данный заказ |
TotalOtherTaxAmount | Прочие налоги, действующие для данного заказа |
TotalTaxAmount | Полный размер налога для данного заказа |
MerchantTaxID | Индивидуальный идентификационный номер продавца |
MerchantDutyTariffRef | Код налога или тарифа, приписанный продавцу |
CustomerDutyTariffRef | Код налога или тарифа, приписанный владельцу карты |
SummaryCommodityCode | Код товара, приложимый ко всему заказу |
MerchantType | Тип продавца |
Item | {Quantity, [UnitOfMeasureCode], Descriptor, [CommodityCode], [ProductCode], [UnitCost], [NetCost], DiscountInd, [DiscountInd], [NationalTaxAmount], [NationalTaxAmount], [NationalTaxRate], [NationalTaxType], [LocalTaxAmount], [LocalTaxAmount], ItemTotalCost} |
Quantity | Количество предметов или услуг данного типа |
UnitOfMeasureCode | Единицы измерения для данной позиции в заказе |
Descriptor | Описание позиции в заказе |
CommodityCode | Код вида товара для данной позиции заказа |
ProductCode | Код продукта для данной позиции заказа |
UnitCost | Цена единицы товара |
NetCost | Чистая цена единицы товара |
DiscountInd | Указывает, распространяется ли скидка на данную позицию в заказе |
DiscountAmount | Величина скидки для данной позиции заказа |
NationalTaxAmount | Величина национального налога, применимого к данной позиции заказа |
NationalTaxRate | Национальный налог (с продаж или на добавленную стоимость), применимый к данной позиции заказа |
NationalTaxType | Ставка национального налога, действующая для данной позиции заказа |
LocalTaxAmount | Величина местного налога, действующая для данной позиции заказа |
OtherTaxAmount | Величина прочих налогов |
ItemTotalCost | Полная цена данной строки заказа |
Структура MarketAutoCap
MarketAutoCap | {[RenterName], [RentalLocation], RentalDateTime, [AutoNoShow], [RentalAgreementNumber], [ReferenceNumber], [InsuranceType], [InsuranceType], [ReturnLocation], ReturnDateTime, AutoCharges} |
RenterName | Имя лица, сдающего авто в аренду |
RentalLocation | Адрес фирмы сдающей авто в аренду |
RentalDateTime | Дата (опционно время), когда авто было взято в аренду |
AutoNoShow | Числовой код, указывающий, что клиент не предъявил во время арендованную машину |
RentalAgreementNumber | Номер арендного соглашения |
ReferenceNumber | Код аренды |
InsuranceType | Тип страховки, выбранный арендатором |
AutoRateInfo | {AutoApplicableRate, [LateReturnHourlyRate], [LateReturnHourlyRate], [FreeDistance], [VehicleClassCode], [CirporateID]} |
ReturnLocation | Адрес фирмы, куда следует вернуть авто (см. табл. 4.6.2.51) |
ReturnDateTime | Дата (опционно время) возвращения автомобиля |
AutoCharges | {RegularDistanceCharges, [LateReturnCharges], [TotalDistance], [ExtraDistanceCharges], [InsuranceCharges], [FuelCharges], [AutoTowingCharges], [OneWayDropOffCharges], [TelephoneCharges], [ViolationsCharges], [DelivaryCharges], [ParkingCharges], [OtherCharges], [TotalTaxAmount], [AuditAdjustment]} |
AutoApplicableRate | <DailyRentalRate, WeeklyRentalRate> |
LateReturnHourlyRate | Почасовая плата за опоздание возврата |
DistanceRate | Помильная оплата за превышение допустимого пробега |
FreeDistance | Расстояние, которое может пройти машина в день, без увеличения арендной платы. |
VehicleClassCode | Класс арендуемого автомобиля |
CorporateID | Корпоративный идентификационный номер, который применяется для определения арендной платы |
RegularDistanceCharges | Сумма расходов за аренду (исключая расходы, перечисленные ниже) |
LateReturnCharges | Сумма выплаты за возвращения автомобиля после оговоренного срока. |
TotalDistance | Полный пробег автомобиля. |
ExtraDistanceCharges | Сумма оплаты избыточного пробега (сверх оговоренного в договоре) |
InsuranceCharges | Сумма страховки |
FuelCharges | Оплата горючего |
AutoTowingCharges | Оплата буксировки |
OneWayDropOffCharges | Оплата одностороннего разрыва арендного договора |
TelephoneCharges | Расходы использования телефона в арендованной машине |
ViolationsCharges | Сумма штрафов за нарушения за время аренды автомобиля |
DelivaryCharges | Оплата доставки арендованного автомобиля |
ParkingCharges | Оплата парковки арендованного автомобиля |
OtherCharges | Оплата расходов, не определенных в других позициях |
TotalTaxAmount | Сумма налогов, связанная с арендой автомобиля |
AuditAdjustment | Сумма изменения объема транзакции в результате аудита в компании, предоставляющей автомобили в аренду. |
DailyRentalRate | Дневная арендная плата |
WeeklyRentalRate | Арендная плата за неделю |
Структура MarketHotelCap
MarketHotelCap | {[ArriveDate], [RentalLocation], DepartureDate, [DurationOfStay], [FolioNumber], [PropertyPhone], [CustomerServicePhone], [ProgramCode], [HotelRateInfo], HotelCharges} |
ArriveDate | Дата регистрации владельца карты в отеле |
HotelNoShow | Цифровой код, указывающий, что клиент не был зарегистрирован в этом отеле своевременно |
DepartureDate | Дата отбытия владельца карты из отеля |
DurationOfStay | Число дней пребывания владельца карты в отеле |
FolioNumber | Номер книги |
PropertyPhone | Номер телефона отеля |
CustomerServicePhone | Номер телефона системы обслуживания клиентов отеля или сети отелей |
ProgramCode | Код, указывающий тип специальной программы пребывания клиента |
HotelRateInfo | {DailyRoomRate, [DailyTaxRate]} |
HotelCharges | {RoomCharges, [RoomTax], [PrepaidExpenses], [FoodBeverageCharges], [RoomServiceCharges], [MiniBarCharges], [LaundryCharges], [TelephoneCharges], [BusinessCenterCharges], [ParkingCharges], [MovieCharges], [HealthClubCharges], [GiftShopCharges], [FolioCashAdvances], [OtherCharges], [TotalTaxAmount ], [AuditAdjustment]} |
DailyRoomRate | Стоимость проживания в день. В эту сумму входят налоги, если не специфицирована переменная DailyTaxRate. |
DailyTaxRate | Размер налога за проживание одного дня в гостинице |
RoomCharges | Полная стоимость проживания в номере с учетом дополнительных расходов, перечисленных ниже |
RoomTax | Налог, взымаемый с суммы RoomCharges |
PrepaidExpenses | Полный размер предоплаты |
FoodBeverageCharges | Оплата еды и напитков |
RoomServiceCharges | Оплата обслуживания номера |
MiniBarCharges | Оплата пользования минибаром |
LaundryCharges | Оплата услуг прачечной |
TelephoneCharges | Плата за пользование телефоном |
BusinessCenterCharges | Оплата за услуги бизнес-центра |
ParkingCharges | Оплата парковки |
MovieCharges | Оплата за просмотр фильмов в номере |
HealthClubCharges | Оплата услуг оздоровительного клуба |
GiftShopCharges | Оплата покупок в сувенирном магазине |
FolioCashAdvances | Сумма, предварительно внесенная за номер |
OtherCharges | Другие расходы |
TotalTaxAmount | Сумма налогов, включенная в счет |
AuditAdjustment | Изменение платежа в результате перепроверки расчетов в отеле |
Структура MarketTransportCap
MarketTransportCap | {PassangerName, DepartureDate, OrigCityAirport, [TripLegSeq], [TicketNumber], [TravelAgencyCode], [TravelAgencyName], [Restrictions]} |
PassangerName | Имя пассажира, кому выдается билет |
DepartureDate | Дата отбытия |
OrigCityAirport | Город начала путешествия |
TripLegSeq | {TripLeg +} от одной до 10 TripLeg-записей |
TicketNumber | Номер билета |
TravelAgencyCode | Код турагенства |
TravelAgencyName | Название турагенства |
Restrictions | Численный код, указывающий на ограничения выплат и расходов |
TripLeg | {DateOfTravel, CarrierCode, ServiceClass, StopOverCode, DestCityAirport, [FareBasisCode], [DepartureTax]} |
DateOfTravel | Дата путешествия |
CarrierCode | Код перевозчика данного тура |
ServiceClass | Класс услуг тура |
StopOverCode | Числовой код, указывающий на допустимость остановок в пути при совершении тура |
DestCityAirport | Аэропорт места назначения тура |
FareBasisCode | Код базовой цены тура |
DepartureTax | Налог при отбытии для данного тура |
Location | {CountryCode, [City], [StateProvince], [PostalCode], [LocationID]} |
CountryCode | Код страны ISO 3166 |
City | Название города |
StateProvince | Название или аббревиатура штата или провинции |
PostalCode | Почтовый код |
LocationID | Идентификатор, который использует продавец, чтобы специфицировать один из своих адресов |
RRTags | { RRPID, MerTermIDs, Date} |
RRPID | Новый идентификатор пары запрос/отклик |
MerTermIDs | {MerTermIDs, [TerminalID], [AgentNum], [ChainNum], [StoreNum]} |
Date | Текущая дата для устаревающих записей |
MerchantID | Владелец карты заносит эти данные в PIHead. Этот код копируется из MerID в сертификат подписи продавца. |
TerminalID | Продавец вводит эти данные в AuthReq. |
AgentNum | Продавец вводит эти данные в AuthReq. |
ChainNum | Продавец вводит эти данные в AuthReq. |
StoreNum | Продавец вводит эти данные в AuthReq. |
Шаг | Действие |
1 | Формируется новый RRPID и запоминается в базе данных транзакции. |
2 | Заносятся MerTermIDs из записанных данных продавца, описывающих место продажи. |
3 | Записывается текущая дата в поле Date. |
Структура данных BatchStatus представлена в таблице 4.6.2.53. Таблица 4.6.2.53. Структура BatchStatus
BatchStatus | {OpenDateTime, [ClosedWhen], BatchDetails, [BatchExtensions]} |
OpenDateTime | Дата и время открытия платежной линии |
ClosedWhen | {CloseStatus, CloseDateTime} |
BatchDetails | {CloseDateTime, [BrandBatchDetailsSeq]} |
BatchExtensions | Данные в расширении для сообщения управления платежами должны носить финансовый характер и быть существенными для обработки административного запроса |
CloseStatus | Цифровой код, указывающий статус закрытия платежной линии |
CloseDateTime | Дата и время закрытия платежной линии |
BatchTotals | {TransactionCountCredit, TransactionTotalAmtCredit, TransactionCountDebit, TransactionTotalAmtDebit, [BatchTotalExtensions]} |
BrandBatchDetailsSeq | {BrandBatchDetails +} |
TransactionCountCredit | Число транзакций, которые внесли вклад в кредит продавца. |
TransactionTotalAmtCredit | Полная сумма, внесенная на счет продавца |
TransactionCountDebit | Число транзакций, которые внесли вклад в дебет продавца |
TransactionTotalAmtDebit | Полная сумма, снятая со счета продавца |
BatchTotalExtensions | Данные расширения отклика управления платежами должны носить финансовый характер и быть существенными для обработки административного запроса.Информация, относящаяся к обработке запроса, должна появляться в расширении BatchAdminResData. Информация, имеющая отношение к состоянию платежной линии, должна лежать в расширении BatchStatus. Информация, относящаяся к деталям по конкретной позиции заказа, присутствует в расширении TransactionDetail. |
BrandBatchDetails | {BrandID, BatchTotals} |
BrandID | Тип платежной системы карты без типа продукта |
TransactionDetail | {TransIDs, AuthRRPID, BrandID, BatchSequenceNum, [ReimbursementID], TransactionAmt, TransactionAmtType, [TransactionStatus], [TransExtensions]} |
TransIDs | Идентификаторы транзакций обработки авторизации/оплаты для заданной позиции |
AuthRRPID | RRPID, который присутствует в соответствующих AuthReq или AuthRevReq |
BrandID | Платежная система карты (без типа продукта) |
BatchSequenceNum | Порядковый номер позиции в пакете платежей |
ReimbursmentID | Цифровой код, указывающий на тип оплаты для заданной позиции |
TransactionAmt | Сумма для позиции, тип которой указан в TransactionAmtType. Сумма всегда обозначается положительным числом. |
TransactionAmtType | Цифровой код, указывающий тип суммы (кредит или дебет) |
TransactionStatus | Цифровой код, индицирующий результат прохождения транзакции для вышестоящей системы |
TransExtensions | Данные в расширении для административного отклика последовательности платежей (batch) должны иметь финансовый характер и использоваться при обработке административного запроса для заданной последовательности платежей. Информация, имеющая отношение к обработке запроса должна размещаться в расширении BatchAdminResData. |
Суммы в платежных сообщениях SET характеризуются тремя полями: валюта, сумма и amtExp10. Эти поля содержат ASCII-строки, формат которых охарактеризован в таблице ниже.
Поле | Определение |
currency (валюта) | Значение представляется в виде строки ASCII-символов, характеризующей три цифры кода валюты (ISO 4217) Например, платеж в долларах США будет обозначен кодом 840. Возможные значения лежат в диапазоне 1-999 включительно. |
amount (cумма) | Значение представляется в виде строки ASCII-символов, характеризующей сумму платежа в указанной валюте. Значение должно соответствовать положительному числу. |
amtExp10 | Значение представляется в виде строки ASCII-символов, характеризующей десятичный показатель степени:cумма * (10amtExp10). Значение может быть как положительным, так и отрицательным. |
Диаграмма обмена для протокола покупки На рис. 4.6.2.15 показаны все возможные сообщения, которые могут иметь место при обработке транзакции (опционные сообщения отмечены курсивом). Следует заметить, что приведенный порядок обмена является рекомендуемым, и допускается его изменение. Рис. 4.6.2.15. Опции обмена сообщениями при покупке Рис. 4.6.2.15а. (продолжение) Пары сообщений InqReq/InqRes позволяют владельцу карты получать информацию о состоянии транзакции. Запрос InqReq может быть послан в любое время после посылке продавцу PReq. В паре сообщений PReq/PRes владелец карты уведомляет продавца о том, что же он хочет купить. Сообщения AuthRevReq и AuthRevRes используются тогда, когда необходимо возобновить авторизацию. Сообщения CapRevReq и CAPRevRes организуют процесс отмены оплаты покупки, прежде чем сделка будет завершена. Пара CredReq и CredRes сходна с предыдущей парой, но используется после завершения сделки. Сообщения PCertReq/PCertRes обеспечивают для продавца механизм получения сертификата шифрования, который необходим для шифрования сообщения расчетному центру. BatchAdminReq и BatchAdminRes служат продавцу для открытия, закрытия и выяснения статуса транзакции его платежной линии с расчетным центром. Сообщения Error служат для уведомления об ошибках в протоколе или при обработке. Обработка запросов/откликов инициализации платежа Процедура инициализации платежа включает в себя обмен двумя сообщениями. Первоначальный запрос PInitReq посылает владелец карты, отклик PInitRes ему присылает продавец. Задачей этого обмена является получение владельцем карты сертификатов и CRL. Без такого обмена данная информация может быть получена и каким-то другим образом, например с CD-ROM. Эти сообщения посылаются после инициализации процесса SET. Сообщение-запрос PInitReq идентифицирует платежную систему карты (Brand), предоставляет локальный идентификатор владельца карты для данной транзакции, посылает переменную вызова для определения пригодности (свежести) сообщения-отклика.
В этом сообщении передается также набор оттисков, который идентифицирует соответствующие сертификаты и CRL, уже имеющиеся у владельца карты, чтобы их не нужно было посылать еще раз. Сообщение-отклик PInitRes содержит запрошенные данные, включая сертификаты и CRL. Присылается продавцом также дата, XID и вызов владельца карты, добавляется, кроме того, и вызов продавца. Алгоритм формирования владельцем карты сообщения PInitReq приведен в таблице ниже.
Шаг | Действие |
1 | Сформировать RRPID для идентификации сообщения и установления соответствия между запросом и откликом |
2 | Занести в поле Language, значение которое выбрал владелец карты для данной транзакции |
3 | Сформировать идентификатор LID-C, который является идентификатором пары сообщений, так как XID еще не присвоен. Этому полю могут присваиваться числа натурального ряда или случайные коды. |
4 | Если продавец при инициации SET-процесса предоставил код LID-M, скопировать его в сообщение. |
5 | Сформировать новый код Chall-C |
6 | На основе выбранной формы платежа заполнить BrandID (из программы-магазина или из программы инициализации SET). |
7 | Заполнить поле BIN (первые 6 цифр номера счета владельца карты) |
8 | Опционно. Заполнить оттиски для сертификатов, CRL и BrandCRLIdentifier, имеющиеся у владельца карты. Сюда должен входить корневой сертификат. |
9 | Записать в базу данных транзакций RRPID, LID-C, LID-M (если имеется), Chall-C и оттиски (если имеются). |
10 | Опционно. Заполнить любые расширения PInitReq. |
11 | Занести все это в цифровой конверт и послать продавцу |
PInitReq | { RRPID, Language, LID-C, [LID-M], Chall-C, BrandID, BIN, [Thumbs], [PIRqExtensions]} |
RRPID | Идентификатор пары запрос/отклик |
Language | Естественный язык владельца карты |
LID-C | Локальный ID. Метка, формируемая системой владельца карты или для нее. |
LID-M | Копируется из сообщения инициации SET (если имеется) |
Chall-C | Вызов владельца карты, служащий для гарантии новизны подписи продавца |
BrandID | Выбранная владельцем карты платежная система |
BIN | Номер идентификации банка из номера счета владельца карты (первые 6 цифр) |
Thumbs | Оттиски списка сертификатов, CRL и BrandCRLIdentifier из кэша владельца карты |
PIRqExtensions | Запрос инициализации покупки незашифрован, по этой причине эти расширения не должны содержать конфиденциальных данных. |
Алгоритм обработки PInitReq продавцом представлен ниже.
Шаг | Действие |
1 | Извлечь запрос из входного сообщения |
2 | Если LID-M присутствует, найти запись транзакции, базирующуюся на LID-M. Если запись не найдена:
|
3 | Если LID-M отсутствует, найти запись транзакции, на основе критериев, выходящим за пределы регламентаций SET. Если продавец не сформировал LID-M для этой транзакции, опционно сгенерировать LID-M и занести его в запись транзакции. |
4 | Сформировать новый XID |
5 | Занести XID, RRPID, Language, LID-C, Chall-C, BrandID и BIN в запись транзакции |
6 | Если оттиски присутствуют, произвести спасение записи транзакции |
7 | Если имеется какое-либо расширение PInitReq, произвести его обработку. Если расширение не распознано и флаг критичности равен TRUE, сформировать сообщение Error, в противном случае игнорировать расширение. Если расширение распознано, его следует обработать. |
Шаг | Действие |
1 | Сформировать структуру данных PInitRes следующим образом:
|
2 | Ввести Compose SignedData. Если оттиск для Cert-PE не получен в PInitReq, включить в подпись Cert-PE. |
3 | Вставить все эти данные в цифровой конверт и послать владельцу карты |
Структура PInitRes
PInitRes | S(M, PInitResData) |
PInitResData | {TransIDs, RRPID, Chall-C, Chall-M, [BrandCRLIdentifier], PEThumb, [Thumbs], [PIRsExtensions]} |
TransIDs | Смотри описание структуры TransID выше |
RRPID | Идентификатор пары запрос/отклик |
Chall-C | Копируется из сообщения PInitReq |
Chall-M | Вызов продавца, служащий для проверки новизны подписи владельца карты |
BrandCRLIdentifier | Список текущих CRL для всех СА в рамках заданной платежной системы. |
PEThumb | Оттиск сертификата ключевого обмена расчетного центра. |
Thumbs | Копируется из PInitReq |
PIRsExtensions | Запрос инициализации покупки незашифрован, по этой причине эти расширения не должны содержать конфиденциальных данных. |
Шаг | Действие |
1 | Извлечь PInitRes из входного сообщения |
2 | Вызвать Receive SignedData |
3 | Проверить TransID следующим образом:
|
4 | Сравнить RRPID со значением из записи транзакции. Если они отличаются, то:
|
5 | Сравнить Сhall-C со значением из записи транзакции. Если они отличаются, то:
|
6 | В опционном варианте управления со стороны владельца карты из сертификата продавца извлекается его имя и отображается для пользователя. Если владелец карты одобряет кандидатуру, процесс продолжается, в противном случае обработка PInitRes прерывается. |
7 | Занести данные, включая TransID и Chall-M, в запись транзакции |
8 | Обработать BrandCRLIdentifier, если он присутствует. |
9 | Использовать PEThumb для идентификации сертификата шифрования (Cert-PE), чтобы использовать в PReq при шифровании данных для расчетного центра. |
10 | Проверить, что сертификат платежной системы продавца и сертификат расчетного центра (Cert-PE) согласуются с платежной системой владельца карты, указанной в PInitReq. Если согласия нет, владелец карты оповещается об этом, а обработка PInitReq прерывается. |
11 | Если поле Thubs присутствует, сравнить его значение с тем, что прислано в PInitReq. Если значения совпадают, перейти к исполнению пункта 14, в противном случае:
|
12 | Если поле Thumbs отсутствует, проверить, что Thumbs не было послано в PInitReq. Если Thumbs было послано в PInitReq, о:
|
13 | Если PIRsExtensions существуют, их необходимо обработать. Если они не распознаны, а флаг критичности (criticality) равен TRUE, сформировать сообщение Error, в противном случае расширения следует игнорировать. |
14 | Проверить Cert-PE (идентифицированный в PEThumb) для неподписанных транзакций. Если индикатор в Cert-PE не допускает неподписанных транзакций, а владелец карты не имеет сертификата, информировать его о том, что транзакция не может быть продолжена и прервать обработку. |
15 | Владелец карты может теперь продолжить процедуру посылкой запроса покупки. |
Запросы инициализации покупки (PInitReq) несут в себе достаточно информации о владельце карты для программы продавца, чтобы выбрать сертификат платежного центра. Следует имеь в виду, что эти запросы не шифруются и соответствующие расширения не должны нести в себе конфиденциальной информации. Отклик на запрос инициализации (PInitRes) содержит копии данных из запроса PInitReq, а также сертификаты продавца и расчетного центра. Отклик подписывается продавцом, что позволяет владельцу карты быть уверенным в том, что посланная им в запросе информация дошла до продавца неискаженной (за счет просмотра копий). Отклик PInitRes также не шифруется. Обработка заказа-покупки Обмен запрос-отклик (PReq/PRes) представляет собой реализацию покупки, выполняемой владельцем карты у продавца. Данные сообщения составляют ядро протокола купли-продажи. На долю владельца карты выпадает функция платежа. Реализация запроса покупки проходит через 5 этапов (см. рис. 4.6.2.16). Рис. 4.6.2.16. Обработка запроса покупки Прежде чем послать запрос покупки покупатель (владелец карты) должен заполнить форму заказа, одобрить условия сделки и выбрать платежную карту. Для того чтобы послать запрос продавцу, владелец карты должен иметь копию ключей расчетного центра. Обработка заказа начинается, когда программа владельца карты запрашивает копию сертификата расчетного центра. В этом сообщении содержится информация о выборе платежной системы. Когда продавец получает запрос, он присваивает транзакции уникальный идентификатор. После этого продавец пересылает свой сертификат и сертификат расчетного центра вместе с этим идентификатором владельцу карты. Программа владельца карты верифицирует полученные сертификаты и запоминает их для использования в последующей обработке заказов. Приложение владельца карты формирует данные заказа OI (Order Information) и платежные инструкции PI. OI и PI снабжаются идентификатором транзакции, для того чтобы расчетный центр мог связать их вместе при авторизации запроса продавца.
Заметим, что OI не содержит таких данных как описание товара или условий поставки. Эта информация получается на фазе сделки, предшествующей операциям SET (например, в рамках протокола IOTP). Программное обеспечение владельца карты генерирует двойную цифровую подпись для OI и PI путем вычисления дайджеста для обоих модулей данных, объединения этих дайджестов, вычисления дайджеста результата и осуществления подписи этого сообщения с привнием секретного ключа владельца карты. Дайджесты OI и PI посылаются вместе с этим сообщением. Далее программа формирует симметричный ключ и использует его для шифрования дважды подписанных PI. Затем программа шифрует номер счета владельца карты и симметричный ключ с привлечением общедоступного ключа расчетного центра. Результат составляет цифровой конверт сообщения, которое передается продавцу. Когда программа продавца получает заказ, она верифицирует сертификат подписи владельца карты, используя общедоступный ключ владельца карты и дайджест PI (заключенный в OI), проверяет цифровую подпись, чтобы убедиться в не искаженности заказа и в том, что сообщение подписано секретным ключом владельца карты. Заметим, что продавцу не обязательно выполнять авторизацию до посылки отклика владельцу карты. Последний может позднее определить, была ли выполнена авторизация, послав информационный статусный запрос. После обработки OI продавец генерирует отклик и снабжает его цифровой подписью. Этот отклик содержит в себе сертификат подписи продавца и указывает на факт получения заказа от владельца карты. Если отклик авторизации указывает на одобрение транзакции, продавец поставляет товар или услугу, указанные в заказе. Когда приложение владельца карты получает отклик на запрос покупки от продавца, сначала верифицируется сертификат подписи. Далее проверяется цифровая подпись продавца. При благоприятном исходе этих проверок выдается соответствующее сообщение и производится запись в базу данных. Состояние выполнения заказа владелец карты может выяснить путем посылки информационных статусных запросов. Сообщение PReq не обязательно следует за сообщениями PInitReq/PInitRes.
Сообщение же PRes может быть прислано до выполнения авторизации и оплаты. Если владелец карты обладает сертификатом, то для обеспечения целосности и аутентичности сообщения выполняется двойная подпись. PReq представляет собой наиболее сложное сообщение в протоколе. Оно состоит из двух частей: инструкции-заказа OI (Order Instruction) для продавца и платежной инструкции PI (Payment Instruction), которая проходит транзитом через продавца в расчетный центр. Эти две части принципиально должны подписываться независимо. Продавец получает описание заказа OD (Order Description) и PurchAmt. В PI включаются хэши OD и PurchAmt (HODINput). Расчетный центр проверяет, что хэш передан покупателем (владельцем карты) через продавца и равен хэшу, выданному продавцом в AuthReq. Некоторые владельцы карт могут не иметь сертификатов. Сообщения от таких владельцев не будут подписаны, вместо этого PIHead связывается с OIData. Целостность таких сообщений обеспечивается следующими мерами:
- C PI используется OAEP
- В блок OAEP включается H(PIHead) (вместе с PANData)
- С PIHead используется H(OIData)
- Расчетным центром производится сравнение H(OIData), присланного продавцом, с H(OIData) из PIHead.
Шаг | Действие | ||
1 | Извлечь PurchAmt и OD | ||
2 | Сформировать OIData следующим образом: | ||
a) | Если имел место обмен PInitReq/ PInitRes: | Скопировать TransIDs из PInitRes | |
В противном случае: | Для формирования TransIDs владелец карты сгенерирует PreqDate (текущие дата/время), LID-C и XID | ||
b) | Сформировать новый RRPID, запомнить его значение для сверки с откликом продавца | ||
Если имел место обмен PInitReq/PInitRes: | Скопировать Chall-c из PInitRes | ||
В противном случае: | Сформировать новый Chall-C | ||
c) | Сформировать новый ODSalt | ||
d) | Сформировать HODInput посредством следующей процедуры:
| ||
e) | Сформировать HOD с HODInput из пункта 2 d | ||
f) | Если имел место обмен PInitReq/ PInitRes: | Скопировать Chall-M из PInitRes и не заполнять BrandID | |
В противном случае: | Не заполнять Chall-M Записать BrandID, указав предпочтительный тип карты | ||
g) | Произвести записьв поле BIN с HODInput из пункта 2d | ||
h) | Если HODInput из шага 2.d имеет какие-то расширения OIExtensions, внести ODExtOIDs со всеми OID в ODExtensions. ODExtOIDs будут перечислены в том же порядке, что и расширения ODExtensions, таким образом продавец сможет вычислить тот же самый хэш | ||
i) | Опционно: добавить любые расширения OIExtensions. | ||
3 | Сформировать PIHead следующим образом: | ||
a) | Скопировать TransIDs, вычисленные в пункте 2.а | ||
b) | Сгенерировать Inputs согласно процедуре:
| ||
c) | Скопировать MerchandID из сертификата продавца в PInitRes, или из CD-ROM-каталога | ||
d) | Скопировать InstallRecurData из пункта 2.d.4 (если имеется) | ||
e) | Сформировать TransStain, как HMAC, используя XID в качестве данных и CardSecret - в качестве ключа. Если владелец карты не имеет сертификата, использовать CardSecret, заполненный нулями. | ||
f) | Записать SWIdent, который получен из локальных данных. Это значение будет соответствовать коду в цифровом конверте сообщения | ||
g) | Если присутствует туннельное расширение Cert_PE, сформировать AcqBackInfo следующим образом:
| ||
h) | Опционно добавить любые PIExtensions | ||
4 | Сформировать PANData | ||
5 | Сгенерировать PU-OIData c L-оператором, используя PIHead из пункта 3 (параметр t1) и OIData из пункта 2 (параметр t2) | ||
6 | Используя результат пунктов 2, 3 и 4, сгенерировать PreqDualSigned, если владелец карты имеет сертификат или PreqUnsigned, если сертификата нет. |
Когда расчетный центр готов шифровать данные для конечного пользователя (ЕЕ), его сертификат содержит список симметричных алгоритмов шифрования, которые он поддерживает, в порядке их предпочтения. Конечный пользователь, который хочет иметь шифрованные данные, выбирает первый алгоритм из списка, который он способен использовать. Ключ для этого алгоритма передается расчетному центру в сообщении PReq. Реализация PReqDualSigned рассмотрена ниже.
Шаг | Действие |
1 | Сформировать PISignature:
|
2 | Применить оператор EX, используя общедоступный ключ расчетного центра (параметр r), PI-OILink от владельца карты создает PReq шаг 5 (параметр t), а PANData от владельца карты создает PReq шаг 4 (параметр p) |
3 | Образовать PIDualSigned как объединение подписи PISignature, вычисленной в пункте 1, и шифрованных данных, полученных на шаге 2. |
4 | Генерируем PIData как объединение HIHead из PReq владельца карты, (см. пункт 3 предшествующей таблицы), и PANData владельца карты, которая создается в пункте 4 при формировании PReq (см. предшеств. табл.). |
5 | Генерируем OIDualSigned, посредством оператора L, используя OIData от владельца карты, создаем PReq - пункт 2 (параметр t1) и данные PIData, полученные в пункте 4 (параметр t2) |
6 | Генерируем PReqDualSigned как объединение PIDualSigned из пункта 3 и OIDualSigned из пункта 5. |
PReqDualSigned | {PIDualSigned, OIDualSigned} |
PIDualSigned | Смотри описание PI (выше) |
OIDualSigned | L(OIDualSigned, PIData) |
OIData | Смотри табл. 4.6.2.59 |
PIData | {PIHead, PANData} |
Структура PReqUnsigned
PReqUnsigned | {PIUnsigned, OIUnsigned} |
PIUnsigned | Смотри описание PI (выше) |
OIUnsigned | L(OIData, PIDataUnsigned) |
OIData | Смотри табл. 4.6.2.59 |
PIDataUnsigned | {PIHead, PANToken} (см. табл. 4.6.2.40 и 4.6.2.45) |
OIData | {TransIDs, RRPID, Chall-C, HOD, ODSalt, [Chall-M], BrandID, BIN, [ODExtOIDs], [OIExtensions]} |
TransIDs | Копируется из PInitRes, если имеется |
RRPID | ID пары запрос/отклик |
Chall-C | Копируется из соответствующего PInitReq (см. табл. 4.6.2.55) |
HOD | DD(HODInput)Связывает OIData с PurchAmt без копирования PurchAmt в OIData, что может привести к проблемам с конфиденциальностью |
ODSalt | Копируется из HODInput |
Chall-M | Вызов продавца владельцу карты относительно свежести подписи |
BrandID | Выбранная владельцем карты платежная система |
BIN | Идентификационный номер банка из номера счета владельца карты (первые 6 цифр) |
ODExtOIDs | Список объектных идентификаторов из ODExtensions |
OIExtensions | Данные в расширении к OI должны относиться к обработке заказа продавцом. Информация заказа незашифрованна, по этой причине здесь не должно быть конфиденциальной информации. |
HODInput | {OD, PurchAmt, PurchAmt, [InstallRecurData], [ODExtensions]} |
OD | Описание заказа (Order Description). Обмен этой информацией происходит между владельцем карты и продавцом (не регламентируется SET). Здесь могут содержаться данные о качестве товара, размере, цене, адресе поставки и т.д. |
PurchAmt | Число транзакций, как это определено владельцем карты. Значение должно соответствовать PIHead (табл. 4.6.2.40). |
ODSalt | Новое значение Nonce, сгенерированное владельцем карты, чтобы препятствовать атакам на HOD. |
InstallRecurData | См. табл. 4.6.2.41 |
ODExtensions | Данные в этом расширении OD должны относиться к обработке заказа продавцом. Эта информация должна быть известна независимо владельцу карты и продавцу. |
Шаг | Действие |
1 | Извлекает PReq из входного сообщения |
2 | Если получено PReqDualSigned, производит проверку подписи;
|
3 | Если получено PReqUnsigned, проверяет, что сертификат платежной системы (Cert-PE) допускает PReqUnsigned. Если нет, то:
|
4 | Производит обработку TransIDs: Проводит поиск транзакций, базирующихся на XID. Если запись такой транзакции найдена Сравнивает LID-C и LID-M с записью. Если соответствия нет:
|
5 | Проверяет, что BrandID в сертификате владельца карты соответствует BrandID в PInitReq и/или OIData. Если соответствия нет, то:
|
6 | Запоминает Chall-C, чтобы вернуть его в последующем PRes |
7 | Запоминает оставшиеся переменные из сообщения в базе данных |
8 | Сверяет HOD c сформированным хэшем OD, PurchAmt, ODSalt, InstallRecurData (если имеется) и ODExtensions (если имеется) |
9 | Начиная с этого момента, продавец может, если захочет, послать PRes владельцу карты, или ждать пока от расчетного центра не будет получено сообщение AuthRes |
После обработки PReq продавец формирует отклик PRes согласно следующему алгоритму:
Шаг | Действие |
1 | Сформировать PResData:
|
2 | Ввести Compose SignedData |
3 | Вставить сообщение в цифровой конверт и послать владельцу карты |
Шаг | Действие |
1 | Если выполнена только авторизация:
|
2 | Если оплата (capture) выполнена:
|
3 | Если кредитование осуществлено;
|
4 | Опционно добавить любые PRsExtensions |
Шаг | Действие |
1 | Скопировать AcqCardMsg из AuthRes, если этот отклик имеется |
2 | Если позиция авторизована, сформировать AuthStatus:
|
3 | Если позиция оплачена, сформировать CapStatus:
|
4 | Сформировать CredStatusSeq как последовательность CredStatus для каждой выполненной и не отмененной кредитной операции. Сформировать CredStatus:
|
Структура данных сообщения PRes, формируемого продавцом, представлена в таблице 4.6.2.60. Таблица 4.6.2.60. Структура PRes, формируемая продавцом
PRes | S(M, PresData) |
PResData | {TransIDs, RRPID, Chall-C, [BrandCRLIdentifier], PresPayloadSeq} |
TransIDs | Копируется из PReq |
RRPID | Идентификатор пары запрос/отклик |
Chall-C | Копируется из соответствующего PInitReq |
BrandCRLIdentifier | Список текущих CRL для всех СА в зоне ответственности СА платежной системы |
PResPayloadSeq | {PresPayload +} Одна запись для каждой выполненной авторизации. Отмена авторизации удаляет запись из PResPayload. Если не было авторизаций, появляется одна позиция с соответствующей статусной записью |
PResPayload | См. табл. 4.6.2.61 |
PResPayload | {CompletionCode, [Results], [PrsExtensions]} |
CompletionCode | Цифровой код, указывающий на состояние завершения транзакции |
Results | {[AcqCardMsg], [AuthStatus], [AuthStatus], [CredStatusSeq]} |
PRsExtensions | Отклик на запрос покупки не зашифрован и по этой причине не должен содержать конфиденциальную информацию |
AcqCardMsg | Копируется из AuthRes (см. табл. 4.6.2.43) |
AuthStatus | {AuthDate, AuthCode, AuthRatio, [CurrConv]} |
CapStatus | {CapData, CapCode, CapRatio} Данные присутствуют здесь, только если CapReq соответствует выполненной авторизации. Сообщение CredRevReq удаляет эти данные. |
CredStatusSeq | {CredStatus +} Данные присутствуют, только если CredReq соответствует выполненной авторизации. Сообщение CredRevReq удаляет эти данные. |
AuthDate | Данные авторизации. Копируются из AuthRRTags.Date (см. табл. 4.6.2.64) |
AuthCode | Цифровой код, указывающий на состояние авторизационного процесса. Копируется из AuthResPayload. |
AuthRatio | AuthReqAmt ч PurchAmt |
CurrConv | {CurrConvRate, CardCurr} Информация о конвертировании валюты, копируется из AuthResPayload |
CapData | Дата оплаты, копируется из CapPayload |
CapCode | Цифровой код, указывающий на состояние оплаты, копируется из CapResPayload |
CapRatio | CapReqAmt ч PurchAmt |
CreditStatus | {CreditDate, CreditCode, CreditRatio} Данные присутствуют, только если реализован запрос CreditReq. Эта информация удаляется CredRevReq |
CreditDate | Дата кредита. Копируется из CapRevOrCredCode. |
CreditCode | Цифровой код, указывающий на состояние кредита. Копируется из CapRevOrCredResPayload.CapRevOrCredCode. (см. табл. 4.6.2.74) |
CreditRatio | CapRevOrCredReqAmt ч PurchAmt |
Коды завершения (completionCode) могут принимать следующие значения (см. табл. 4.6.2.62). Таблица 4.6.2.62. Коды завершения операции
meanonglessRatio | PurchAmt=0; отношение не может быть вычислено |
orderRejected | Продавец не может обработать заказ |
orderReceived | Процессы авторизации отсутствуют |
orderNotReceived | Информационный запрос получен до заказа |
authorizationPerformed | См. AuthStatus |
capturePerformed | См. CapStatus |
creditPerformed | См. CreditStatus |
Шаг | Действие |
1 | Извлекается отклик из входного сообщения |
2 | Чтобы проверить подпись продавца, производится обращение к Received Signed Data, |
3 | На основе Trans.LID-C ищется запись транзакции. Если запись не найдена:
|
4 | Сравнить значения TransIDs.XID с XID из записи транзакции. Если равенства нет:
|
5 | Сравнить значения RRPID из сообщения и записи транзакции. Если совпадения нет:
|
6 | Сравнить значения Chall-C из сообщения и записи транзакции. Если совпадения нет:
|
7 | Запомнить BrandCRLIdentifier и проверить, что перечисленные CRL содержаться в кэше. Если это не так, и перечисленные CRL относятся к элементам, чьи сертификаты использовались для верификации подписи, сообщение игнорируется, так как подпись может быть некорректной. |
8 | Для каждого PResPayload из PresPayloadSeq выполняются следующие действия:
|
Обработка информационных запросов Пара сообщений InqReq/ InqRes позволяет владельцу карты получать информацию о состоянии транзакции. Информационный запрос может быть послан в любое время после запроса PReq, адресованного продавцу. Запросы InqReq могут посылаться многократно. Отклик InqRes имеет тот же формат, что и PRes. Продавец должен проверять, что сертификат, сопровождающий InqRes, соответствует сертификату, использованному с PRes. Это препятствует запросам одного владельца карты о состоянии транзакций других покупок. Владелец карты без сертификатов не подписывает информационные запросы, что означает возможность нарушения целостности сообщения. Владелец карты формирует запрос InqReq следующим образом.
Шаг | Действие |
1 |
|
2 | Если владелец карты послал подписанный PReq, вставить Compose SignedData c InqReqData |
3 | Вставить сообщение в цифровой конверт и послать продавцу |
InqReq | <InqReqSigned, InqReqData> |
InqReqSigned | S(C, InqReqData) |
InqReqData | {TransIDs, RRPID, Chall-C2, [InqRqExtensions]} |
TransIDs | Копируется из самого последнего: PReq, PRes, InqReq |
RRPID | Идентификатор пары запрос/отклик |
Chall-C2 | Новый вызов владельца карты по поводу подписи продавца. |
InqRqExtensions | Информационный запрос не шифруется, по этой причине расширения не должны содержать конфиденциальной информации. |
Шаг | Действие |
1 | Извлекается запрос из входного сообщения |
2 | Если получены данные InqReqData (в противоположность InqReqSigned), проверить, позволяет ли сертификат расчетного центра неподписанные транзакции. Если он этого не допускает, тогда:
|
3 | Если получен InqReqSigned, проверить подпись. Если проверка подписи не прошла:
|
4 | Сравнить TransIDs со значениями из цифрового конверта сообщения. Если равенства нет:
|
5 | Искать транзакцию в базе данных, основанную на TransIDs.XID. Если поиск неудачен:
|
6 | Если PReq был подписан, проверить, что PReq и InqReq подписаны одним и тем же владельцем карты. Если соответствия нет, то:
|
7 | Сформировать PResPayloadSeq |
Авторизация платежей продавца осуществляется согласно схеме, показанной на рис. 4.6.2.17. Рис. 4.6.2.17. Авторизация платежей Процесс авторизации проходит через три состояния. Во время обработки заказа от владельца карты продавец авторизует транзакцию. Программа продавца формирует и цифровым образом подписывает авторизационный запрос, который включает в себя сумму платежа, подлежащую авторизации, идентификатор транзакции из OI и некоторые другие данные. Запрос затем шифруется с использованием нового случайного симметричного ключа, который в свою очередь шифруется общедоступным ключом расчетного центра. Это тот самый ключ, который использовал владелец карты для шифрования цифрового конверта с платежными инструкциями. Запрос авторизации и платежные инструкции владельца карты передаются в расчетный центр. Когда расчетный центр получает авторизационный запрос, он дешифрует цифровой конверт запроса и извлекает из него симметричный ключ. Этот ключ используется для дешифрования текста запроса. Далее верифицируется сертификат подписи продавца срок его действия, а также цифровая подпись. После этого расчетный центр дешифрует цифровой конверт платежных инструкций (PI), откуда извлекается симметричный ключ и информация о счете клиента. Ключ используется для дешифрования PI. Используя общедоступный ключ владельца карты и дайджест OI (включенный в PI), проверяется цифровую подпись, чтобы убедиться, что PI не модифицированы и что они подписаны с использованием секретного ключа владельца карты. Расчетный центр проверяет, что идентификатор транзакции, полученный от продавца, соответствует идентификатору, присланному в PI. При успешном завершении этих проверок расчетный центр формирует и отсылает через финансовую сеть авторизационный запрос эмитенту карты. При получении отклика авторизации от эмитента расчетный центр генерирует и подписывает цифровым образом авторизационный отклик, который содержит отклик эмитента и копию сертификата подписи расчетного центра. Этот отклик может также включать в себя платежный маркер (capture token) с данными, которые будут нужны расчетному центру для обработки платежного запроса.
Платежный маркер вставляется в отклик только в случае, если этого требует банк продавца (Получатель). Отклик шифруется с помощью вновь сформированного секретного симметричного ключа, который в свою очередь шифруется общедоступным ключом продавца. После шифрования отклик посылается продавцу. Когда программа продавца получает авторизационный отклик из расчетного центра (РЦ), она дешифрует цифровой конверт и извлекает оттуда симметричный ключ, посредством которого дешифруется текст отклика. Продавец верифицирует сертификат подписи расчетного центра, а посредством общедоступного ключа РЦ и его цифровую подпись. Продавец запоминает авторизационный отклик и платежный маркер для последующего использования при обработке платежных запросов. Далее продавец может осуществлять доставку товаров или услуг, оговоренных в заказе. Обмен AuthReq/AuthRes возможен как для исключительно авторизованных транзакций, так и транзакций оплаты. Пара запрос/отклик автортизации предоставляет механизм авторизации сделки. В запросе авторизации продавец посылает подписанные и зашифрованные данные о покупке, а также инструкцию PI, полученную от владельца карты. Так как каждая из секций содержит хэш OD и количества (Amount), расчетный центр может проверить то, что владелец карты и продавец договорились о заказе и сумме, которые следует авторизовать. Так как PI включает данные платежной карты, необходимые для авторизации, расчетный центр может выполнить авторизацию, используя существующую финансовую сеть платежной карты. Когда продавец заранее знает, что заказ будет выполняться по частям (несколько поставок), он осуществит несколько шагов AuthReq (по одному для каждой части). Продавец устанавливает в первом AuthReq значение SubsequentAuthInd равным TRUE, что представляет собой указание на авторизацию выполнения первой части заказа. Расчетный центр пришлет в отклике AuthRes значение AuthToken. Продавец будет вынужден выполнить дополнительные запросы AuthReq для реализации последующих этапов выполнения заказа.
В каждое последующее сообщение AuthReq продавец должен включать значение AuthToken из предшествующего отклика расчетного центра. В последнем AuthReq продавец установит значение SubsequentAuthInd равным FALSE. Когда продавец обнаруживает, что заказ будет выполняться поэтапно после отправки AuthReq, он должен послать AuthRevReq, чтобы согласовать число дополнительных авторизаций, и установить SubsequentAuthInd = TRUE, для получения AuthToken в последующих откликах AuthRes. Алгоритм формирования AuthReq представлен ниже.
Шаг | Действие |
1 | Сгенерировать AuthTags (см. табл. ниже) |
2 | Сгенерировать HOD2 путем хэширования OD, PurchAmt, ODSalt, ODExtensions и, если имеется, InstallRecurData. Расчетный центр сравнит его значение с полученным в PI. |
3 | Сгенерировать AuthReqPayload (см. табл. ниже) |
4 | Опционно для одновременной авторизации и резервирования заказа:
|
5 | Включить CheckDigest с вычисленными продавцом H(OIData) и HOD2. H(PIData) копируется продавцом из PReq. Это поле опускается, если запрос AuthReq представляет последовательную авторизацию, базирующуюся на присланном из расчетного центра коде AuthToken. |
6 | Рекомендуется заполнить MThumbs путем вычисления оттисков сертификатов и CRL, хранимых продавцом. Продавец должен внести в сообщение оттиски, которые могут потребоваться позднее для верификации подписи и сертификатов расчетного центра. |
7 | Осуществить EncB-инкапсуляцию |
8 | Включить сертификаты подписи и шифрования отправителя и всей цепи сертификации вплоть до сертификата платежной системы. |
9 | Поместить сообщение в цифровой конверт и отправить адресату |
Шаг | Действие |
1 | Заполнить поле AuthRRTags (см. табл. 4.6.2.52) |
2 | Заполнить поле TransIDs. Если это последовательная авторизация и определено PaySysID, занести его значение в поле PaySysID. |
3 | Если это многоэтапный платеж и банк продавца задал для авторизации значение AuthRetNum, скопировать AuthRetNum из предыдущего AuthRes |
Схема формирования поля данных AuthReq показана ниже.
Шаг | Действие |
1 | Если планируется обработка последовательных авторизаций для покупки и это не последняя авторизация, установить SubsequentAuthInd равным TRUE, в противном случае FALSE. |
2 | Если продавец и владелец карты договорились о рекуррентных или поэтапных платежах, заполнить поле InstallRecurData |
3 | Установить AuthReqAmt равным числу авторизаций |
4 | Опционно присвоить CardSuspect соответствущее значение, если продавец имеет какие-то подозрения относительно владельца карты. |
5 | Если при некотором платеже необходимы данные MerchData, добавить их в сообщение. |
6 | Сформировать MarketSpecAuthData, если это диктуется платежной системой карты или типом покупки. |
7 | Если политика платежной системы карты требует наличия AVSData, записать в это поле информацию, предоставленную владельцем карты. |
8 | Если политика платежной системы карты требует наличия SpecialProcessing, сгенерировать его значение. |
9 | Если продавец требует информацию о типе платежной карты, установить RequestCardTypeInd = TRUE. |
AuthReq | EncB(M, P, AuthReqData, PI) |
AuthReqData | {AuthReqItem, [Mthumbs], CaptureNow, [SaleDetail]} |
PI | См. табл. 4.6.2.39. |
AuthReqItem | {AuthTags, [CheckDigests], AuthReqPayload} |
MThumbs | Оттиски сертификатов, CRL и BrandCRLIdentifiers, хранимые в данный момент в кэше продавца. |
CaptureNow | Булева переменная, указывающая, что резервирование должно проводиться, если проведена авторизация. |
SaleDetail | См. табл. 4.6.2.47 |
AuthTags | {AuthRRTags, TransIDs, [AuthRetNum]} |
CheckDigests | {HOIData, HOD2}используется расчетным центром для аутентификации PI. Опускается, если PI = AuthToken |
AuthReqPayload | См. табл. 4.6.2.65 |
AuthRRTags | RRTags Необходим RRPID, так как для одного PReq может потребоваться более одного цикла авторизации. |
TransIDs | Копируется из соответствующего поля OIData (см. табл. 4.6.2.59) |
AuthRetNum | Идентификация запроса авторизации, используемого в пределах финансовой сети. |
HOIData | DD(OIData) (См. табл. 4.6.2.59) Независимый хэш, вычисляемый продавцом. Расчетный центр сравнивает это значение с копией, сформированной владельцем карты в PI. |
HOD2 | DD(HODInput) (См. табл. 4.6.2.59) Вычисляется независимо продавцом. Расчетный центр сравнивает это значение с копией, сформированной владельцем карты в PI. |
Структура данных AuthReqPayload представлена в таблице 4.6.2.65. Таблица 4.6.2.65. Структура AuthReqPayload
AuthReqPayload | {SubsequentAuthInd, AuthReqAmt, [AVSData], [SpecialProcessing], [CardSuspect], RequestCardTypeInd, [InstallRecurData], [MarketSpecAuthData], MerchData, [ARqExtensions]} |
SubsequentAuthInd | Булева переменная, указывающая на запросы со стороны продавца дополнительной авторизации из-за раздельной поставки |
AuthReqAmt | Может отличаться от PurchAmt; политика банка продавца может наложить ограничение на допустимое отличие |
AVSData | {[StreetAddress], Location} Адрес счета владельца карты: содержимое получается от владельца карты посредством механизмов, выходящих за пределы SET. |
SpecialProcessing | Числовое поле, указывающее тип запрошенной обработки |
CardSuspect | Числовое поле, указывающее, что продавец подозревает владельца карты, и на причину подозрения |
RequestCardTypeInd | Указывает, что тип карты должен быть прислан в поле CardType отклика. Если информация недоступна, присылается значение unavailable(0). |
InstallRecurData | См. табл. 4.6.2.41. |
MarketSpecAuthData | < MarketAutoAuth, MarketHotelAuth, MarketTransportAuth > Специфические авторизационные данные рынка |
MerchData | {[MerchCatCode], [MerchGroup]} |
ARqExtensions | Данные в расширении авторизационного запроса должны иметь финансовый характер и относиться к процессу авторизации (или последующей оплаты заказа) расчетного центра, финансовой сети или эмитента карты. |
StreetAddress | Адрес улицы владельца карты |
MarketAutoAuth | {Duration} |
MarketHotelAuth | {Duration, [Prestige]} |
MarketTransportAuth | {} В настоящее время нет авторизационных данных для этого сегмента рынка |
MerchCatCode | 4-байтовый код (определен в ANSI X9.10), описывающий тип бизнеса, продукта или услуги продавца. |
MerchGroup | Числовой код, идентифицирующий общую категорию продавца |
Duration | Ожидаемая длительность транзакции (в днях). Эта информация помогает понять, какое время пройдет со времени авторизации до оплаты заказа (capture). |
Prestige | Числовой тип приоритета, определяется платежной системы карты. |
Шаг | Действие |
1 | Извлечь запрос из транспортного сообщения |
2 | Дешифровать PI |
3 | Сравнить TransIDs из AuthTags и PIHead или AuthToken:
|
4 | Если PI является AuthToken:
|
5 | Проверить состояние авторизации PI. Если PI была обработана и не отвергнута или отозвана, отвергнуть авторизацию, послав AuthCode = piPreviouslyUsed |
6 | Обработать PIHead:
|
7 | Если в AuthReq имеется InstallRecurData, проверить, что InstallRecurData в AuthReqPayload и в PIHead совпадают. Если это не так, отклонить авторизацию с AuthCode = InstallRecurMismatch. |
8 | Запомнить AcqBackInfo в безопасной локальной памяти, если таковая имеется. |
9 | Если captureNow=TRUE и платежная система не поддерживает этот режим, послать AuthCode = captureNotSupported |
10 | Выполнить авторизацию через финансовую сеть платежной карты |
11 | Если captureNow=TRUE, выполнить платеж через существующую финансовую сеть платежной карты |
12 | Продолжить формирование сообщения AuthRes |
Отклик AuthRes генерируется после завершения авторизации через финансовую сеть платежной карты. AuthCode и AuthAmt извлекаются из данных, полученных через финансовую сеть платежной карты. Формирование отклика AuthRes производится по схеме, изложенной в нижеприведенной таблице.
Шаг | Действие |
1 | Получить необходимые данные от авторизационного процесса |
2 | Заполнить поле AuthTags из AuthReq. Если это необходимо, занести в поле AuthRetNum, значение, полученное из авторизационного процесса. |
3 | Заполнить текущее значение BrandCRLIdentifier, хранимое расчетным центром, если для текущего BrandCRLIdentifier не получен оттиск или он устарел. |
4 | Если Mthumbs из AuthReq указывает, что продавцу нужен новый Cert-PE шифрования информации для расчетного центра:
|
5 | Заполнить поле PaySysID в TransIDs, если они получены из авторизационного процесса |
6 | Заполнить поле PANToken, если это необходимо для сертификата продавца, |
7 | Заполнить AuthResBaggage (опционно):
|
8 | Опционно заполнить BatchStatus, как этого требует политика платежной системы карты. |
9 | Если PANToken имеется, реализовать EncBX-инкапсуляцию |
10 | Вставить сообщение в цифровой конверт и отправить владельцу карты |
Шаг | Действие |
1 | Сгенерировать CapResPayload |
Заполнить AuthCode и AuthAmt c привлечением результатов авторизационного процесса
| |
3 | Заполнить поле CurrConv в соответствии с запрошенным владельцем карты типом валюты и с учетом текущего курса, если специфицирована валюта, отличная от используемой владельцем карты. |
4 | Заполнить ResponseData:
|
AuthRes | <EncB(P, M, AuthResData, AuthResBaggage), EncBX(P, M, AuthResData, AuthResBaggage, PANToken)> |
AuthResData | {AuthTags, [BrandCRLIdentifier], [PEThumb], AuthResPayload} |
AuthResBaggage | {[CapToken], [AcqCardMsg], [AuthToken]} |
PANToken | См. табл. 4.6.2.46. Посылается, если сертификат продавца указывает на то, что информация предназначена продавцу. |
AuthTags | Копируется из соответствующего AuthReq; TransIDs и AuthRetNum могут быть актуализованы с привлечением текущей информации |
BrandCRLIdentifier | Список текущих CRL для всех СА в зоне ответственности СА платежной системы. |
PEThumb | Оттиск сертификата расчетного центра предоставляется, если AuthReq.Mthumbs указывает то, что он нужен продавцу |
AuthResPayload | См. табл. 4.6.2.67. |
CapToken | См. табл. 4.6.2.44. |
AcqCardMsg | Если владелец карты включил AcqBackKeyData в PIHead, расчетный центр может послать это поле продавцу в шифрованном сообщении для владельца карты. Продавец должен скопировать AcqCardMsg в любой последующий отклик PRes или InqRes, посылаемый владельцу карты. |
AuthToken | Продавец использует это поле в качестве PI в последующих запросах AuthReq. См. табл. 4.6.2.42. |
Структура AuthResPayload представлена ниже в таблице 4.6.2.67. Таблица 4.6.2.67. Структура AuthResPayload
AuthResPayload | {AuthHeader, [CapResPayload], [ARsExtensions]} |
AuthHeader | {AuthAmt, AuthCode, ResponseData, [BatchStatus], [CurrConv]} |
CapResPayload | Присылается, если CaptureNow имеет значение TRUE в AuthReq. См. табл. 4.6.2.71. |
ARsExtensions | Данные в расширении к авторизационному отклику должны быть финансовыми и существенными для обработки авторизационного отклика. |
AuthAmt | Копируется из AuthReqPayload.AuthReqAmt |
AuthCode | Числовой код, индицирующий результат процесса авторизации |
ResponseData | {[AuthValCodes], [RespReason], [CardType], [AVSResult], [LogRefID]} |
BatchStatus | См. табл. 4.6.2.53. |
CurrConv | {CurrConvRate, CardCurr} |
AuthValCodes | {[ApprovalCode], [AuthCharInd], [ValidationCode], [MarketSpecDataID]} |
RespReason | Числовой код, который указывает на объект сервиса авторизации и причину отказа (если таковая имеется) |
CardType | Числовой код, который указывает на тип карты, использованной для транзакции. |
AVSResult | Числовой код отклика адресной верификационной службы |
LogRefID | Алфавитно-цифровые данные, ассоциируемые с авторизационной транзакцией (используется для распознавания при отзыве предшествующего запроса) |
CurrConvRate | Курс обмена валюты. Значение, на которое нужно умножить AuthReqAmt, чтобы получить сумму в валюте владельца карты. |
AuthReqAmt | Код валюты владельца карты в стандарте ISO 4217 |
ApprovalCode | Код одобрения, присваиваемый транзакции эмитентом |
AuthCharInd | Числовое значение, которое указывает условия, при которых выполнена авторизация. |
ValidationCode | 4-байтовый алфавитно-цифровой код, вычисленный, чтобы гарантировать, что необходимые поля авторизационных сообщений присутствуют в соответствующих клиринговых сообщениях. |
MarketSpecDataID | Числовой код, который указывает тип данных, специфических для рынка, представляемых при авторизации (как это определено финансовой сетью) |
approved | Запрос авторизации удовлетворен |
unspecifiedFailure | Запрос авторизации не может быть обработан по причине, которая отсутствует в приведенном здесь списке. |
declined | Запрос авторизации отклонен |
noReply | Эмитент не откликнулся на запрос авторизации. Это значение часто указывает на временное отсутствие доступа к системе обработки данных эмитента. |
callIssuer | Эмитент запрашивает телефонный вызов от продавца |
amountError | Такое число транзакций не может быть обработано системой (банком продавца, финансовой сетью, эмитентом и т.д.) |
expiredCard | Срок действия карты истек |
invalidTransaction | Запрос не может быть обработан последующей системой (банком продавца, финансовой сетью, эмитентом и т.д.), так как тип транзакции является недопустимым. |
systemError | Запрос не может быть обработан последующей системой (банком продавца, финансовой сетью, эмитентом и т.д.), так как запрос содержит в себе некорректные данные. |
piPreviouslyUsed | Платежная инструкция (PI) в запросе авторизации использовалась для первичной авторизации (отклик, сформированный расчетным центром). |
recurringTooSoon | Минимальное время между авторизациями для рекуррентной транзакции еще не истекло (отклик, сформированный расчетным центром). |
recurringExpired | Дата истечения действия для рекуррентной транзакции наступила (отклик, сформированный расчетным центром) |
piAuthMismatch | Дата в PI от владельца карты не согласуется с данными в OD от продавца. |
installRecurMismatch | InstallRecurData в PI от владельца карты не согласуется с InstallRecurData в OD от продавца. |
captureNotSupported | Расчетный центр не поддерживает платеж (capture). |
signatureRequired | Опция неподписанной PI не поддерживается расчетным центром для данной платежной системы. |
cardMerchBrandMismatch | Платежная система в сертификате подписи владельца карты не согласуется с платежной системой сертификата шифрования расчетного центра. |
Обработка продавцом отклика AuthRes производится следующим образом.
Шаг | Действие |
1 | Получить отклик из входного сообщения |
2 | Извлечь запись транзакции и сравнить с AuthTags:
|
3 | Если в сообщение включен BrandCRLIdentifier, запомнить CRL. |
4 | Обработать AuthResPayload |
5 | Проверить, что GKThumb соответствует существующему сертификату шифрования расчетного центра, если GKThumb имеется. Если соответствия нет, актуализовать кэш сертификата с использованием текущего сертификата |
6 | Если BatchStatus присутствует, обработать и запомнить данные. |
7 | Обработать AuthResBaggage:
|
8 | Если присутствует PANToken, записать его в безопасную локальную память |
9 | Продолжить обработку оплаты заказа и/или отклика на покупку, в зависимости от результатов авторизации и временных рамок продавца для возвращения отклика на покупку. |
Шаг | Действие |
1 | Обработать ARsExtensions, если они имеются. Если неподдерживаемое расширение помечено как критическое, расчетный центр производит запись в журнал Error = unrecognizedExtension, а сообщение игнорируется. |
2 | Обрабатать CapResPayload:
|
3 | Если имеется CurrConv, запомнить его для переадресации владельцу карты |
4 | Обработать AuthCode, AuthAmt и ResponseData:
|
Последний вариант называется referral (откладывание) и индицируется значением callissuer(4) в AuthCode. При получении отклика referral продавец может обратиться в свой банк по телефону (вне пределов протокола SET). После идентификации транзакции банк свяжет продавца с эмитентом. В результате этого телефонного вызова эмитент может преобразовать авторизацию в одобрение путем посылки продавцу кода ApprovalCode. Программное обеспечение продавца позволяет оператору сервера продавца вводить код одобрения. Последующая обработка транзакции будет производиться так, как если бы кодом отклика был approved(0). При этом код отклика не переписывается. Программа расчетного центра обрабатывает отложенные авторизации как одобрение за исключением случаев, когда AuthCode = callIssuer и когда оплата (capture) не осуществляется, до тех пор пока продавец не получит от эмитента кода ApprovalCode. Программа расчетного центра обрабатывает все последующие сообщения для транзакций, как если бы транзакция была одобрена, при условии посылки продавцом корректного кода ApprovalCode. Запрос авторизации несет в себе необходимую информацию от продавца к расчетному центру для формирования сообщения-запроса авторизации, которое может быть обработано банком продавца. Отклик на запрос авторизации несет в себе информацию от расчетного центра, относящуюся к обработке запроса авторизации. Пары сообщений AuthRevReq/AuthRevRes (Autorization Reversal Request/Response) используются только для сокращения или аннулирования полученной ранее авторизации. Эта пара опционных сообщений не может применяться для ликвидации разделения авторизации, выполненной ранее. Необходимость разделения авторизации возникает тогда, когда поставка в рамках сделки должна быть выполнена поэтапно. Данные сообщения могут посылаться когда угодно после авторизации и до осуществления платежа (capture). Для реализации разделения или ликвидации авторизации продавец посылает запрос AuthRevReq, который уменьшает значение AuthAmt и устанавливает переменную SubsequentAuthInd = TRUE.
Расчетный центр возвращает AuthToken в отклике AuthRevRes. Маркер AuthToken будет использоваться для авторизации покупок при последующих частичных поставках. Запрос/отклик платежа (CapReq/CapRes) Пара сообщений CapReq/CapRes предоставляет механизм выполнения платежа. Обмен этими сообщениями происходит между продавцом и расчетным центром. Транзакция обработки платежных запросов проходит через три состояния (см. рис. 4.6.2.18). Рис. 4.6.2.18. Обработка платежных запросов После завершения обработки заказа владельца карты продавец осуществляет запрос платежа. Между запросами авторизации и запросом платежа может быть достаточно большая задержка. Программа продавца генерирует платежный запрос, снабженный цифровой подписью. Этот запрос содержит итоговую сумму транзакции, ее идентификатор из OI и другую информацию о транзакции. Запрос шифруется с использованием вновь сформированного симметричного ключа, который в свою очередь шифруется с привлечением общедоступного ключа расчетного центра. Запрос платежа и опционно платежный маркер (capture token), если таковой был включен в авторизационный отклик, пересылаются в расчетный центр. В общем случае в одном сообщении может быть заключено несколько платежных запросов. Когда расчетный центр получает запрос платежа, он дешифрует цифровой конверт, извлекает из него симметричный ключ и дешифрует с его помощью текст платежного запроса. Далее посредством общедоступного ключа продавца верифицируется его цифровая подпись. Расчетный центр дешифрует платежный маркер (если таковой имеется) и использует платежный запрос и маркер для формирования клирингового запроса, который направляется эмитенту карты через платежную систему кредитной карты. После этого расчетный центр генерирует платежный отклик, снабженный цифровой подписью. Этот отклик содержит в себе копию сертификата подписи расчетного центра. Отклик шифруется с использованием нового симметричного ключа и переправляется продавцу. Когда продавец получает платежный отклик из расчетного центра (РЦ), он дешифрует цифровой конверт, извлекает из него симметричный ключ и с его помощью дешифрует полученный текст отклика.
Далее верифицируется сертификат подписи расчетного центра и цифровая подпись РЦ. Продавец запоминает платежный отклик для последующего использования при контроле платежей, поступающих из его банка. Пары запросов CapReq/CapRes предоставляют механизм завершения ранее авторизованного денежного платежа. Размер платежа определяется на фазе обмена авторизационными сообщениями. Продавец не должен посылать запрос CapReq для ранее успешно прошедших платежей. Возможно осуществление платежей с помощью пар сообщений, выходящих за пределы протокола SET. Формирование запроса CapReq продавцом осуществляется следующим образом.
Шаг | Действие |
1 | Заполнить поле CapRRTags |
2 | Опционно заполнить поля AuthReqData и AuthResPayload. Процедура опускается, если информация содержится в CapToken |
3 | Рекомендуется заполнить MThumbs всех сертификатов для расчетного центра, куда посылается это сообщение, для CRL и для BrandCRLIdentifier |
4 | Заполнить один или более CapItem в CapSeq следующим образом. Для каждого CapItem:
|
5 | Заполнить CapTokSeq с помощью CapToken из соответствующих сообщений AuthRes, полностью тождественных с CapItem в CapSeq. Если CapToken для транзакции отсутствует, заносится нуль. |
6 | В дополнительные позиции инкапсуляции EncBX заносятся PANToken, если продавец получил PANToken |
7 | Опционно заполняется CRqExtensions |
8 | Если включено PANToken, использовать EncBХ-инкапсуляцию |
9 | Если PANToken не включено, использовать EncB-инкапсуляцию |
10 | Вложить сообщение в цифровой конверт и послать владельцу карты |
Шаг | Действие |
1 | Занести в поле CapDate текущее значение даты |
2 | Занести в CapReqAmt сумму выплаты |
3 | Скопировать AuthResPayload из соответствующего AuthRes |
4 | Опционно заполнить CPayExtensions |
Формат CapReq
CapReq | <EncB(M, P, CapReqData, CapTokenSeq), EncBX(M, P, CapReqData, CapTokenSeq, PANToken)> CapTokenSeq является внешним “багажом”. Если имеется маркер PANToken, он должен соответствовать одному CapItem и одному CapToken в CapTokenSeq. |
CapReqData | {CapRRTags, [MThumbs], CapItemSeq, [CRqExtensions]} |
CapTokenSeq | {[CapToken] +} Один или более CapTokens, соответствующие один-в-один CapItems в CapItemSeq. Любой CapToken может быть опущен, т.е. может равняться нулю. |
PANToken | См. табл. 4.6.2.46. |
CapRRTags | RRTags. Новый RRPID и Date |
MThumbs | Оттиски сертификатов, CRL и BrandCRLIdentifier, хранящиеся в кэше продавца. |
CapItemSeq | {CapItem +} Один или более CapItem в упорядоченном массиве |
CRqExtensions | Данные в расширении запроса платежа (capture) должны иметь финансовый характер и быть существенными для сообщения capture, посланного расчетному центру, финансовой сети или эмитенту. Данные в этом расширении относятся ко всем позициям запроса оплаты capture. Данные, относящиеся к специфическим позициям, должны помещаться в CapPayload |
CapToken | Копируется из соответствующего AuthRes или AuthRevRes |
CapItem | {TransIDs, AuthRRPID, CapPayload} |
TransIDs | Копируется из соответствующего AuthRes или AuthRevRes |
AuthRRPID | RRPID, который появляется в соответствующем AuthReq или AuthRev |
CapPayload | См. табл. 4.6.2.69. |
CapPayload | {CapDate, CapReqAmt, [AuthReqItem], [AuthResPayload], [SaleDetail], [CPayExtensions]} |
CapDate | Дата платежа - это дата транзакции, которая появится в уведомлении владельца карты. |
CapReqAmt | Сумма платежа, затребованная продавцом, может отличаться от AuthAmt. Это сумма транзакции (до конвертации валюты), которая появится в уведомлении владельца карты. |
AuthReqItem | См. табл. 4.6.2.64. Поле необходимо, если соответствующий маркер CapToken отсутствует или система расчетного центра/банка продавца не содержит подходящих данных для авторизационного запроса. |
AuthResPayload | См. табл. 4.6.2.67. Поле необходимо, если соответствующий маркер CapToken отсутствует или система расчетного центра/банка продавца не содержит подходящих данных для авторизационного отклика. |
SaleDetail | См. табл. 4.6.2.47. |
CPayExtensions | Данные в расширении запроса платежа (capture) должны иметь финансовый характер и быть существенными для сообщения capture, посланного расчетному центру, финансовой сети или эмитенту. Данные этого расширения приложимы к индивидуальным позициям платежного запроса. Данные, относящиеся ко всему запросу, помещаются в расширение CapReqData. |
Расчетный центр, получив запрос CapReq, обрабатывает его следующим образом.
Шаг | Действие |
1 | Извлечь запрос из входного сообщения |
2 | Обработать CRqExtensions. Если какое-либо неподдерживаемое расширение имеет критический флаг, отбросить сообщение, послав сообщение Error = unrecognizedExtension |
3 | Для каждого CapItem обработать платеж и сформировать CapResItem с суммой из обрабатываемого платежа и кодом CapCode, соответствующим успеху или неудаче:
|
Шаг | Действие |
1 | Обработать CPayExtensions. Если неизвестное расширение помечено как критическое, сообщение отвергается и возвращается сообщение Error unrecognizedExtension |
2 | Запомнить SaleDetail |
3 | Проверить, что BatchID является открытой платежной линией для BrandAndBIN.
|
4 | Проверить, что идентификатор BatchSequenceNum является уникальным в рамках платежной линии. Если идентификатор не уникален, отклонить платеж путем возвращения CapCode = batchUnknown. |
Расчетный центр формирует отклик CapRes согласно следующему алгоритму.
Шаг | Действие |
1 | Получить данные о платеже от платежного процесса |
2 | Скопировать CapRRTags из CapReq |
3 | Заполнить текущее значение BrandCRLIdentifier, имеющееся в расчетном центре, если оттиск для текущего BrandCRLIdentifier не получен или устарел. |
4 | Если MThumbs указывают, что продавцу для шифрования информации нужен новый Cert-PE:
|
5 | Опционно занести в поле BatchSequenceNum состояние текущих платежных линий |
6 | Скопировать BatchID и BatchSequenceNum из SaleDetail в CapResPayload |
7 | Заполнить CapResSeq. Для каждого CapItem в соответствующем CapReq заполнить CapResItem следующим образом:
|
8 | Опционно заполнить CRsExtensions |
9 | Вставить сообщение в цифровой конверт и послать продавцу |
Шаг | Действие |
1 | Заполнить CapCode и CapAmt результатами обработки соответствующего CapReqItem |
2 | Скопировать BatchID и BatchSequenceNum из соответствующего CapReqItem |
3 | Опционно заполнить CRsPayExtensions |
CapRes | Enc(P, M, CapResData) |
CapResData | {CapRRTags, [BrandCRLIdentifier], [PEThumb], [BatchStatusSeq], CapResItemSeq, [CRsExtensions]} |
CapRRTags | RRTag>s; копируется из CapReq |
BrandCRLIdentifier | Список текущих CRL для всех СА в области ответственности платежной системы СА. |
PEThumb | Оттиск сертификата расчетного центра, предоставляемый, если CapReqData.Mthumbs указывает на то, что продавец в нем нуждается. |
BatchStatusSeq | {BatchStatus +} |
CapResItemSeq | {CapResItem +} Заказ соответствует CapReq |
CRsExtensions | Данные в расширении платежного отклика должны иметь финансовый характер и быть важными для осуществления платежа или последующего возврата денег. |
BatchStatus | См. табл. 4.6.2.53. |
CapResItem | {TransIDs, AuthRRPID, CapResPayload} |
TransIDs | Копируется из соответствующего CapReq |
AuthRRPID | RRPID, который появился в соответствующем AuthReq или AuthRevReq, копируется из соответствующего CapReq |
CapResPayload | См. табл. 4.6.2.71. |
Структура данных CapResPayload представлена в таблице 4.6.2.71. Таблица 4.6.2.71. Структура CapResPayload
CapResPayload | {CapCode, CapAmt, [BatchID], [BatchSequenceNum], [CRsPayExtensions]} |
CapCode | Цифровой код, указывающий на состояние платежа |
CapAmt | Копируется из соответствующего CapReq |
BatchID | Идентификатор для установления платежной линии между продавцом и его банком. Копируется из соответствующего CapReq |
BatchSequenceNum | Порядковый номер позиции в текущей последовательности платежей; копируется из соответствующего CapReq |
CRsPayExtensions | Данные в расширении поля данных платежного отклика должны иметь финансовый характер и быть важными для осуществления платежа ли последующего возврата денег. |
Шаг | Действие |
1 | Извлекается отклик из входного сообщения |
2 | Обрабатывается CRsExtensions, если таковые имеются. Если не узнанное расширение помечено как критическое, в рабочий журнал заносится запись Error = unrecognizedExtension, а сообщение CapRes отбрасывается |
3 | Извлекается запись транзакции и производится сравнение CapRRTags:
|
4 | Если в сообщение включен BrandCRLIdentifier, запомнить все CRL. |
5 | Проверить, что GKThumb согласуется с сертификатом шифрования платежного центра (если GKThumb имеется). Если это не так, актуализовать кэш сертификата с использованием текущего сертификата. |
6 | Для каждого CapResItem в CapResSeq:
|
7 | Если BatchStatusSeq присутствует, обработать и запомнить каждое значение BatchStatus |
success | Платежная позиция обработана расчетным центром успешно |
unspecifiedFailure | Причина неудачи неизвестна |
duplicateRequest | Платежный запрос для данной транзакции уже был обработан (для XID и AuthRRPID) |
authExpired | Авторизационный запрос был обработан слишком давно в прошлом. Это время определяется политикой платежной системы карты. |
authDataMissing | В платежном запросе отсутствует авторизационная информация |
invalidAuthData | Авторизационная информация для данной транзакции некорректна |
capTokenMissing | Для обработки данной позиции необходимо поле CapToken, а его нет |
invalidCapToken | Поле CapToken некорректно для данной транзакции |
batchUnknown | Расчетный центр не знает о существовании платежной линии для данной позиции |
batchClosed | Платежная линия для данной позиции закрыта |
unknownXID | Не распознан идентификатор XID |
unknownLID | Не распознан идентификатор LID |
Сообщения отзыва платежа и кредита синтактически идентичны и выполняют сходную функцию. Алгоритм формирования информационной структуры CapRevOrCredReqData продавцом представлен ниже.
Шаг | Действие |
1 | Сформировать CapRevOrCredRRTags с новым RRPID и текущей датой. |
2 | Рекомендуется заполнить MThumbs путем вычисления оттисков сертификатов и CRL, имеющихся у продавца. Продавец должен заполнить оттиски в сообщении, которые могут быть затем нужны для верификации подписей и сертификатов, присылаемых расчетным центром. |
3 | Заполнить одну или более позиций в CredRevOrCredReqItems:
|
4 | Опционно заполнить CRvRqExtensions |
CapRevOrCredReqData | {CapRevOrCredRRTags, [MThumbs], CapRevOrCredReqItemSeq, [CRvRqExtensions]} |
CapRevOrCredRRTags | RRTags.Новый идентификатор RRPID и Date для данной пары. |
MThumbs | Оттиски сертификатов, CRL и BrandCRLIdentifier, хранящиеся в кэше продавца |
CapRevOrCredReqItemSeq | {CapRevOrCredReqItem +}Один или более CapRevOrCredReqItem в виде упорядоченного массива |
CRvRqExtensions | Данные расширения отзыва платежа или запроса кредита должны иметь финансовый характер и играть важную роль для обработки этих сообщений расчетным центром или эмитентом. |
CapRevOrCredReqItem | {TransIDs, AuthRRPID, CapPayload, [NewBatchID], CapRevOrCredReqDate, [CapRevOrCredReqAmt], NewAccountInd, [CRvRqItemExtensions]} |
TransIDs | Копируется из соответствующего CapRes.Поле необходимо, если соответствующий маркер CapToken отсутствует или не содержит подходящих данных авторизационного запроса |
CapPayload | См. табл. 4.6.2.69 |
NewBatchID | Это поле специфицирует новый идентификатор платежной линии; оно используется для запросов отзыва платежа для позиций, реализованных в рамках платежной линии, которая была закрыта. BatchID >в CapPayload идентифицирует исходную платежную линию. |
CapRevOrCredReqDate | Дата подачи запроса |
CapRevOrCredReqAmt | В кредитных запросах сумма запрашиваемого кредита, которая может отличаться от AuthAmt в CapToken и CapReqAmt в CapPayload |
NewAccountInd | Указывает, что новый номер счета специфицирован в PANToken; когда это поле установлено, новый номер счета будет записан поверх информации о старом номере счета в CaptureToken или авторизационных данных, хранимых банком продавца. Использование этого поля является предметом политики платежной системы карты или банка продавца. |
CRvRqItemExtensions | Данные в расширении поля данных отзыва платежа или запроса кредита должны иметь финансовый характер и быть важными для осуществления отзыва платежа или кредита расчетным центром |
Расчетный центр обрабатывает CapRevOrCredReqData следующим образом.
Шаг | Действие |
1 | Обрабатываются CRvRqxtensions. Если неподдерживаемое расширение помечено как критическое, возвращается отклик Error = unrecognizedExtensions, а обрабатываемое сообщение отбрасывается. |
2 | Обрабатывается каждое CapRevOrCredItem:
|
3 | На основе TransIDs в AuthRevTags извлекается запись транзакции. |
Шаг | Действие |
1 | Заполнить поле CapRevOrCredTags |
2 | Заполнить текущий BrandCRLIdentifier, хранимый расчетным центром, если оттиск BrandCRLIdentifier не получен или устарел. |
3 | Если Mthumb указывает, что продавец нуждается в новом Cert-PE при шифровании информации для расчетного центра, то:
|
4 | Опционно ввести BatchStatus в поле BatchStatusSeq для каждой платежной линии, чье состояние запрошено. |
5 | Для каждой позиции в соответствующем CapRevOrCredItems заполнить поле CapRevOrCredResItem следующим образом:
|
6 | Опционно заполнить CRvRsExtensions |
Структура CapRevOrCredResData
CapRevOrCredResData | {CapRevOrCredRRTags, [BrandCRLIdentifier], [PEThumb], [BatchStatusSeq], CapRevOrCredResItemSeq, [CRvRsExtensions] |
CapRevOrCredRRTags | RRTags; копируется CapRevOrCredRRTags из соответствующего поля CapRevOrCredReqData |
BrandCRLIdentifier | Список текущих CRL для всех СА в зоне ответственности СА платежной системы. |
PEThumb | Оттиск сертификата расчетного центра, поставляемого, если CapRevOrCredReq.MThumbs указывает, что продавец в нем нуждается |
BatchStatusSeq | {BatchStatus +} |
CapRevOrCredResItemSeq | {CapRevOrCredResItem +} Один или более CapRevOrCredResItem в упорядоченном массиве |
CRvRsExtensions | Данные в расширении поля данных отклика на запрос отзыва платежа или кредита должны иметь финансовый характер и быть важными для осуществления отзыва платежа или кредита расчетным центром |
BatchStatus | См. табл. 4.6.2.53. |
CapRevOrCredResItem | {TransIDs, AuthRRPID, CapRevOrCredResPayload} |
TransIDs | Копируется из соответствующего CapRevOrCredReqData.AuthReqData.AuthTags |
AuthRRPID | RRPID, который появляется в соответствующем AuthReq или AuthRevReq |
CapRevOrCredResPayload | См. табл. 4.6.2.74 |
CapRevOrCredResPayload | {CapRevOrCredCode, CapRevOrCredActualAmt, [BatchID], [BatchSequenceNum], [CRvRsPayExtensions]} |
CapRevOrCredCode | Числовой код, характеризующий состояние отзыва платежа или кредита. |
CapRevOrCredActualAmt | Копируется из соответствующего CapRevOrCredReqItem. |
BatchID | Идентификатор платежной линии сделки для банка продавца |
BatchSequenceNum | Порядковый номер позиции в последовательности платежей |
CRvRsPayExtensions | Расширение поля данных отклика на запрос отзыва платежа или кредита должны иметь финансовый характер и быть важными для обработки отклика на отзыв платежа или кредит. |
success | Позиция была успешно обработана расчетным центром |
unspecifiedFailure | Причина неудачи не специфицирована |
duplicateRequest | Запрос отзыва платежа или кредита для данной транзакции был уже обработан (XID и AuthRRPID) |
originalProcessed | Запрос платежа для данной позиции был уже обработан |
originalNotFound | Специфицированная позиция расчетным центром не обнаружена |
capPurged | Информация о платеже была удалена из памяти транзакций расчетного центра |
missingCapData | Информация о платеже отсутствует в запросе отзыва платежа или кредита |
missingCapToken | Необходимый для обработки данной позиции маркер CapToken отсутствует в запросе отзыва платежа или кредита |
invalidCapToken | Маркер CapToken некорректен |
batchUnknown | Платежная линия для данной позиции расчетному центру неизвестна |
batchClosed | Платежная линия для данной позиции уже закрыта |
Шаг | Действие |
1 | Обработать CRvRsExtensions. Если какое-то нераспознанное расширение помечено как критическое, сообщение отбрасывается и посылается отклик Error = unrecognizedExtension. |
2 | Обработать CapRevOrCredTags |
3 | Извлечь запомненную запись транзакции и обработать TransIDs следующим образом:
|
4 | Если в сообщение включен BrandCRLIdentifier, запомнить CRL. |
5 | Проверить, что GKThumb согласуется с существующим сертификатом шифрования расчетного центра, если GKThumb присутствует. Если соответствия нет, актуализовать кэш сертификата с использованием текущего сертификата. |
6 | Для каждого BatchStatus в batchStatusSeq обработать BatchStatus и запомнить результат |
7 | Обработать каждый CapRevOrCredResItem в CapRevOrCredResItems следующим образом
|
Пара сообщений CapRevReq/ CapRevRes служит для сокращения или аннулирования суммы предшествующего платежа. Они используются после осуществления оплаты и до того, как записи платежа продавца и его банка устареют. Обмен такими сообщениями носит опционный характер. Сообщение CapRevReq может быть послано когда угодно после запроса платежа, направленного расчетному центру. Структура данных в запросе CapRevReq представлена в таблице 4.6.2.75. Таблица 4.6.2.75. Структура CapRevReq
CapRevReq | <EncB(M, P, CapRevData, CapTokenSeq), EncBX(M, P, CapRevData, CapTokenSeq, PANToken)> CapTokenSeq является внешним “багажом”. Если PANToken содержится в сообщении, поле должно соответствовать одной записи в CapRevData.CapRevOrCredReqItemSeq и одному маркеру CapToken в CapTokenSeq |
CapRevData | CapRevOrCredReqData |
CapTokenSeq | {[CapToken] +}Один или более CapTokens, при полном соответствии последовательности CapRevOrCredReqItem в CapRevOrCredReqData.CapRevOrCredReqItemSeq. Заметим, что только маркер CapToken может быть опущен; т.е., может быть нулем (NULL) |
PANToken | См. табл. 4.6.2.46 |
CapToken | Копируется из соответствующего AuthRes или AuthRevRes |
CapRevRes | Enc(P,M, CapRevResData) |
CapRevResData | CapRevOrCredResData |
Шаг | Действие |
1 | Генерируется информация CredReqData |
2 | Для каждой позиции CapRevOrCred в CapRevOrCredItems заполнить позицию в CapTokSeq следующим образом:
|
3 | Если доступно или необходим новый PAN, заполнить PANToken в дополнительную нишу EncBX-инкапсуляции. Если PANToken имеется, только одна позиция может присутствовать как в CredReqData, так и CapTokSeq |
4 | Если PANToken имеется, использовать EncBX-инкапсуляцию, в противном случае EncB-инкапсуляцию. |
5 | Вставить сообщение в цифровой конверт и послать владельцу карты |
Структура запроса CredReq показана в таблице 4.6.2.76. Таблица 4.6.2.76. Структура CredReq
CredReq | <EncB(M, P, CredReqData, CapTokenSeq), EncBX(M, P, CredReqData, CapTokenSeq, PANToken)> CapTokenSeq является внешним “багажом”. Если PANToken имеется, он должен соответствовать одной записи в CredReqData.CapRevOrCredReqItemSeq и одной CapToken в CapTokenS |
CredReqData | CapRevOrCredReqData ; см. табл. 4.6.2.72. |
CapTokenSeq | {[CapToken] +} Один или более CapTokens в соответствии один-к-одному с CapRevOrCredReqItem последовательностью в CapRevOrCredReqData.CapRevOrCredReqItemSeq. Заметим, что любой маркер CapToken может быть опущен, т.е., может быть NULL |
PANToken | См. табл. 4.6.2.46 |
CapToken | Копируется из соответствующего AuthResили AuthRevRes |
Шаг | Действие |
1 | Извлекается запрос из входного сообщения |
2 | Для каждой позиции, для которой продавец получил маркер CapToken:
|
3 | Для каждой транзакции в сообщении реализовать кредитную операцию, используя существующую финансовую сеть платежной карты, как это специфицировано в содержимом CapRevOrCredItem. |
Шаг | Действие |
1 | Получить отклик из финансовой сети платежной карты |
2 | Сгенерировать CredResData, как это описано в CapRevOrCredResData, используя результаты из финансовой сети платежной карты. Заполнить RRTags, полученные в запросе |
3 | Включить Enc-инкапсуляцию для полученных результатов |
4 | Поместить сообщение в цифровой конверт и отправить владельцу карты |
CredRes | Enc(P, M, CredResData) |
CredResData | CapRevOrCredResData; см. табл. 4.6.2.74. |
- Получается отклик CredRes из входного сообщения
- Обрабатывается CredResData, как это описано в CapRevOrCredResData. Для каждого CapRevOrCredResItem проверяется CapRevOrCredCode, чтобы определить результат и записать успешно проплаченную сумму.
Формирование запроса CredRevReq осуществляется следующим образом.
Шаг | Действие |
1 | Сформировать CredRevReqData, как это описано в разделе CapRevOrCredReq |
2 | Для каждой позиции CapRevOrCred в CapRevOrCredItem заполнить позицию в CapTokSeq следующим образом:
|
3 | Если доступен или необходим новый PAN, занести PANToken в дополнительную нишу EncBX-инкапсуляции.Если PANToken в наличии, только одна позиция может присутствовать как в CredRevReqData, так и в CapTokSeq. |
4 | Если PANToken присутствует, включить EncBX-инкапсуляцию. В противном случае - EncB-инкапсуляцию. |
5 | Вставить сообщение в цифровой конверт и направить владельцу карты |
CredRevReq | <EncB(M, P, CredRevReqData, CapTokenSeq), EncBX(M, P, CredRevReqData, CapTokenSeq, PANToken)> CapTokenSeq является внешним “багажом”. Если PANToken имеется, он должен соответствовать одной записи в CredRevReqData.CredRevReqSeq и однму маркеру CapToken в CapTokenSeq. |
CredRevReqData | CapRevOrCredReqData; см. табл. 4.6.2.72 |
CapTokenSeq | {[CapToken] +} Один или более CapTokens, в соответствии один-к-одному с CredRevReqItem в CapRevOrCredReqData.CapRevOrCredReqItemSeq. Заметим, что любой CapToken может быть опущен, т.е. может быть NULL |
PANToken | См. табл. 4.6.2.46 |
CapToken | Копируется из соответствующего AuthRes<=2> или AuthRevRes |
Шаг | Действие |
1 | Выделить запрос из входного сообщения |
2 | Для каждой позиции, для которой продавец получил CapToken:
|
3 | Для каждой транзакции в сообщении выполнить отзыв кредита, используя существующую финансовую сеть расчетной карты, как это специфицировано содержимым CapRevOrCredItem |
Шаг | Действие |
1 | Получить отклик из финансовой сети платежной карты |
2 | Сформировать CredRevResData, как это описано в разделе CredRevOrCredResData, используя результаты из финансовой сети карты. Заполнить RRTags, полученные в запросе. |
3 | Включить для полученного результата Enc-инкапсуляцию |
4 | Вложить отклик в цифровой конверт и отправить владельцу карты |
Отклик CredRevRes имеет достаточно простой формат:
CredRevRes | Enc(P, M, CredRevResData) |
CredRevResData | CredRevOrCredResData; См. табл. 4.6.2.74. |
Шаг | Действие |
1 | Извлекается отклик из входного сообщения |
2 | Обрабатывается CredRevResData, как это описано в разделе о CapRevOrCredResData. Для каждого CapRevOrCredResItem проверяется CapRevOrCredCode, чтобы определить результат и записать сумму успешного платежа. |
Шаг | Действие |
1 | Заполнить PCertTags, как это описано в разделе о RRTags табл. 4.6.2.52. |
2 | Рекомендуется заполнить отклики Mthumbs путем вычисления оттисков сертификатов и CRL, хранящихся у продавца. Продавец должен занести оттиски в сообщение, которое может потребоваться позднее для верификации подписей и сертификатов, предоставленных расчетным центром. Включение этого поля служит оптимизации с целью уменьшения передач сертификатов и CRL в последующих сообщениях из расчетного центра. |
3 | Заполнить BrandIDSeq одним или более BrandIDandBIN, для которого необходимы сертификаты:
|
4 | Опционно заполнить поле PCRqExtensions |
5 | Ввести S (см. описание оператора подпись выше) |
6 | Вложить сообщение в цифровой конверт и отправить владельцу карты |
PCertReq | S(M, PCertReqData) |
PCertReqData | {PCertTags, [MThumbs], BrandAndBINSeq, [PCRqExtensions]} |
PCertTags | RRTags. Новый RRPID для этого PCertReq, MerTermIDs, поставляемый продавцом, и текущая дата |
MThumbs | Оттиски сертификатов расчетного центра, хранящиеся в кэше продавца. |
BrandAndBINSeq | {BrandAndBIN +} Продавец запрашивает сертификаты расчетного центра для платежных систем карты, если оттиск текущего сертификата отсутствует в MThumbs |
PCRqExtensions | Запрос сертификата расчетного центра не шифруется, поэтому это расширение не должно содержать конфиденциальной информации |
BrandAndBIN | {BrandID, [BIN]} |
BrandID | Платежная система карты (без указания типа). |
BIN | Идентификационный номер банка для обработки транзакции продавца в расчетном центре. |
Таблица 4.6.2.78. Структура сообщения PCertReq Расчетный центр обрабатывает PCertReq следующим образом
Шаг | Действие |
1 | Расчетный центр получает PCertReq из входного сообщения |
2 | Обрабатываются расширения PCRqExtensions. Если встречается нераспознанное расширение, помеченное как критическое, прислается отклик unrecognizedExtensions, а PCertReq отбрасывается. |
3 | Обрабатывается BrandIDSeq и MThumbs |
4 | Формируется и посылается PCertRes |
Шаг | Действие |
1 | Скопировать PCertTags из PCertReq в PCertRes |
2 | Для каждого BrandAndBIN в BrandIDSeq из PCertReq:
|
3 | Для каждой платежной системы, для которой необходим сертификат, прислать текущее значение BrandCRLIdentifier, если только Mthumbs не содержит оттиска для текущего BrandCRLIdentifier |
4 | Опционно заполнить PCRqExtensions |
PCertRes | S(P, PCertResTBS) |
PCertResTBS | {PCertTags, [BrandCRLIdentifierSeq], PCertResItems, [PCRsExtensions]} |
PCertTags | RRTags; копируется из PCertReq. |
BrandCRLIdentifierSeq | {BrandCRLIdentifier +} |
PCertResItems | {PCertResItem +}Один или более статусных кодов и оттисков сертификатов, которые возвращаются в соответствии один к одному с PCertReq.BrandAndBINSeq |
PCRsExtentions | Сертификатный отклик расчетного центра не шифруется, по этой причине данное расширение не должно содержать конфиденциальных данных. |
BrandCRLIdentifier | Список текущих CRL для всех CA в зоне ответственности CA платежной системы. См. раздел о BrandCRLIdentifier |
PCertResItem | {PCertCode, [CertThumb]} |
PCertCode | Цифровой код, указывающий результат PCertReq |
CertThumb | Оттиск возвращенного сертификата |
Продавец обрабатывает PCertRes следующим образом.
Шаг | Действие |
1 | Извлекается отклик из входного сообщения |
2 | Обрабатываются PCRsExtensions. Если встречается нераспознанное расширение, помеченное как критическое, присылается отклик unrecognizedExtensions и отбрасывается PCertRes |
3 | Извлекаются сертификаты из Cert-PE |
4 | Проверяются сертификаты в Cert-PE путем сравнения их с CertThumbs в PCertResItems. Отбрасываются все сертификаты, которые не прошли сверку. |
5 | Обработатывается каждый BrandCRLIdentifier из присланной последовательности таких идентификаторов. |
6 | Продолжается обработка сообщений, которые ожидали сертификатов, присланных в PCertRes. |
success | Запрос обработан успешно |
unspecifiedFailure | Запрос не прошел из-за неспецифицированной причины |
brandNotSupported | Запрос не прошел из-за того, что платежная система, специфицированная в PCertReq, не поддерживается |
unknownBIN | Запрос не прошел из-за того, что BIN, специфицированный в PCertReq, не поддерживается. |
Поддержка групп платежей позволяет продавцу и расчетному центру улаживать проблемы, связанные с различными несогласованностями. Если продавец контролирует содержимое групп платежей, каждая платежная линия открывается прежде, чем транзакции ассоциируются с ней путем включения BatchID и BatchSequenceNum в платежные транзакции. Продавец может также закрыть платежную линию в соответствии с требованиями бизнеса. Транзакции не ассоциируются с платежной линией после ее закрытия. Продавец может также иметь возможность удалить все транзакции из открытой платежной линии. Очистка платежной линии не означает ее закрытия. Если содержанием платежных линий управляет расчетный центр, продавец не должен вставлять BatchID и BatchSequenceNum в платежные транзакции. Открытие и закрытие платежной линии контролируется в этом случае расчетным центром, который может включать BatchID и BatchSequenceNum в возвращаемую структуру SaleDetail. Продавец при этом не может удалять транзакции из группы или закрывать платежные линии, определенные идентификаторами BatchID, сформированными расчетным центром. Продавец может запросить статусную информацию для любой платежной линии, которая имеет известный BatchID. Расчетный центр возвращает BatchStatus для запрошенной платежной линии. Продавец может запросить BatchStatus для определенных платежных систем или итоговый баланс для конкретной платежной линии. Если продавец управляет содержимым платежной линии, тогда он может предоставлять информацию BatchStatus расчетному центру для любого BatchID. Расчетный центр проверяет данные, предоставленные продавцом в BatchStatus путем сверки с информацией, накопленной у него. При этом продавец получит отклик, в котором будет отражено соответствие этих сумм. Если продавец предоставляет информацию о транзакции расчетному центру, последний выдает состояние серии платежей в отклике BatchAdminRes, который следует за BatchAdminReq. Продавец формирует запрос BatchAdminReq в следующем порядке.
Шаг | Действие |
1 | Если это первое сообщение, направленное расчетному центру после получения нового секретного ключа, или если это первое сообщение в данный день, в цифровой конверт этого сообщения следует вложить сертификаты для секретных ключей и цепочку сертификатов платежной системы, выбранных продавцом для подписи и шифрования сообщений BatchAdmin. |
2 | Сформировать RRTags |
3 | Если новая платежная линия открыта:
|
4 | Если платежная линия (группа платежей) пуста:
|
5 | Если платежная линия закрыта:
|
6 | Если нужно запросить состояние платежной линии у расчетного центра:
|
7 | Если нужно запросить детальные данные о платежной линии у расчетного центра:
|
8 | Если нужно послать состояние платежной линии расчетному центру:
|
9 | Если нужно передать расчетному центру детальные данные о платежной линии:
|
10 | Реализовать операцию подписи для результата шагов 1-9, используя сертификат подписи продавца для любой платежной системы, известной расчетному центру. |
11 | Включить сертификат шифрования продавца для той же платежной системы, что была выбрана на предшествующем шагу. Общедоступный ключ этого сертификата будет использоваться расчетным центром при дешифровке сообщений BatchAdminRes. |
12 | Зашифровать BatchAdminReqTBE, используя сертификат расчетного центра и установить тип содержимого равным id-set-content-BatchAdminReqTBE. |
13 | Вложить сообщение в цифровой конверт и послать владельцу карты |
Структура запроса BatchAdminReq представлена в таблице 4.6.2.81. Таблица 4.6.2.81. Структура BatchAdminReq
BatchAdminReq | Enc(M, P, BatchAdminReqData) |
BatchAdminReqData | {BatchAdminRRTags, [BatchID], [BrandAndBINSeq], [BatchOperation], ReturnBatchSummaryInd, [ReturnTransactionDetail], [BatchStatus], [TransDetails], [BARqExtensions]} |
BatchAdminRRTags | RRTags. Новый идентификатор RRPID и Date (дата) |
BatchID | Идентификатор платежной линии для счета банка продавца |
BrandAndBINSeq | {BrandAndBIN +} |
BatchOperation | Числовая величина, указывающая на операцию, которая должна быть выполнена в рамках платежной линии |
ReturnBatchSummaryInd | Обозначает, что в BatchAdminRes должны быть возвращены итоговые данные. |
ReturnTransactionDetail | {StartingPoint, MaximumItems, ErrorsOnlyInd, [BrandID]} Если специфицирован BrandID, присылаются данные только для позиций, определяемых платежной системой карты. |
BatchStatus | См. табл. 4.6.2.53. |
TransDetails | {NextStartingPoint, TransactionDetailSeq} |
BARqExtensions | Данные в расширении административного сообщения платежной линии должны иметь финансовый характер и быть важными для обработки административных запросов. |
BrandAndBIN | {BrandID, [BIN]} |
StartingPoint | Нуль указывает на то, что следует прислать данные для первой группы позиций, в противном случае NextStartingPoint предшествующего BatchAdminRes |
MaximumItems | Максимальное число позиций, которые следует прислать в этой группе. |
ErrorsOnlyInd | Булево число, индицирующее, следует ли присылать только позиции с состоянием ошибки. |
BrandID | Тип платежной системы (без указания типа продукта). |
NextStartingPoint | Нуль индицирует, что это последняя группа позиций, в противном случае, используется значение, идентифицирующее начальную точку следующей группы позиций. |
TransactionDetailSeq | {TransactionDetail +} |
BIN | Идентификационный номер банка для обработки транзакций продавца. |
TransactionDetail | См. табл. 4.6.2.54 |
Шаг | Действие |
1 | Выделить запрос из входного сообщения |
2 | Проверить подпись. Если проверка не прошла, присылается отклик Error c ErrorCode = signatureFailure. |
3 | Проверить, что RRPID в BatchAdminReq соответствует RRPID в цифровом конверте сообщения. Если проверка не прошла, присылается отклик Error c ErrorCode = unknownRRPID. |
4 | Если BatchOperation = open:
|
5 | Если BatchOperation = purge:
|
6 | Если BatchOperation = close:
|
7 | Если BatchOperation опущено, а возвращенное значение ReturnBatchSummaryInd = TRUE:
|
8 | Если включено поле StartingPoint:
|
9 | Если код BatchOperation опущен, а BatchStatus имеется:
|
10 | Если код BatchOperation опущен и включено поле TransactionDetails:
|
Формирование отклика BatchAdminRes осуществляется согласно следующему алгоритму.
Шаг | Действие |
1 | Если BAStatus не установлен равным success (успех) или MaximumItems в BatchAdminReq установлен равным 0, аннулировать любую информацию в рамках платежной линии для заданной последовательности запросов BatchAdmin, посланных ранее продавцом. |
2 | Используя сертификат расчетного центра, запустить операцию подписи для BatchAdminResData. |
3 | Зашифровать BatchAdminResTBE, используя сертификат шифрования, поставляемый продавцом, и установить код типа содержимого равным id-set-content-BatchAdminResTBE. |
4 | Вложить сообщение в цифровой конверт и послать владельцу карты. |
BatchAdminRes | Enc(P, M, BatchAdminResData) |
BatchAdminResData | {BatchAdminTags, BatchID, [BAStatus], [BatchStatus], [TransmissionStatus], [SettlementInfo], [TransDetails], [BARsExtensions]} |
BatchAdminTags | RRTags; копируется из предшествующего BatchAdminReq |
BatchID | Идентификатор платежной линии между продавцом и его банком. |
BAStatus | Числовой код, указывающий на состояние открытой платежной линии. |
BatchStatus | См. табл. 4.6.2.53. |
TransmissionStatus | Числовое значение, индицирующее состояние передачи данных из расчетного центра системе вышестоящего уровня |
SettlementInfo | {SettlementAmount, SettlementType, SettlementAccount, SettlementDepositDate} |
TransDetails | {NextStartingPoint, TransactionDetailSeq} |
BARsExtensions | Данные расширения административного отклика должны носить финансовый характер и иметь значение для обработки административного запроса по поводу платежной линии. Информация, относящаяся к обработке запроса, должна появляться в расширении BatchAdminResData; информация, относящаяся к состоянию платежной линии, должна содержаться в расширении BatchStatus; информация, относящаяся к информационным деталям позиции в пределах платежной линии должна содержаться в расширении TransactionDetail. |
SettlementAmount | Занесенная через сеть на счет продавца сумма |
SettlementType | Числовой код, указывающий тип суммы |
SettlementAccount | Счет продавца |
SettlementDepositDate | Дата, когда сумма SettlementAmount будет занесена или снята со счета продавца |
NextStartingPoint | Нуль индицирует, что это последняя группа позиций, в противном случае, для идентификации начальной точки следующей группы позиций используется скрытое значение |
TransactionDetailSeq | {TransactionDetail +} |
TransactionDetail | См. табл. 4.6.2.54.. |
В ниже приведенной таблице представлены стандартизованные значения поля ReimbursementID
unspecified | Неизвестное значение |
standard | Стандартная скорость обмена |
keyEntered | Скорость обмена для транзакций key-entered (ввод с клавиатуры) |
electronic | Скорость обмена для электронных транзакций |
additionalData | Скорость обмена для транзакций, которые включают в себя дополнительные клиринговые данные |
enhancedData | Скорость обмена для транзакций, которые включают в себя усовершенствования (такие как данные дополнительной авторизации). |
marketSpecific | Скорость обмена для транзакций в пределах специфического сегмента рынка (такого как пассажирский транспорт). |
Шаг | Действие |
1 | Извлекается отклик BatchAdminRes из входного сообщения. |
2 | Верифицируется подпись. Если проверка не прошла, присылается сообщение Error с ErrorCode = signatureFailed. |
3 | Проверяется, что RRPID в BatchAdminReq соответствует RRPID в цифровом конверте. Если проверка не прошла, присылается сообщение Error с ErrorCode = unknownRRPID. |
4 | Если BAStatus не равен success, а продавец передает или запрашивает подробности о платежной линии, аннулировать любую информацию, запомненную для данной платежной линии и перезапустить процесс, если детальные данные о платежах по-прежнему нужны. |
5 | Если продавец получает детальные данные о платежной линии, запомнить NextStartingPoint для использования в последующих откликах BatchAdminRes. Значение нуль указывает, что все подробности о платежной линии переданы. |
6 | Если продавец передает детальные данные о платежной линии, проверить, что NextStartingPoint согласуется со значением, посланным в BatchAdminReq. Если согласия нет, послать BatchAdminReq с MaximumItems = 0, чтобы расчетный центр аннулировал детали платежной линии, посланные ранее, после чего повторить посылку этих деталей расчетному центру в последующей серии запросов BatchAdmin. |
7 | Запомнить детали из запроса BatchAdmin и передать их расчетным процедурам продавца. |
Следует учитывать, что, так как система SET является достаточно сложной и дорогостоящей, а продавец должен платить за каждую операцию с кредитной карточкой, то через систему SET проходят платежи, превышающие 10$. Для осуществления более мелких платежей используются другие схемы (например, First Virtual, CyberCoin, DigiCash () или Millicent - ). Схема First Virtual () предназначена для продажи дешевых программных продуктов или услуг. Она предполагает регистрацию клиента, при которой он сообщает номер своей кредитной карточки и получает регистрационный номер (PIN). При покупке клиент вводит свой индивидуальный номер и, если он верен, немедленно получает доступ к нужному ему продукту. Позднее First Virtual связывается с клиентом по электронной почте, уведомляет о цене покупки, предоставляя ему одобрить или нет снятие соответствующей суммы с его кредитной карточки. Эта система зиждется на полном доверии и честности обеих сторон. Система CyberCash () базируется на схеме, сходной с SET. Здесь также используется специальное программное обеспечение со стороны клиента и продавца. Клиент при регистрации получает бесплатно программу CyberCash Wallet и заполняет идентификационную и платежную информацию. Данная информация в зашифрованном виде будет храниться на ЭВМ клиента. Эти данные посылаются при нажатии клиентом клавиши “оплатить”. Система предоставляет клиенту ряд дополнительных услуг, например просмотр баланса последних операций. Назад:
Оглавление:
Вперёд: