

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

# 生成并验证 MAC
<a name="crypto-ops-mac"></a>

消息验证码 (MAC) 通常用于验证消息的完整性（是否已被修改）。诸如 HMAC（Hash-Based 消息身份验证码） CBC-MAC 和 CMAC（消息身份验证码）之类的加密哈希通过使用加密技术为 MAC 的发送者提供了额外的保证。Cipher-based HMAC 基于哈希函数，而 CMAC 基于分组密码。该服务还支持 ISO9797 算法 1 和 3，它们是 CBC-MACs.

此服务的所有 MAC 算法结合了加密哈希函数和共享密钥。他们获取消息和密钥，例如密钥中的密钥材料，然后返回一个唯一的标签或 MAC。即使是消息的一个字符发生了变化，或者密钥发生变化，生成的标签也会完全不同。通过要求提供密钥，加密 MAC 还提供了真实性；如果没有密钥，就不可能生成相同的 MAC。加密 MAC 有时被称为对称签名，因为它们像数字签名一样工作，但使用单个密钥进行签名和验证。

AWS 支付密码学支持多种类型的 MAC：

**ISO9797 算法 1**  
以 ISO9797\_ALGORTH `KeyUsage` IM1 的形式表示。如果该字段不是区块大小的倍数（TDES 为 8 个 bytes/16 十六进制字符，AES 为 16 个字 bytes/32 符），P AWS ayment Cryptography 会自动应用 ISO9797 填充方法 1。如果需要其他填充方法，则可以在调用服务之前应用它们。

**ISO9797 算法 3（零售 MAC）**  
以 ISO9797\_ALGORTHM `KeyUsage` 3 的形式表示。与算法 1 相同的填充规则适用

**ISO9797 算法 5 (CMAC)**  
由 TR31\_M6\_ISO\_9797\_5\_CMAC\_KEY 的 `KeyUsage` 表示

**HMAC**  
用 TR31\_M7\_HMAC\_KEY 的 `KeyUsage` 表示，包括 HMAC\_SHA224、HMAC\_SHA256、HMAC\_SHA384 和 HMAC\_SHA512

**AS2805.4.1 MAC**  
用 TR31\_M0\_ISO\_16609\_M `KeyUsage` AC\_KEY 表示。有关 AS2805 的更多详细信息，请参阅 [AS2805](advanced.regional.as2805.md)

**DUKPT MAC**  
DUKPT MAC 通常用于确认 to/from 支付终端的消息来源和有效负载。它使用 DUKPT 派生技术派生密钥，然后执行 MAC。用于此选项的密钥由 TR31\_B0\_BASE\_DERIVATION\_KE `KeyUsage` Y 中的 a 表示。

**EMV MAC**  
在 EMV 文档中，EMV MAC 通常被称为完整性密钥。它使用 EMV 推导技术派生密钥，然后在内部使用 ISO9797\_ALGORTHM3。它通常用于将发行者脚本发送到芯片卡进行重新编程。用于此选项的密钥由 TR31\_E2\_EMV\_MKEY\_INTEGRIT `KeyUsage` Y 的 a 表示。如果您既发送脚本又更新离线 PIN，请查看执行[GenerateMacEmvPinChange](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_GenerateMacEmvPinChange)这两个操作的脚本。

**Topics**
+ [生成 MAC](generate-mac.md)
+ [验证 MAC](verify-mac.md)