

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

# 那是什么 AWS Encryption SDK？
<a name="introduction"></a>

 AWS Encryption SDK 是一个客户端加密库，旨在让每个人都能轻松地使用行业标准和最佳实践对数据进行加密和解密。这样，您就可以专注于应用程序的核心功能，而不是如何以最佳方式加密和解密数据。在 AWS Encryption SDK Apache 2.0 许可证下免费提供。

这些 AWS Encryption SDK 答案将为你解答如下问题：
+ 我应该使用哪种加密算法？
+ 我应该如何使用该算法或在哪种模式下使用？
+ 我如何生成加密密钥？
+ 我如何保护加密密钥，以及将其存储在什么位置？
+ 我如何使加密的数据具有便携性？
+ 我如何确保目标接收者可以读取我的加密数据？
+ 我如何确保在写入和读取我的加密数据之间不会修改这些数据？
+ 如何使用 AWS KMS 返回的数据密钥？

使用 AWS Encryption SDK，您可以定义[主密钥提供程序](concepts.md#master-key-provider)或密[钥环](concepts.md#keyring)，用于确定使用哪些封装密钥来保护数据。然后，您可以使用提供的简单方法对数据进行加密和解密。 AWS Encryption SDK剩下的 AWS Encryption SDK 就交给了。

如果没有 AWS Encryption SDK，您可能要花更多的精力来构建加密解决方案，而不是花在应用程序的核心功能上。他们通过提供以下内容来 AWS Encryption SDK 回答这些问题。

**遵循加密最佳实践的默认实施**  
默认情况下，会为其加密的每个数据对象 AWS Encryption SDK 生成一个唯一的数据密钥。这遵循在每个加密操作中使用唯一数据密钥的加密最佳实践。  
使用安全、经过身份验证的对称密钥算法对您的数据进行 AWS Encryption SDK 加密。有关更多信息，请参阅 [中支持的算法套件 AWS Encryption SDK](supported-algorithms.md)。

**使用包装密钥保护数据密钥的框架**  
通过在一个或多个封装密钥下加密数据密钥来 AWS Encryption SDK 保护加密您的数据密钥。通过提供一个使用多个包装密钥加密数据密钥的框架， AWS Encryption SDK 这有助于使您的加密数据具有可移植性。  
例如，对来自本地 HSM AWS KMS key 的 AWS KMS 输入和密钥下的数据进行加密。为了避免其中一个密钥不可用或调用方无权使用这两个密钥，您可以使用其中一个包装密钥解密数据。

**采用某种格式的消息，它存储加密的数据密钥以及加密的数据**  
将加密的数据和加密的数据密钥一起 AWS Encryption SDK 存储在使用定义数据格式的[加密消息](concepts.md#message)中。这意味着您无需跟踪或保护加密数据的数据密钥，因为这些密钥是为你 AWS Encryption SDK 做的。

的某些语言实现 AWS Encryption SDK 需要 S AWS DK，但 AWS Encryption SDK 不需要 SDK AWS 账户 ，也不依赖于任何 AWS 服务。 AWS 账户 只有当您选择使用来保护您的数据时 [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys)，才需要一个。

## 在开源存储库中开发
<a name="esdk-repos"></a>

 AWS Encryption SDK 是在上的开源存储库中开发的 GitHub。您可以使用这些存储库查看代码、阅读和提交问题，并且查找特定于您的语言实施的信息。
+ AWS Encryption SDK for C — [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)
+ AWS Encryption SDK 用于.NE [T-`aws-encryption-sdk` 存储库的.NET](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/) 目录。
+ AWS 加密 CLI — [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)
+ AWS Encryption SDK for Java — [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)
+ AWS Encryption SDK for JavaScript — [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)
+ AWS Encryption SDK for Python — [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)
+ AWS Encryption SDK 对于 Rus [t — `aws-encryption-sdk` 存储库的 Rust](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/) 目录。
+ AWS Encryption SDK for G [o — `aws-encryption-sdk` 存储库的 Go](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/) 目录

## 与加密库和服务的兼容性
<a name="intro-compatibility"></a>

 AWS Encryption SDK 有几种[编程语言](programming-languages.md)支持。所有语言实施都是可互操作的。您可以使用一种语言实施进行加密，并使用另一种语言实施进行解密。互操作性可能受到语言约束的限制。如果是这样，这些约束将在有关语言实施的主题中进行描述。此外，在加密和解密时，必须使用兼容的密钥环或主密钥和主密钥提供程序。有关更多信息，请参阅 [密钥环兼容性](choose-keyring.md#keyring-compatibility)。

但是， AWS Encryption SDK 无法与其他库互操作。由于每个库以不同的格式返回加密的数据，因此，您无法使用一个库进行加密并使用另一个库进行解密。

**DynamoDB 加密客户端和 Amazon S3 客户端加密**  <a name="ESDK-DDBEC"></a>
 AWS Encryption SDK [无法解密由 DynamoDB 加密[客户端或 Amazon S3 客户端](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/)加密加密的数据。](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)这些库无法解密返回的[加密消息](concepts.md#message)。 AWS Encryption SDK  

**AWS Key Management Service (AWS KMS)**  <a name="ESDK-KMS"></a>
 AWS Encryption SDK 可以使用的[AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)和[数据密钥](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys)来保护您的数据，包括多区域 KMS 密钥。例如，您可以将配置 AWS Encryption SDK 为在 AWS KMS keys 中的一个或多个下加密您的数据 AWS 账户。但是，您必须使用 AWS Encryption SDK 来解密该数据。  
 AWS Encryption SDK 无法解密 AWS KMS [加密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)或操作返回的密文。[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)同样， AWS KMS [解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)操作无法解密返回的[加密](concepts.md#message)消息。 AWS Encryption SDK   
仅 AWS Encryption SDK 支持对[称加密 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#symmetric-cmks)。您无法使用[非对称 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#asymmetric-cmks)在 AWS Encryption SDK中进行加密或签名。 AWS Encryption SDK 为对消息进行签名的[算法套件](supported-algorithms.md)生成自己的 ECDSA 签名密钥。

## 支持和维护
<a name="support"></a>

 AWS Encryption SDK 使用与 AWS SDK 和工具相同的[维护策略](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html)，包括其版本控制和生命周期阶段。作为[最佳实践](best-practices.md)，我们建议您使用 AWS Encryption SDK 适用于您的编程语言的最新可用版本，并在新版本发布时进行升级。当版本需要进行重大更改时，例如从 1.7 之前的 AWS Encryption SDK 版本升级。 *x* 到 2.0 版本。 *x* 及以后，我们会提供[详细的说明](migration.md)来帮助您。

的每种编程语言实现都 AWS Encryption SDK 是在单独的开源 GitHub 存储库中开发的。每个版本的生命周期和支持阶段可能因存储库而异。例如，给定版本的在一种编程语言中 AWS Encryption SDK 可能处于正式发布（完全支持）阶段，但处于另一种编程语言的 end-of-support阶段。我们建议您尽可能使用全面支持的版本，避免使用不再受支持的版本。

要查找您的编程语言 AWS Encryption SDK 版本的生命周期阶段，请查看每个 AWS Encryption SDK 存储库中的`SUPPORT_POLICY.rst`文件。
+ AWS Encryption SDK for C — s [upport\_policy.r](https://github.com/aws/aws-encryption-sdk-c/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK 适用于.NET — s [upp](https://github.com/aws/aws-encryption-sdk-dafny/blob/mainline/SUPPORT_POLICY.rst) ort\_policy.
+ AWS 加密 CLI — s [upport\_policy.r](https://github.com/aws/aws-encryption-sdk-cli/blob/master/SUPPORT_POLICY.rst) s
+ AWS Encryption SDK for Java — s [upport\_policy.r](https://github.com/aws/aws-encryption-sdk-java/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK for JavaScript — s [upport\_policy.r](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK for Python — s [upport\_policy.r](https://github.com/aws/aws-encryption-sdk-python/blob/master/SUPPORT_POLICY.rst)

有关更多信息，请参阅[的版本 AWS Encryption SDK](about-versions.md)[AWS SDKs 和工具参考指南中的 AWS SDKs 和和和工具维护政策](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html)。

## 了解更多信息
<a name="intro-see-also"></a>

有关 AWS Encryption SDK 和客户端加密的更多信息，请尝试以下来源。
+ 有关该开发工具包中使用的术语和概念的帮助，请参阅[中的概念 AWS Encryption SDK](concepts.md)。
+ 有关最佳实践准则，请参阅 [的最佳实践 AWS Encryption SDK](best-practices.md)。
+ 有关该开发工具包的工作方式的信息，请参阅[该开发工具包的工作方式](how-it-works.md)。
+ 有关展示如何在中配置选项的示例 AWS Encryption SDK，请参阅[正在配置 AWS Encryption SDK](configure.md)。
+ 有关详细的技术信息，请参阅[AWS Encryption SDK 参考](reference.md)。
+ 有关的技术规格 AWS Encryption SDK，请参阅中的[AWS Encryption SDK 规范](https://github.com/awslabs/aws-encryption-sdk-specification/) GitHub。
+ 有关使用问题的答案 AWS Encryption SDK，请阅读[AWS 加密工具讨论论坛](https://forums.aws.amazon.com/forum.jspa?forumID=302)并发帖。

有关 AWS Encryption SDK 在不同编程语言中实现的信息。
+ **C**: [AWS Encryption SDK for C](c-language.md) 请参阅 AWS Encryption SDK [C 文档](https://aws.github.io/aws-encryption-sdk-c/html/)和上的[aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)存储库 GitHub。
+ **C\#/.NET**：参见[AWS Encryption SDK 对于.NET](dot-net.md)，存储库的[aws-encryption-sdk-net](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/)`aws-encryption-sdk`目录已打开。 GitHub
+ **命令行界面**：参见[AWS Encryption SDK 命令行界面](crypto-cli.md)，[阅读 AWS 加密 CLI 的文档](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/)，以及上面的[aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)存储库 GitHub。
+ **Java**：参见 [AWS Encryption SDK for Java](java.md) AWS Encryption SDK [Javadoc](https://aws.github.io/aws-encryption-sdk-java/) 和上面的[aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)存储库。 GitHub

  **JavaScript**: 请参阅[AWS Encryption SDK for JavaScript](javascript.md)，[aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)存储库已打开 GitHub。
+ **Python**：参见 [AWS Encryption SDK for Python](python.md) AWS Encryption SDK [Python 文档](https://aws-encryption-sdk-python.readthedocs.io/en/latest/)和上[aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)面的存储库 GitHub。

## 发送反馈
<a name="report-issues"></a>

我们欢迎您提供反馈！如果您有任何疑问或意见或者要报告问题，请使用以下资源。
+ 如果您在中发现潜在的安全漏洞 AWS Encryption SDK，请[通知 AWS 安全部门](https://aws.amazon.com/security/vulnerability-reporting/)。不要创建公开 GitHub 问题。
+ 要提供相关反馈 AWS Encryption SDK，请在 GitHub 存储库中提交您正在使用的编程语言的问题。
+ 要提供有关本文档的反馈，请使用该页面上的**反馈**链接。您也可以提交问题或为[aws-encryption-sdk-docs](https://github.com/awsdocs/aws-encryption-sdk-docs)本文档的开源存储库做出贡献 GitHub。