验证身份验证请求 (ARQC) 密码 - AWS 支付密码学

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

验证身份验证请求 (ARQC) 密码

验证身份验证请求密码 API 用于验证 ARQC。ARQC的生成不在 AWS 支付密码学的范围之内,通常在交易授权期间使用EMV芯片卡(或数字等效物,例如移动钱包)执行。ARQC 对于每笔交易都是唯一的,旨在以加密方式显示卡的有效性并确保交易数据与当前(预期)交易完全匹配。

AWS 支付密码学为验证ARQC和生成可选的ARPC值提供了多种选项,包括 EMV 4.4 Book 2 中定义的值以及Visa和Mastercard使用的其他方案。有关所有可用选项的完整列表,请参阅 API 指南中的 VerifyCardValidationData 部分。

ARQC 密码通常需要以下输入(尽管这可能因实现而异):

  • PAN-在 PrimaryAccountNumber 字段中指定

  • PAN 序列号 (PSN)-在字段中指 PanSequenceNumber 定

  • 密钥派生方法,例如通用会话密钥 (CSK)-在 SessionKeyDerivationAttributes

  • 主密钥派生模式(例如 EMV 选项 A)-在 MajorKeyDerivationMode

  • 交易数据-在 TransactionData 字段中指定的各种交易、终端和银行卡数据的字符串,例如金额和日期

  • 颁发者主密钥-用于派生用于保护个人交易并在字段中指定的密码 (AC) 密钥的主密钥 KeyIdentifier

建立交易数据

交易数据字段的确切内容(和顺序)因实现和网络方案而异,但最低推荐字段(和串联顺序)在 EMV 4.4 Book 2 第 8.1.1 节 ——数据选择中定义。如果前三个字段是金额 (17.00)、其他金额 (0.00) 和购买国家,则交易数据将按以下方式开始:

  • 000000001700 - 金额 - 12 位隐含两位小数

  • 000000000000 - 其他金额 - 12 位隐含两位小数

  • 0124 - 四位数国家代码

  • 输出(部分)交易数据 - 0000000017000000000000000124

交易数据填充

在将交易数据发送到服务之前,应先填充交易数据。大多数方案使用 ISO 9797 方法 2 填充,其中十六进制字符串后面加上十六进制 80,然后加上 00,直到该字段是加密块大小的倍数;TDES 为 8 字节或 16 个字符,AES 为 16 字节或 32 个字符。替代方案(方法 1)并不常见,但仅使用 00 作为填充字符。

ISO 9797 方法 1 填充

未填充:00000000170000000000000008400080008000084016051700000000093800000B03011203(74 个字符或 37 个字节)

填充:00000000170000000000000008400080008000084016051700000000093800000B03011203000000(80 个字符或 40 个字节)

ISO 9797 方法 2 填充

未填充:00000000170000000000000008400080008000084016051700000000093800000B1F220103000000(80 个字符或 40 个字节)

填充:00000000170000000000000008400080008000084016051700000000093800000B1F2201030000008000000000000000(88 个字符或 44 个字节)

示例

Visa CVN10

在此示例中,我们将验证使用 Visa CVN10 生成的 ARQC。

如果 AWS 支付密码学能够验证 ARQC,则会返回 http/200。如果 arqc 未经过验证,将返回 http/400 响应。

$ aws payment-cryptography-data verify-auth-request-cryptogram --auth-request-cryptogram D791093C8A921769 \ --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk \ --major-key-derivation-mode EMV_OPTION_A \ --transaction-data 00000000170000000000000008400080008000084016051700000000093800000B03011203000000 \ --session-key-derivation-attributes='{"Visa":{"PanSequenceNumber":"01" \ ,"PrimaryAccountNumber":"9137631040001422"}}'
{ "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk", "KeyCheckValue": "08D7B4" }

Visa CVN18 和 Visa CVN22

在此示例中,我们将验证使用 Visa CVN18 或 CVN22 生成的 ARQC。CVN18 和 CVN22 之间的加密操作相同,但交易数据中包含的数据有所不同。与 CVN10 相比,即使输入相同,也会生成完全不同的密码。

如果 AWS 支付密码学能够验证 ARQC,则会返回 http/200。如果 arqc 未经过验证,将返回 http/400。

$ aws payment-cryptography-data verify-auth-request-cryptogram \ --auth-request-cryptogram 61EDCC708B4C97B4 --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk \ --major-key-derivation-mode EMV_OPTION_A --transaction-data 00000000170000000000000008400080008000084016051700000000093800000B1F22010300000000000 \ 00000000000000000000000000000000000000000008000000000000000 --session-key-derivation-attributes='{"EmvCommon":{"ApplicationTransactionCounter":"000B", \ "PanSequenceNumber":"01","PrimaryAccountNumber":"9137631040001422"}}'
{ "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/pw3s6nl62t5ushfk", "KeyCheckValue": "08D7B4" }