

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

# 的版本 AWS Encryption SDK
<a name="about-versions"></a>

 AWS Encryption SDK 语言实现使用[语义版本控制](https://semver.org/)，使您可以更轻松地确定每个版本中变化的幅度。主要版本编号的更改，例如 1.*x*.*x* 更改为 2.*x*.*x*，表示一项重大更改，可能需要更改代码和计划部署。新版本中的重大更改可能不会影响所有用例，请查看发行说明以了解您是否受到影响。次要版本的更改，例如 *x*.1.*x* 更改为 *x*.2.*x*，始终向后兼容，但可能包含已弃用的元素。

只要有可能，请在所选编程语言 AWS Encryption SDK 中使用最新版本的。每个版本的[维护和支持策略](introduction.md#support)因编程语言实现而异。有关首选编程语言支持的版本的详细信息，请参阅其[GitHub存储库中的`SUPPORT_POLICY.rst`文件](introduction.md#esdk-repos)。

当升级包含需要特殊配置以避免加密或解密错误的新功能时，我们会提供中间版本和详细的使用说明。例如，版本 1.7.*x* 和 1.8.*x* 被设计为过渡版本，可帮助您从 1.7.*x* 之前的版本升级到版本 2.0.*x* 及更高版本。有关更多信息，请参阅 [迁移你的 AWS Encryption SDK](migration.md)。

**注意**  
版本号中的 *x* 表示主要版本和次要版本的任何补丁。例如，版本 1.7.*x* 表示所有以 1.7 开头的版本，包括 1.7.1 和 1.7.9。  
新的安全功能最初是在 AWS 加密 CLI 版本 1.7 中发布的。*x * 和 2.0。*x *。但是， AWS 加密 CLI 版本 1.8。*x * 取代了 1.7 版。*x * 和 AWS 加密 CLI 2.1。*x * 取代 2.0。*x *。有关详细信息，请参阅上的 [ aws-encryption-sdk-c ](https://github.com/aws/aws-encryption-sdk-cli/) li 存储库[中的相关](https://github.com/aws/aws-encryption-sdk-cli/security/advisories/GHSA-2xwp-m7mq-7q3r)安全公告。 GitHub

下表概述了每种编程语言 AWS Encryption SDK 的支持的版本之间的主要区别。

## C
<a name="esdk-c-versions"></a>

有关所有更改的详细描述，请参阅 [ aws-encryption-sdk-c 存储库[CHANGELOG.md](https://github.com/aws/aws-encryption-sdk-c/blob/master/CHANGELOG.md)](https://github.com/aws/aws-encryption-sdk-c/)中的。 GitHub


| 
| 
| **主要版本 ** | **详细信息** | **SDK 主要版本生命周期阶段 ** | 
| --- |--- |--- |
| 1.x | 1.0 | 初始版本。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 1.7 | 对的更新 AWS Encryption SDK ，可帮助早期版本的用户升级到版本 2.0。x  及更高版本。有关更多信息，请参阅 1.7 [ 版。*x *](#version-1.7)。 | 
| 2.x | 2.0 | 的更新 AWS Encryption SDK。有关更多信息，请参阅 2.0 [ 版。*x *](#version-2)。 | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 
| 2.2 | 对消息解密过程的改进。 | 
| 2.3 | 增加了对 AWS KMS 多区域密钥的支持。 | 

## C\# /.NET
<a name="esdk-dot-net-versions"></a>

有关所有更改的详细描述，请参阅[`aws-encryption-sdk-net`](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/)存储库[CHANGELOG.md](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/CHANGELOG.md)中的 GitHub。


| 
| 
| **主要版本 ** | **详细信息** | **SDK 主要版本生命周期阶段 ** | 
| --- |--- |--- |
| 3.x | 3.1.0 | 初始版本。 | [End-of-Support](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) <br />[.NET 的 3.x 版本](https://www.nuget.org/packages/AWS.EncryptionSDK)已进入支持终止状态；请[升级到 4.x。 AWS Encryption SDK](https://www.nuget.org/packages/AWS.Cryptography.EncryptionSDK) | 
| 4.x  | 4.0 | 增加了对 AWS KMS 分层密钥环、所需的加密上下文 CMM 和非对称 RSA 密钥环的支持。 AWS KMS  | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 
| 5.x  | 5.0 | 对版本 2 的更新。材料提供者库 (MPL) 的 x 。放弃对适用于 .NET v3 的 AWS 软件开发工具包的支持，需要 AWS 适用于 .NET v4 的软件开发工具包。 | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 

## 命令行界面 (CLI)
<a name="esdk-cli-versions"></a>

有关所有更改的详细描述，请参阅上的 [ aws-encryption-sdk-c ](https://github.com/aws/aws-encryption-sdk-cli/) li 存储库[CHANGELOG.rst](https://github.com/aws/aws-encryption-sdk-cli/blob/master/CHANGELOG.rst)中的[AWS 加密 CLI 的版本](crypto-cli-versions.md)和。 GitHub


| 
| 
| **主要版本 ** | **详细信息** | **SDK 主要版本生命周期阶段 ** | 
| --- |--- |--- |
| 1.x | 1.0 | 初始版本。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 1.7 | 对的更新 AWS Encryption SDK ，可帮助早期版本的用户升级到版本 2.0。x  及更高版本。有关更多信息，请参阅 1.7 [ 版。*x *](#version-1.7)。 | 
| 2.x | 2.0 | 的更新 AWS Encryption SDK。有关更多信息，请参阅 2.0 [ 版。*x *](#version-2)。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 2.1 | 移除`--discovery`参数并将其替换为`--wrapping-keys`参数的`discovery`属性。<br /> AWS 加密 CLI 的 2.1.0 版等同于其他编程语言中的 2.0 版。 | 
| 2.2 | 对消息解密过程的改进。 | 
| 3.x | 3.0 | 增加了对 AWS KMS 多区域密钥的支持。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 4.x  | 4.0 |  AWS 加密 CLI 不再支持 Python 2 或 Python 3.4。从主要版本 4 开始。x  的 AWS 加密 CLI，仅支持 Python 3.5 或更高版本。 | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 
| 4.1 |  AWS 加密 CLI 不再支持 Python 3.5。从 4.1 版开始。x  的 AWS 加密 CLI，仅支持 Python 3.6 或更高版本。 | 
| 4.2 |  AWS 加密 CLI 不再支持 Python 3.6。从 4.2 版开始。x  的 AWS 加密 CLI，仅支持 Python 3.7 或更高版本。 | 

## Java
<a name="esdk-java-versions"></a>

有关所有更改的详细描述，请参阅 [ aws-encryption-sdk-java 存储库[CHANGELOG.rst](https://github.com/aws/aws-encryption-sdk-java/blob/master/CHANGELOG.md)](https://github.com/aws/aws-encryption-sdk-java/)中的。 GitHub


| 
| 
| **主要版本 ** | **详细信息** | **SDK 主要版本生命周期阶段 ** | 
| --- |--- |--- |
| 1.x | 1.0 | 初始版本。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 1.3 | 增加了对加密材料管理器和数据密钥缓存的支持。移至确定性 IV 代。 | 
| 1.6.1 | 弃用`AwsCrypto.encryptString()`和，并用`AwsCrypto.decryptString()`和替换它们。`AwsCrypto.encryptData()` `AwsCrypto.decryptData()` | 
| 1.7 | 对的更新 AWS Encryption SDK ，可帮助早期版本的用户升级到版本 2.0。x  及更高版本。有关更多信息，请参阅 1.7 [ 版。*x *](#version-1.7)。 | 
| 2.x | 2.0 | 的更新 AWS Encryption SDK。有关更多信息，请参阅 2.0 [ 版。*x *](#version-2)。 | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA）<br />的 2.x 版本 AWS Encryption SDK for Java 将于 2024 年进入维护模式。 | 
| 2.2 | 对消息解密过程的改进。 | 
| 2.3 | 增加了对 AWS KMS 多区域密钥的支持。 | 
| 2.4 | 添加了对的支持 AWS SDK for Java 2.x。 | 
| 3.x | 3.0 | 将 AWS Encryption SDK for Java 与[材料提供者库 ](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL) 集成。<br />增加了对对称和非对称 RSA AWS KMS 密钥环、 AWS KMS ECDH 密钥环、 AWS KMS 分层密钥环、原始 AES 密钥环、原始 RSA 密钥环、原始 ECDH 密钥环和所需的加密上下文 CMM 的支持。 Multi-keyrings | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 

## Go
<a name="esdk-go-versions"></a>

有关所有更改的详细描述，请参阅 [ aws-encryption-s ](https://github.com/aws/aws-encryption-sdk/tree/mainline) dk 存储库的 Go 目录中的。[ CHANGELOG.md ](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/CHANGELOG.md) GitHub


| 
| 
| **主要版本 ** | **详细信息** | **SDK 主要版本生命周期阶段 ** | 
| --- |--- |--- |
| 0.1。x   | 0.1.0 | 初始版本。 | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 

## JavaScript
<a name="esdk-javascript-versions"></a>

有关所有更改的详细描述，请参阅 [ aws-encryption-sdk-javascript 存储库[CHANGELOG.md](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/CHANGELOG.md)](https://github.com/aws/aws-encryption-sdk-javascript/tree/master/modules)中的。 GitHub


| 
| 
| **主要版本 ** | **详细信息** | **SDK 主要版本生命周期阶段 ** | 
| --- |--- |--- |
| 1.x | 1.0 | 初始版本。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 1.7 | 对的更新 AWS Encryption SDK ，可帮助早期版本的用户升级到版本 2.0。x  及更高版本。有关更多信息，请参阅 1.7 [ 版。*x *](#version-1.7)。 | 
| 2.x | 2.0 | 的更新 AWS Encryption SDK。有关更多信息，请参阅 2.0 [ 版。*x *](#version-2)。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 2.2 | 对消息解密过程的改进。 | 
| 2.3 | 增加了对 AWS KMS 多区域密钥的支持。 | 
| 3.x | 3.0 | 移除节点 10 的 CI 覆盖范围。将依赖项升级为不再支持节点 8 和节点 10。 | [Maintenance](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)<br />对版本 3.x 的支持 AWS Encryption SDK for JavaScript 将于 2024 年 1 月 17 日结束。 | 
| 4.x  | 4.0 | 需要第 3 版kms-client才能使用 AWS KMS 钥匙圈。 AWS Encryption SDK for JavaScript | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 

## Python
<a name="esdk-python-versions"></a>

有关所有更改的详细描述，请参阅 [ aws-encryption-sdk-python 存储库[CHANGELOG.rst](https://github.com/aws/aws-encryption-sdk-python/blob/master/CHANGELOG.rst)](https://github.com/aws/aws-encryption-sdk-python/)中的。 GitHub


| 
| 
| **主要版本 ** | **详细信息** | **SDK 主要版本生命周期阶段 ** | 
| --- |--- |--- |
| 1.x | 1.0 | 初始版本。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 1.3 | 增加了对加密材料管理器和数据密钥缓存的支持。移至确定性 IV 代。 | 
| 1.7 | 对的更新 AWS Encryption SDK ，可帮助早期版本的用户升级到版本 2.0。x  及更高版本。有关更多信息，请参阅 1.7 [ 版。*x *](#version-1.7)。 | 
| 2.x | 2.0 | 的更新 AWS Encryption SDK。有关更多信息，请参阅 2.0 [ 版。*x *](#version-2)。 | [End-of-Support 阶段 ](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle) | 
| 2.2 | 对消息解密过程的改进。 | 
| 2.3 | 增加了对 AWS KMS 多区域密钥的支持。 | 
| 3.x | 3.0 |  AWS Encryption SDK for Python 不再支持 Python 2 或 Python 3.4。从主要版本 3 开始。其中 x AWS Encryption SDK for Python，仅支持 Python 3.5 或更高版本。 | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 
| 4.x  | 4.0 | 将 AWS Encryption SDK for Python 与[材料提供者库 ](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL) 集成。 | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 

## Rust
<a name="esdk-rust-versions"></a>

有关所有更改的详细描述，请参阅 [ aws-encryption-s ](https://github.com/aws/aws-encryption-sdk/tree/mainline) dk 存储库的 Rust 目录中的。[ CHANGELOG.md ](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/CHANGELOG.md) GitHub


| 
| 
| **主要版本 ** | **详细信息** | **SDK 主要版本生命周期阶段 ** | 
| --- |--- |--- |
| 1.x | 1.0 | 初始版本。 | [正式发布](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)（GA） | 

## 版本详情
<a name="version-details"></a>

以下列表描述了支持的 AWS Encryption SDK版本之间的主要区别。

**Topics**
+ [早于 1.7 的版本。*x*](#versions-earlier)
+ [版本 1.7。*x*](#version-1.7)
+ [版本 2.0。*x*](#version-2)
+ [版本 2.2。*x*](#version2.2.x)
+ [版本 2.3。*x*](#version2.3)

### 早于 1.7 的版本。*x*
<a name="versions-earlier"></a>

**注意**  
全部 1.*x *。**的 x 版本 AWS Encryption SDK 处于[支持终止阶段](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)。尽快升级到 AWS Encryption SDK 适用于您的编程语言的最新可用版本。从 1.7 之前的 AWS Encryption SDK 版本升级。*x*，你必须先升级到 1.7。*x *。有关更多信息，请参阅 [迁移你的 AWS Encryption SDK](migration.md)。

1.7 AWS Encryption SDK 之前的版本。*x * 提供重要的安全功能，包括在 Galois/Counter 模式 (AES-GCM) 中使用高级加密标准算法进行加密、 HMAC-based 提取和扩展密钥派生功能 (HKDF)、签名和 256 位加密密钥。但是，这些版本不支持我们推荐的[最佳实践](best-practices.md)，包括[密钥承诺](concepts.md#key-commitment)。

### 版本 1.7。*x*
<a name="version-1.7"></a>

**注意**  
全部 1.*x *。**的 x 版本 AWS Encryption SDK 处于[支持终止阶段](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)。

版本 1.7。*x * 旨在帮助早期版本的用户升级 AWS Encryption SDK 到 2.0 版。*x * 及更高版本。如果您不熟悉 AWS Encryption SDK，则可以跳过此版本，从编程语言的最新可用版本开始。

版本 1.7.*x* 完全向后兼容；未引入任何重大更改或更改 AWS Encryption SDK的行为。该版本还向前兼容；允许您更新代码，以便与版本 2.0.*x* 兼容。其中包含新功能，但并未完全启用。此外，该版本需要配置值，以防止您在准备就绪之前立即采用所有新功能。

版本 1.7.*x* 包含以下更改：

**AWS KMS 主密钥提供商更新（必需）**  <a name="changes-to-mkps"></a>
版本 1.7。*x * 向中引入了新的构造函数 AWS Encryption SDK for Java AWS Encryption SDK for Python ，这些构造函数可在*严格模式*或*发现*模式下显式创建 AWS KMS 主密钥提供者。此版本对 AWS Encryption SDK 命令行界面 (CLI) 添加了类似的更改。有关更多信息，请参阅 [更新 AWS KMS 主密钥提供程序](migrate-mkps-v2.md)。  
+ 在*严格模式*下， AWS KMS 主密钥提供程序需要包装密钥列表，这些提供程序仅使用您指定的包装密钥进行加密和解密。这是一种 AWS Encryption SDK 最佳实践，可确保您使用的是要使用的包装密钥。
+ 在*发现模式*下， AWS KMS 主密钥提供程序不使用任何包装密钥。您不能使用这些提供程序进行加密。在解密时，这些提供程序可以使用任何包装密钥解密加密的数据密钥。但是，您可以将用于解密的包装密钥限制为特定的 AWS 账户。账户筛选是可选的，但这是我们推荐的[最佳实践](best-practices.md)。
在 1.7 版中，不推荐使用创建 AWS KMS 主密钥提供程序的早期版本的构造函数。*x * 并在 2.0 版本中移除。*x *。这些构造函数实例化主密钥提供程序，这些提供程序使用您指定的包装密钥进行加密。但是，这些提供程序使用加密数据密钥的包装密钥来解密已加密的数据密钥，而不考虑指定的包装密钥。用户可能会无意中使用他们不打算使用的包装密钥解密邮件，包括 AWS KMS keys 在其他 AWS 账户 和地区。  
 AWS KMS 主密钥的构造函数没有变化。加密和解密时， AWS KMS 主密钥仅使用您指定的密钥。 AWS KMS key 

**AWS KMS 密钥环更新（可选）**  
版本 1.7。*x 在 AWS Encryption SDK for C 和 AWS Encryption SDK for JavaScript 实现中*添加了一个新的过滤器，将[AWS KMS 发现密钥环](use-kms-keyring.md#kms-keyring-discovery)限制在特定 AWS 账户范围内。这个新的账户筛选条件是可选的，但这是我们推荐的[最佳实践](best-practices.md)。有关更多信息，请参阅 [更新 AWS KMS 钥匙圈](migrate-keyrings-v2.md)。  
 AWS KMS 密钥环的构造函数没有变化。在严格模式下，标准密 AWS KMS 钥环的行为就像主密钥提供者一样。 AWS KMS 发现密钥环是在发现模式下显式创建的。

**传递密钥 ID 进行 AWS KMS 解密**  
从 1.7 版开始。*x*，解密加密数据密钥时， AWS Encryption SDK 始终 AWS KMS key 在调用 AWS KMS [解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)操作时指定。 AWS KMS key 从每个加密数据密钥中的元数据中 AWS Encryption SDK 获取的密钥 ID 值。此功能不需要任何代码更改。  
解密使用对 AWS KMS key 称加密 KMS 密钥加密的密文不需要指定密钥 ID，但这是最佳做法。[AWS KMS](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html#KMS-Decrypt-request-KeyId)就像在密钥提供商中指定包装密钥一样，这种做法可确保 AWS KMS 仅使用您打算使用的包装密钥进行解密。

**使用密钥承诺解密加密文字**  
版本 1.7.*x* 可以解密使用或不使用[密钥承诺](concepts.md#key-commitment)加密的加密文字。但是，无法使用密钥承诺加密加密文字。此属性允许您在遇到任何此类加密文字之前，完全部署能够解密使用密钥承诺加密的加密文字的应用程序。由于此版本可解密未经密钥承诺而加密的消息，您无需重新加密任何加密文字。  
要实现此行为，请使用 1.7 版。*x * 包含新的[承诺策略](concepts.md#commitment-policy)配置设置，该设置确定是否 AWS Encryption SDK 可以通过密钥承诺进行加密或解密。在版本 1.7.*x* 中，`ForbidEncryptAllowDecrypt` 是承诺策略的唯一有效值，用于所有加密和解密操作。此值可防止 AWS Encryption SDK 使用包含密钥承诺的新算法套件进行加密。它 AWS Encryption SDK 允许在有或没有密钥承诺的情况下解密密文。  
尽管版本 1.7.*x* 中只有一个有效的承诺策略值，但我们要求您在使用本版本中引入的新 API 时可以明确设置此值。明确设置该值可防止您的承诺策略在升级到版本 2.1.*x* 时自动更改为 `require-encrypt-require-decrypt`。相反，您可以分阶段[迁移承诺策略](migrate-commitment-policy.md)。

**带有密钥承诺的算法套件**  
版本 1.7.*x* 包括两个支持密钥承诺的新[算法套件](supported-algorithms.md)。一个包括签名；另一个不包括。与之前支持的算法套件一样，这两个新的算法套件都包括使用加密 AES-GCM、256 位加密密钥和 HMAC-based 提取和扩展密钥派生函数 (HKDF)。  
但是，用于加密的默认算法套件不会更改。这些算法套件已添加至版本 1.7.*x*，让您的应用程序做好准备，以便在版本 2.0.*x* 及更高版本中使用这些套件。

**CMM 实现更改**  
版本 1.7.*x* 引入了对默认加密材料管理器（CMM）界面的更改，以支持密钥承诺。此更改仅在您编写了自定义 CMM 时才会影响到您。有关详细信息，请参阅[编程语言的 API 文档或 GitHub 存储库](programming-languages.md)。

### 版本 2.0。*x*
<a name="version-2"></a>

版本 2.0。*x * 支持中提供的新安全功能 AWS Encryption SDK，包括指定的包装密钥和密钥承诺。为支持这些功能，版本 2.0.*x* 包括对 AWS Encryption SDK早期版本的重大更改。您可以通过部署版本 1.7.*x* 为这些更改做好准备。版本 2.0.*x* 包含版本 1.7.*x* 中引入的所有新功能，有以下补充和更改。

**注意**  
版本 2。*x *。*x * 的 AWS Encryption SDK for Python AWS Encryption SDK for JavaScript、和 AWS 加密 CLI 处于[支持终止阶段](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)。  
有关以您的首选编程语言[支持和维护](introduction.md#support)此 AWS Encryption SDK 版本的信息，请参阅其[GitHub存储库中的`SUPPORT_POLICY.rst`文件](introduction.md#esdk-repos)。

**AWS KMS 主密钥提供商**  
在 1.7 版中不推荐使用的原始 AWS KMS 主密钥提供程序构造函数。*x 已*在 2.0 版本中移除。*x *。您必须在[严格模式或发现模式下](migrate-mkps-v2.md)明确构造 AWS KMS 主密钥提供程序。

**使用密钥承诺加密和解密加密文字**  
版本 2.0.*x* 可以使用或不使用[密钥承诺](concepts.md#key-commitment)来加密和解密加密文字。其行为由承诺策略的设置决定。默认情况下，始终使用密钥承诺进行加密，并且仅解密使用密钥承诺加密的加密文字。除非您更改承诺策略，否则 AWS Encryption SDK 不会解密由任何 AWS Encryption SDK早期版本（包括版本 1.7.*x*）加密的加密文字。  
默认情况下，版本 2.0.*x* 不会解密任何不使用密钥承诺加密的加密文字。如果您的应用程序可能遇到不使用密钥承诺加密的加密文字，请使用 `AllowDecrypt` 设置承诺策略值。
在版本 2.0.*x* 中，承诺策略设置有三个有效值：  
+ `ForbidEncryptAllowDecrypt` – AWS Encryption SDK 无法使用密钥承诺进行加密。可以解密使用或不使用密钥承诺加密的加密文字。
+ `RequireEncryptAllowDecrypt` – AWS Encryption SDK 必须使用密钥承诺进行加密。可以解密使用或不使用密钥承诺加密的加密文字。
+ `RequireEncryptRequireDecrypt`（默认）- AWS Encryption SDK 必须使用密钥承诺进行加密。仅使用密钥承诺解密加密文字。
如果您要从的早期版本迁移 AWS Encryption SDK 到版本 2.0。*x*，将承诺政策设置为一个值，以确保您可以解密应用程序可能遇到的所有现有密文。随着时间的推移，您可能会调整此设置。

### 版本 2.2。*x*
<a name="version2.2.x"></a>

增加了对数字签名和限制加密数据密钥的支持。

**注意**  
版本 2。*x *。*x * 的 AWS Encryption SDK for Python AWS Encryption SDK for JavaScript、和 AWS 加密 CLI 处于[支持终止阶段](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)。  
有关以您的首选编程语言[支持和维护](introduction.md#support)此 AWS Encryption SDK 版本的信息，请参阅其[GitHub存储库中的`SUPPORT_POLICY.rst`文件](introduction.md#esdk-repos)。

**数字签名**  
为了改善解密[时对](concepts.md#digital-sigs)数字签名的处理， AWS Encryption SDK 包括以下功能：  
+ *Non-streaming 模式 * — 仅在处理所有输入（包括验证数字签名（如果存在）后才返回纯文本。此功能可防止您在验证数字签名之前使用明文。每当您解密使用数字签名（默认算法套件）加密的数据时，请使用此功能。例如，由于 AWS 加密 CLI 始终以流模式处理数据，因此在使用数字`- -buffer`签名解密文时使用参数。
+ *Unsigned-only 解密模式 * — 此功能仅解密未签名的密文。如果解密遇到加密文字中的数字签名，则操作将失败。使用此功能可以避免在验证签名之前无意中处理已签名邮件中的明文。

**限制加密数据密钥**  
您可以在加密消息中[限制加密数据密钥的数量](configure.md#config-limit-keys)。此功能可以帮助您在加密时检测配置错误的主密钥提供程序或密钥环，或者在解密时识别恶意加密文字。  
解密来自不可信来源的消息时，应限制加密数据密钥。这样可以防止对您的密钥基础设施进行不必要、昂贵、可能详尽的调用。

### 版本 2.3。*x*
<a name="version2.3"></a>

增加了对 AWS KMS 多区域密钥的支持。有关更多信息，请参阅 [使用多区域 AWS KMS keys](configure.md#config-mrks)。

**注意**  
 AWS 加密 CLI 从 3.0 版开始支持多区域密钥。*x *。  
版本 2。*x *。*x * 的 AWS Encryption SDK for Python AWS Encryption SDK for JavaScript、和 AWS 加密 CLI 处于[支持终止阶段](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html#version-life-cycle)。  
有关以您的首选编程语言[支持和维护](introduction.md#support)此 AWS Encryption SDK 版本的信息，请参阅其[GitHub存储库中的`SUPPORT_POLICY.rst`文件](introduction.md#esdk-repos)。