AWS Encryption SDK 是什么? - AWS Encryption SDK

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

AWS Encryption SDK 是什么?

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

AWS Encryption SDK为您解答了如下问题:

  • 我应该使用哪种加密算法?

  • 我应该如何使用该算法或在哪种模式下使用?

  • 我如何生成加密密钥?

  • 我如何保护加密密钥,以及将其存储在什么位置?

  • 我如何使加密的数据具有便携性?

  • 我如何确保目标接收者可以读取我的加密数据?

  • 我如何确保在写入和读取我的加密数据之间不会修改这些数据?

  • 如何使用 AWS KMS 返回的数据密钥?

借助 AWS Encryption SDK,您可以定义主密钥提供程序(Java 或 Python)或密钥环(C、C#/.NET 和 JavaScript),用以确定要用哪些包装密钥保护您的数据。然后,您使用 AWS Encryption SDK提供的简单方法加密和解密数据。AWS Encryption SDK将完成其余操作。

如果没有 AWS Encryption SDK,在构建加密解决方案时,您可能会花费更多精力以构建应用程序的核心功能。AWS Encryption SDK提供了以下内容以解答这些问题。

遵循加密最佳实践的默认实施

默认情况下,AWS Encryption SDK为它加密的每个数据对象生成唯一的数据密钥。这遵循在每个加密操作中使用唯一数据密钥的加密最佳实践。

AWS Encryption SDK使用经过身份验证的安全对称密钥算法加密数据。有关更多信息,请参阅 AWS Encryption SDK中支持的算法套件

使用包装密钥保护数据密钥的框架

对于加密您的数据的数据密钥,AWS Encryption SDK 使用一个或多个包装密钥对其进行加密以提供保护。通过提供一个框架以使用多个包装密钥加密数据密钥,AWS Encryption SDK 有助于使您的加密数据具有便携性。

例如,使用 AWS KMS 中的 AWS KMS key 和来自本地 HSM 的密钥对数据进行加密。为了避免其中一个密钥不可用或调用方无权使用这两个密钥,您可以使用其中一个包装密钥解密数据。

采用某种格式的消息,它存储加密的数据密钥以及加密的数据

AWS Encryption SDK将加密的数据和加密的数据密钥一起存储在加密的消息中,该消息使用定义的数据格式。这意味着,您不需要跟踪或保护加密数据的数据密钥,因为 AWS Encryption SDK为您执行该操作。

AWS Encryption SDK 的某些语言实施需要使用 AWS SDK,但 AWS Encryption SDK 不需要使用 AWS 账户,也不依赖于任何 AWS 服务。只有当您选择使用 AWS KMS keys 保护您的数据时才需要 AWS 账户。

在开源存储库中开发

AWS Encryption SDK 在 GitHub 的开源存储库中进行开发。您可以使用这些存储库查看代码、阅读和提交问题,并且查找特定于您的语言实施的信息。

与加密库和服务的兼容性

有几种编程语言支持 AWS Encryption SDK。所有语言实施都是可互操作的。您可以使用一种语言实施进行加密,并使用另一种语言实施进行解密。互操作性可能受到语言约束的限制。如果是这样,这些约束将在有关语言实施的主题中进行描述。此外,在加密和解密时,必须使用兼容的密钥环或主密钥和主密钥提供程序。有关详细信息,请参阅 密钥环兼容性

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

DynamoDB 加密客户端和 Amazon S3 客户端加密

AWS Encryption SDK 无法解密通过 DynamoDB 加密客户端Amazon S3 客户端加密功能加密的数据。这些库无法解密 AWS Encryption SDK 返回的加密消息。 

AWS Key Management Service (AWS KMS)

AWS Encryption SDK 可以使用 AWS KMS keys数据密钥来保护您的数据,包括多区域 KMS 密钥。例如,您可以配置 AWS Encryption SDK 以使用您的 AWS 账户 账户中的一个或多个 AWS KMS keys 加密数据。不过,您必须使用 AWS Encryption SDK以解密该数据。

AWS Encryption SDK无法解密 AWS KMS EncryptReEncrypt 操作返回的密文。同样,AWS KMS Decrypt操作无法对 AWS Encryption SDK 返回的加密消息进行解密。

AWS Encryption SDK 仅支持对称加密 KMS 密钥。您无法使用非对称 KMS 密钥在 AWS Encryption SDK 中进行加密或签名。AWS Encryption SDK为对消息进行签名的算法套件生成自己的 ECDSA 签名密钥。

有关决定使用具体库或服务的帮助,请参阅《AWS Cryptographic Services and Tools》中的 How to Choose an Encryption Tool or Service

支持和维护

AWS Encryption SDK 使用与 AWS SDK 和工具相同的维护策略,包括其版本控制和生命周期阶段。作为最佳实践,我们建议您使用适用于您的编程语言的 AWS Encryption SDK 最新可用版本,并在新版本发布时进行升级。当版本需要进行重大更改时,例如从 AWS Encryption SDK 1.7.x 之前的版本升级到版本 2.0.x 和更高版本,我们会为您提供详细说明

AWS Encryption SDK 的每种编程语言实施均在单独的开源 GitHub 存储库中进行开发。每个版本的生命周期和支持阶段可能因存储库而异。例如,AWS Encryption SDK 给定版本在正式发布(全面支持)阶段可能采用某种编程语言,但终止支持阶段可能使用其他编程语言。我们建议您尽可能使用全面支持的版本,避免使用不再受支持的版本。

要查找您的编程语言 AWS Encryption SDK 版本的生命周期阶段,请查看各 AWS Encryption SDK 存储库中的 SUPPORT_POLICY.rst 文件。

有关更多信息,请参阅《AWS SDKs and Tools Reference Guide》中的 AWS Encryption SDK 的版本AWS SDKs and Tools maintenance policy

了解更多信息

有关 AWS Encryption SDK和客户端加密的更多信息,请尝试使用以下资源。

有关使用不同编程语言的 AWS Encryption SDK实施的信息,请参阅:

发送反馈

我们欢迎您提供反馈!如果您有任何疑问或意见或者要报告问题,请使用以下资源。

  • 如果您在 AWS Encryption SDK中发现潜在的安全漏洞,请通知 AWS 安全部门。不要创建公开的 GitHub 问题。

  • 要提供有关 AWS Encryption SDK的反馈,请在 GitHub 存储库中针对您使用的编程语言提出问题。

  • 要提供有关本文档的反馈,请使用该页面上的反馈链接。您也可以向 aws-encryption-sdk-docs 提交问题或供稿,这是本文档在 GitHub 上的开源存储库。