產生 MAC - AWS 付款密碼編譯

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

產生 MAC

產生 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必須是 hexBinary 資料。

如需此 API 所有選項的詳細資訊,請參閱 GenerateMacVerifyMac

選用參數 mac-length 可讓您截斷輸出值 (不過這也可以在程式碼中完成)。長度為 8 是指 8 個位元組或 16 個十六進位字元。

您可以透過呼叫 CreateKey 來建立 MAC AWS 金鑰,或呼叫 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 設定為 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" }