

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

# HMAC 键入 AWS KMS
<a name="hmac"></a>

基于哈希的消息身份验证码 (HMAC) KMS 密钥是用于在其中生成和验证的对称密钥。 HMACs AWS KMS与每个 HMAC KMS 密钥关联的唯一密钥材料提供了 HMAC 算法所需的秘密密钥。您可以将 HMAC KMS 密钥与 `[GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)` 和 [https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 操作结合使用以验证 AWS KMS中的数据的完整性和真实性。

HMAC 算法结合了加密哈希函数和共享密钥。他们获取消息和密钥，例如 HMAC KMS 密钥中的密钥材料，然后返回一个唯一的固定大小的代码或*标签*。即使是消息的一个字符发生了变化，或者密钥不完全相同，生成的标签也会完全不同。通过要求密钥，HMAC 还可以提供真实性；如果没有密钥，就不可能生成相同的 HMAC 标签。 HMACs 有时被称为*对称签名*，因为它们的工作原理类似于数字签名，但签名和验证都使用单个密钥。

HMAC KMS 密钥和 AWS KMS 使用的 HMAC 算法符合 [RF](https://datatracker.ietf.org/doc/html/rfc2104) C 2104 中定义的行业标准。该 AWS KMS [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)操作会生成标准的 HMAC 标签。HMAC KMS 密钥是在通过 [FIPS 140-3 加密模块验证计划认证的 AWS KMS 硬件安全模块中生成的（中国（](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4884)北京）和中国（宁夏）地区除外），并且永远不会保持未加密状态。 AWS KMS 要使用 HMAC KMS 密钥，您必须调用 AWS KMS。

您可使用 HMAC KMS 密钥确定消息的真实性，例如 JSON Web 令牌（JWT）、令牌化的信用卡信息或提交的密码。它们也可以用作安全的密钥派生函数 (KDFs)，尤其是在需要确定性密钥的应用程序中。

与应用程序软件相比，HMAC KMS 密钥具有优势 HMACs ，因为密钥材料完全是在应用程序软件中生成和使用的 AWS KMS，受您在密钥上设置的访问控制的约束。

**提示**  
最佳实践建议您限制包括 HMAC 在内的任何签名机制的有效时间。这阻止了行为者利用已签名信息反复地或是在消息被取代很久之后建立有效性的攻击。HMAC 标签不包含时间戳，但是您可以在令牌或消息中包含时间戳，以帮助您检测何时刷新 HMAC。

**支持的加密操作**  
HMAC KMS 密钥只支持 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) 和 [https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 加密操作。您不能使用 HMAC KMS 密钥加密数据或签名消息，也不能在 HMAC 操作中使用任何其他类型的 KMS 密钥。当您使用 `GenerateMac` 操作时，您可提供最多为 4096 个字节的消息、HMAC KMS 密钥以及与 HMAC 密钥规范兼容的 MAC 算法，`GenerateMac` 将计算 HMAC 标签。要验证 HMAC 标签，您必须提供 HMAC 标签以及相同的消息、HMAC KMS 密钥和 `GenerateMac` 用于计算原始 HMAC 标签的 MAC 算法。`VerifyMac` 操作计算 HMAC 标签并验证它与提供的 HMAC 标签是否相同。如果输入和计算的 HMAC 标签不相同，则验证失败。  
HMAC KMS 密钥不**支持[自动密钥轮换](rotate-keys.md)，并且您无法在[自定义密钥存储](key-store-overview.md#custom-key-store-overview)中创建 HMAC KMS 密钥。  
如果您要创建 KMS 密钥来加密 AWS 服务中的数据，请使用对称加密密钥。您不能使用 HMAC KMS 密钥。

** 区域**  
所有 AWS 区域 支持的密钥都支持 HMAC KMS 密钥。 AWS KMS 

**了解详情**
+ 要创建 HMAC KMS 密钥，请参阅 [创建 HMAC KMS 密钥](hmac-create-key.md)。
+ 要创建多区域 HMAC KMS 密钥，请参阅 [中的多区域密钥 AWS KMS](multi-region-keys-overview.md)。
+ 要检查 AWS KMS 控制台为 HMAC KMS 密钥设置的默认密钥策略的差异，请参阅[允许密钥用户使用 KMS 密钥进行加密操作](key-policy-default.md#key-policy-users-crypto)。
+ 要识别和查看 HMAC KMS 密钥，请参阅 [识别 HMAC KMS 密钥](identify-key-types.md#hmac-view)。
+ 要了解如何使用 HMACs 创建 JSON Web 令牌，请参阅*AWS 安全博客 AWS KMS*中的[如何 HMACs 内部保护](https://aws.amazon.com/blogs/security/how-to-protect-hmacs-inside-aws-kms/)。
+ 收听播客:在*官方 AWS 播客 AWS Key Management Service上*[介绍 HMACs ](https://aws.amazon.com/podcasts/introducing-hmacs-apis-in-aws-key-management-service).