AWS KMS 中的 HMAC 密钥 - AWS Key Management Service

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

AWS KMS 中的 HMAC 密钥

HMAC 散列消息认证码 KMS 密钥是用于生成和验证 AWS KMS 内的 HMAC 的对称密钥。与每个 HMAC KMS 密钥关联的唯一密钥材料提供了 HMAC 算法所需的秘密密钥。您可以将 HMAC KMS 密钥与 GenerateMacVerifyMac 操作结合使用以验证 AWS KMS 中的数据的完整性和真实性。

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

AWS KMS 使用的 HMAC KMS 密钥和 HMAC 算法符合 RFC 2104 中定义的行业标准。该AWS KMSGenerateMac操作会生成标准的 HMAC 标签。这些密钥对在通过 FIPS 140-2 加密模块验证计划认证的 AWS KMS 硬件安全模块中生成(中国(北京)和中国(宁夏)区域除外)并且绝不会使 AWS KMS 处于未加密状态。要使用 HMAC KMS 密钥,您必须调用 AWS KMS。

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

HMAC KMS 密钥比应用软件的 HMAC 具有优势,因为密钥材料完全在 AWS KMS 内部生成和使用,受制于您对密钥设置的访问控制。

提示

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

授权用户可以在 AWS 账户中创建、管理和使用 HMAC KMS 密钥。这包括启用和禁用密钥、设置和更改别名标签,以及计划删除 HMAC KMS 密钥。您还可以使用密钥策略IAM policy授权来控制对 HMAC KMS 密钥的访问。您可以在 AWS CloudTrail 日志的 AWS 中审核使用或管理 HMAC KMS 密钥的所有操作。您可创建具有导入密钥材料的 HMAC KMS 密钥。您也可以在多个 AWS 区域 中创建行为与相同 HMAC KMS 密钥的副本类似的 HMAC 多区域 KMS 密钥

HMAC KMS 密钥只支持 GenerateMacVerifyMac 加密操作。您不能使用 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 密钥不支持自动密钥轮换,并且您无法在自定义密钥存储中创建 HMAC KMS 密钥。

如果您创建 KMS 密钥以加密 AWS 服务中的数据,请使用对称加密密钥。您不能使用 HMAC KMS 密钥。

区域

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

了解更多

HMAC KMS 密钥的密钥规范

AWS KMS 支持不同长度的对称 HMAC 密钥。您选择的密钥规范可取决于安全、法规或业务要求。密钥的长度决定了GenerateMacVerifyMac操作中使用的 MAC 算法。一般来说,较长的密钥更安全。使用适用于您的使用场景的最长密钥。

HMAC 密钥规范 MAC 算法
HMAC_224 HMAC_SHA_224
HMAC_256 HMAC_SHA_256
HMAC_384 HMAC_SHA_384
HMAC_512 HMAC_SHA_512