生成 MAC - AWS 支付密码学

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

生成 MAC

Generate MAC API 用于验证与卡相关的数据,例如来自卡片磁条的跟踪数据,方法是使用已知的加密密钥生成 MAC(消息身份验证码),用于在发送方和接收方之间进行数据验证。用于生成 MAC 的数据包括消息数据、机密 MAC 加密密钥和 MAC 算法,用于生成用于传输的唯一 MAC 值。MAC 的接收方将使用相同的 MAC 消息数据、MAC 加密密钥和算法来重现另一个 MAC 值以进行比较和数据验证。即使是消息的一个字符发生了变化,或者用于验证的 MAC 密钥不完全相同,生成的MAC 也会完全不同。该 API 支持用于此操作的 ISO 9797-1 算法 1 和 ISO 9797-1 算法 3 MAC(使用静态 MAC 密钥和派生的 DUKPT 密钥)、HMAC 和 EMV MAC 加密密钥。

message-data 的输入值必须是十六进制数据。

有关此 API 所有选项的更多信息,请参阅GenerateMacVerifyMac

可选参数 mac-length 允许您截断输出值(尽管这也可以在代码中完成)。长度为 8 表示 8 字节或 16 个十六进制字符。

MAC 密钥既可以通过 P AWS ayment Cryptography 通过调用创建,CreateKey也可以通过调用ImportKey

注意

CMAC 和 HMAC 算法不需要填充。所有其他数据都要求将数据填充到算法的区块大小,TDES 为 8 字节(16 个十六进制字符),AES 为 16 字节(32 个十六进制字符)的倍数。

生成 HMAC

在此示例中,我们将使用 HMAC 算法 HMAC_SHA256 和 HMAC 加密密钥生成用于卡数据身份验证的 HMAC(基于哈希的消息身份验证代码)。密钥必须 KeyUsage 设置为,TR31_M7_HMAC_KEY并设置 KeyModesOfUse 为Generate。哈希长度(例如 256)是在创建密钥时定义的,无法修改。

可选的 mac-length 参数将修剪输出 MAC,尽管这也可以在服务外部执行。该值以字节为单位,因此,如果值为 16,则需要长度为 32 的十六进制字符串。

$ aws payment-cryptography-data generate-mac \ --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6 \ --message-data "3b313038383439303031303733393431353d32343038323236303030373030303f33" \ --generation-attributes Algorithm=HMAC
{ "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6", "KeyCheckValue": "2976E7", "Mac": "ED87F26E961C6D0DDB78DA5038AA2BDDEA0DCE03E5B5E96BDDD494F4A7AA470C" }

使用 ISO 9797-1 算法 3 生成 MAC

在本示例中,我们将使用 ISO 9797-1 算法 3(零售 MAC)生成 MAC,用于信用卡数据身份验证。密钥必须 KeyUsage 设置为,TR31_M3_ISO_9797_3_MAC_KEY并设置 KeyModesOfUse 为Generate

$ aws payment-cryptography-data generate-mac \ --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h \ --message-data "3b313038383439303031303733393431353d32343038323236303030373030303f33" \ --generation-attributes="Algorithm=ISO9797_ALGORITHM3"
{ "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/kwapwa6qaifllw2h", "KeyCheckValue": "2976EA", "Mac": "A8F7A73DAF87B6D0" }

使用 CMAC 生成 MAC

当密钥为 AES 时,最常使用 CMAC,但它也支持 TDES。在此示例中,我们将使用 CMAC(ISO 9797-1 算法 5)生成一个 MAC,用于使用 AES 密钥进行卡数据身份验证。密钥必须 KeyUsage 设置为,TR31_M6_ISO_9797_5_CMAC_KEY并设置 KeyModesOfUse 为Generate

$ aws payment-cryptography-data generate-mac \ --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \ --message-data "3b313038383439303031303733393431353d32343038323236303030373030303f33" \ --generation-attributes Algorithm="CMAC"
{ "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi", "KeyCheckValue": "C1EB8F", "Mac": "1F8C36E63F91E4E93DF7842BF5E2E5F7" }

使用 DUKPT CMAC 生成 MAC

在此示例中,我们将使用 DUKPT(每笔交易派生的唯一密钥)和 CMAC 生成一个 MAC,用于卡数据身份验证。密钥必须 KeyUsage 设置为 true TR31_B0_BASE_DERIVATION_KEY 并 KeyModesOfUse DeriveKey设置为 true。DUKPT 密钥使用基本派生密钥 (BDK) 和密钥序列号 (KSN) 为每笔交易派生一个唯一的密钥。

$ aws payment-cryptography-data generate-mac --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6 --message-data "3b313038383439303031303733393431353d32343038323236303030373030303f33" --generation-attributes="DukptCmac={KeySerialNumber="932A6E954ABB32DD00000001",Direction=BIDIRECTIONAL}"
{ "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/qnobl5lghrzunce6", "KeyCheckValue": "C1EB8F" }