Маркерная ссылка формата платежа

Маркер платежа имеет вложенную структуру, как показано на рисунке 1-1.

  Структура рисунка 1-1 маркера платежа

Структура верхнего уровня

paymentData свойство PKPaymentToken содержит сериализацию UTF–8 простого текста словарь JSON со следующими ключами и значениями:

Ключ

Значение

Описание

data

словарь данных платежа, Base64, закодированный как строка

Зашифрованные данные платежа.

header

словарь заголовка

Дополнительная зависимая от версии информация раньше дешифровала и проверяла платеж.

signature

отсоединенная подпись № 7 PKCS, Base64, закодированный как строка

Подпись платежа и данных заголовка.

version

строка

Информация о версии о маркере платежа.

Для версии "EC_v1", для дешифрования зашифрованных данных платежа сделайте следующее:

  1. Заверьте подпись следующим образом:

    1. Гарантируйте, чтобы сертификаты содержали корректный пользовательский OIDs: 1.2.840.113635.100.6.29 для листового сертификата и 1.2.840.113635.100.6.2.14 для промежуточного звена Приблизительно значение для них маркер OIDs не имеет значения, только их присутствие.

    2. Гарантируйте, что корневым CA является Корень Apple CA - G3. Этот сертификат доступен от apple.com/certificateauthority.

    3. Гарантируйте, что существует допустимая цепочка X.509 доверия от подписи до корня Приблизительно В частности, гарантируйте, что подпись создавалась с помощью закрытого ключа, соответствующего листовому сертификату, что листовой сертификат подписывается промежуточным CA, и что промежуточный CA подписывается Корнем Apple CA - G3.

    4. Гарантируйте, что подпись является допустимой подписью ECDSA (ecdsa-with-SHA256 1.2.840.10045.4.3.2) связанных значений ephemeralPublicKey, data, transactionId, и applicationData ключи.

    5. Проверьте время подписания CMS подписи, как определено разделом 11.3 из RFC 5652. Если музыкальный размер и время транзакции отличается на больше, чем несколько минут, возможно, что маркер является атакой с повторением пакетов.

  2. Используйте значение publicKeyHash ключ для определения, какой торговый открытый ключ использовался Apple, и затем получает соответствующий торговый сертификат открытых ключей и закрытый ключ.

  3. Используя торговый закрытый ключ и эфемерный открытый ключ, генерируйте совместно используемую секретную Эллиптическую кривую использования Diffie-Hellman (id-ecDH 1.3.132.1.12).

  4. Используя торговое поле идентификатора (OID 1.2.840.113635.100.6.32) сертификата открытых ключей и совместно используемого секрета, получите симметричный ключ с помощью ключевой функции деривации, описанной в NIST 800-56A SP, разделите 5.8.1 со следующими входными значениями:

    Входное имя

    Значение

    Хеш-функция

    SHA 256

    Z

    Совместно используемый секрет вычислил выше использования ECDH.

    Алгоритм ID

    Байт (0x0D) сопровождаемый ASCII представляют «id-aes256-GCM» в виде строки. Первый байт этого значения является целым без знака, указывающим длину строки в байтах; остающиеся байты являются строкой переменной длины.

    Сторона U информация

    ASCII представляет «Apple» в виде строки. Это значение является строкой фиксированной длины.

    Сторона V информаций

    Хеш SHA 256 торгового идентификатора. Это значение является строкой битов фиксированной длины.

    Дополнительная общедоступная и частная информация

    Неиспользованный.

  5. Используйте симметричный ключ для дешифрования значения data ключевой AES 256 использования (id-aes256-GCM 2.16.840.1.101.3.4.1.46), с вектором инициализации шестнадцати нулевых байтов и никаких связанных данных аутентификации.

Если подпись недопустима, или любой из хешей не соответствует, игнорирует транзакцию.

Ключи заголовка

Для версии "EC_v1", заголовок содержит следующие ключи и значения:

Ключ

Значение

Описание

applicationData

Хеш SHA 256, шестнадцатеричное число закодировало строкой

Дополнительный. Хеш applicationData свойство оригинала PKPaymentRequest объект. Если значение того свойства nil, этот ключ опущен.

ephemeralPublicKey

X.509 закодировал ключевые байты, Base64, закодированный как строка

Эфемерные байты с открытым ключом.

publicKeyHash

Хеш SHA 256, Base64, закодированный как строка

Хеш X.509 закодировал байты с открытым ключом сертификата продавца.

transactionId

шестнадцатеричный идентификатор, как строка

Идентификатор транзакции, сгенерированный на устройстве.

Ключи данных платежа

Будучи дешифрованным, зашифрованные данные платежа содержат следующие ключи и значения:

Ключ

Значение

Описание

applicationPrimaryAccountNumber

строка

Специфичный для устройства номер счета карты это фонды эта транзакция.

applicationExpirationDate

дата как строка

Дата истечения срока карты в формате YYMMDD.

currencyCode

строка

ISO 4217 числовой код валюты, как строка для сохранения начальных нулей.

transactionAmount

число

Сумма транзакции.

cardholderName

строка

Дополнительный. Имя владельца карты.

deviceManufacturerIdentifier

строка

Закодированный шестнадцатеричными числами идентификатор производителя устройств.

paymentDataType

строка

Также "3DSecure" или "EMV".

paymentData

словарь данных платежа

Подробные данные платежа.

Подробные ключи данных платежа (3-D безопасный)

Ключ

Значение

Описание

onlinePaymentCryptogram

строка

Онлайновая криптограмма платежа, как определено Безопасным 3-D.

eciIndicator

строка

Дополнительный. ECI idicator, как определено Безопасным 3-D.

Подробные ключи данных платежа (EMV)

Ключ

Значение

Описание

emvData

Структура платежа EMV, Base64, закодированный как строка

Вывод от безопасного элемента.