

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

# 密码学细节简介 AWS KMS
<a name="intro"></a>

AWS Key Management Service (AWS KMS) 提供用于生成和管理加密密钥的 Web 界面，并充当保护数据的加密服务提供商。 AWS KMS 提供与服务集成的传统密钥管理 AWS 服务，通过集中管理和审计 AWS，提供一致的客户密钥视图。本白皮书详细描述了的加密操作 AWS KMS ，以帮助您评估该服务提供的功能。

AWS KMS [包括通过 AWS 管理控制台、命令行界面和 RESTful API 操作的 Web 界面，用于请求由经 FIPS 140-3 验证的硬件安全模块组成的分布式队列的加密操作 (HSMs) [1]。](kms-bibliography.md#fips-hsms) AWS KMS HSM 是一款多芯片独立硬件加密设备，旨在提供专用的加密功能，以满足安全性和可扩展性要求。 AWS KMS您可以在作为 AWS KMS keys管理的密钥下建立自己的基于 HSM 的加密层次结构。这些密钥仅在内存中可用， HSMs 并且仅在处理您的加密请求所需的必要时间内在内存中可用。您可以创建多个 KMS 密钥，每个密钥均由其密钥 ID 表示。只有在每个客户管理的 AWS IAM 角色和账户下，才能创建、删除客户的 KMS 密钥或用于加密、解密、签名或验证数据。您可以通过创建附加到密钥的策略来定义对谁可以管理 KMS 密钥的 and/or 使用进行访问控制。此类策略允许您为每个 API 操作定义特定于应用程序的用途。

此外，大多数 AWS 服务都支持使用 KMS 密钥对静态数据进行加密。此功能允许客户通过控制访问 KMS 密钥的方式和时间来控制 AWS 服务访问加密数据的方式和时间。

![\[AWS KMS 建筑。\]](http://docs.aws.amazon.com/zh_cn/kms/latest/cryptographic-details/images/KMS-Architecture.png)


AWS KMS 是一项分层服务，由面向 Web AWS KMS 的主机和一层组成。 HSMs这些分层主机的分组构成了 AWS KMS 堆栈。对的所有请求都 AWS KMS 必须通过传输层安全协议 (TLS) 发出，并在 AWS KMS 主机上终止。 AWS KMS 主机仅允许使用提供完美[前向](http://dx.doi.org/10.6028/NIST.SP.800-52r2)保密性的密码套件进行 TLS。 AWS KMS 使用适用于所有其他 AWS API 操作的相同凭证和策略机制 AWS Identity and Access Management (IAM) 对您的请求进行身份验证和授权。

# 基本概念
<a name="basic-concepts"></a>

学习一些基本的术语和概念将帮助您充分利用这些术语和概念 AWS Key Management Service。

**AWS KMS key**  
AWS KMS 正在将 “*客户主密钥 (CMK)*” 一词替换为 “*AWS KMS key*和 *KMS 密钥*”。这一概念并未改变。为了防止重大更改， AWS KMS 保留了该术语的一些变体。
表示密钥层次结构顶部的逻辑密钥。KMS 密钥将指定一个 Amazon Resource Name (ARN)，其中包含唯一密钥标识符或密钥 ID。 AWS KMS keys 有三种类型：  
+ **客户管理密钥** - 客户创建并控制客户管理密钥的生命周期和密钥策略。针对这些密钥发出的所有请求都被记录为 CloudTrail 事件。
+ **AWS 托管式密钥**— AWS 创建和控制生命周期和关键策略 AWS 托管式密钥，这些策略是客户资源中的资源 AWS 账户。客户可以查看这些密钥的访问策略和 CloudTrail 事件 AWS 托管式密钥，但无法管理这些密钥的任何方面。针对这些密钥发出的所有请求都被记录为 CloudTrail 事件。
+ **AWS 拥有的密钥**— 这些密钥由 AWS 创建并专门用于跨不同 AWS 服务的内部加密操作。客户无法查看中的关键策略或 AWS 拥有的密钥 使用情况 CloudTrail。

**别名**  
与 KMS 密钥相关联的用户易记名称。在许多 AWS KMS API 操作中，别名可以与密钥 ID 互换使用。

**权限**  
附加到 KMS 密钥的策略，用于定义密钥的权限。默认策略允许您定义的任何委托人，并 AWS 账户 允许添加引用该密钥的 IAM 策略。

**授权**  
一开始不知道预期 IAM 委托人或使用持续时间，因此无法添加到密钥或 IAM 策略时，使用 KMS 密钥的委托权限。授权的用途之一是为 AWS 服务如何使用 KMS 密钥定义限定范围的权限。如果您没有直接签名的 API 调用，该服务可能需要使用您的密钥代表您对加密数据执行异步工作。

**数据密钥**  
生成的加密密钥由 KMS 密钥保护。 HSMs AWS KMS 允许授权实体获取受 KMS 密钥保护的数据密钥。这些密钥可以作为明文（未加密）数据密钥和加密数据密钥返回。数据密钥可以是对称的，也可以是非对称的（返回公有部分和私有部分）。

**密文**  
的加密输出 AWS KMS，有时也称为客户密文，以消除混淆。密文包含带有附加信息的加密数据，这些信息标识要在解密过程中使用的 KMS 密钥。加密数据密钥是使用 KMS 密钥时生成的密文的一个常见示例，但大小小于 4 KB 的任何数据都可以在 KMS 密钥下加密以生成密文。

**加密上下文**  
与受保护信息关联的其他信息的键值对映射 AWS KMS。 AWS KMS 使用经过身份验证的加密来保护数据密钥。加密上下文已合并到加密密文中经过身份验证的加密的 AAD AWS KMS中。此上下文信息是可选的，在请求密钥（或加密操作）时不会返回。但如果使用，则需要此上下文值才能成功完成解密操作。加密上下文的预期用途是提供额外的经身份验证信息。这些信息可以帮助您执行策略并包含在 AWS CloudTrail 日志中。例如，您可以使用 \$1"key name":"satellite uplink key"\$1 键值对来命名数据密钥。随后使用该密钥会创建一个包含 “密钥名称” 的 AWS CloudTrail 条目：“卫星上行链路密钥”。此附加信息可提供有用的上下文，以了解使用指定 KMS 密钥的原因。

**公有密钥**  
使用非对称密码（RSA 或椭圆曲线）时，公有密钥是公有-私有密钥对的“公有组成部分”。加密详细信息介绍公有密钥可以共享并分发给需要为公有-私有密钥对拥有者加密数据的实体。对于数字签名操作，公有密钥用于验证签名。

**私有密钥**  
使用非对称密码（RSA 或椭圆曲线）时，私有密钥是公有-私有密钥对的“私有组成部分”。私有密钥用于解密数据或创建数字签名。与对称 KMS 密钥类似，私钥在中加密。 HSMs这些密钥仅在 HSM 的短期存储中解密，并且仅在处理加密请求所需的时间内解密。

# AWS KMS 设计目标
<a name="design-goals"></a>

AWS KMS 旨在满足以下要求。

**持久性**  
加密密钥的耐久性旨在与中 AWS最高耐久性服务的耐久性相当。一个加密密钥可以加密长时间累积的大量数据。

**值得信赖**  
密钥的使用受您定义和管理的访问控制策略的保护。没有导出明文 KMS 密钥的机制。加密密钥的机密性至关重要。多名具有特定角色访问权限的基于法定人数的访问控制的 Amazon 员工需要对这些权限执行管理操作。 HSMs

**低延迟和高吞吐量**  
AWS KMS 提供延迟和吞吐量级别的加密操作，适合中 AWS其他服务使用。

**独立区域**  
AWS 为需要限制不同区域数据访问的客户提供独立区域。可以在 AWS 区域内隔离密钥使用。

**随机数的安全来源**  
由于强加密依赖于真正不可预测的随机数生成，因此 AWS KMS 提供优质且经过验证的随机数来源。

**审核**  
AWS KMS 在 AWS CloudTrail 日志中记录加密密钥的使用和管理。您可以使用 AWS CloudTrail 日志来检查您的加密密钥的使用情况，包括 AWS 服务代表您使用密钥的情况。

为了实现这些目标，该 AWS KMS 系统包括一组管理 “域” 的 AWS KMS 运营商和服务主机运营商（统称为 “运营商”）。域是一组按区域定义的 AWS KMS 服务器 HSMs、和运营商。每个 AWS KMS 操作员都有一个硬件令牌，其中包含用于验证其操作的私钥和公钥对。它们 HSMs还有一个额外的私钥和公钥对，用于建立保护 HSM 状态同步的加密密钥。

此 paper 说明了如何 AWS KMS 保护您的密钥和其他要加密的数据。在本文档中，加密密钥或要加密的数据称为“机密”或“机密材料”。