使用混合后量子和 TLS AWS KMS - AWS Key Management Service

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

使用混合后量子和 TLS AWS KMS

AWS Key Management Service (AWS KMS) 支持传输层安全 (TLS) 网络加密协议的混合后量子密钥交换选项。当你连接到 AWS KMS API端点时,你可以使用这个TLS选项。我们将在后量子算法标准化之前提供此功能,因此您可以开始测试这些密钥交换协议对 AWS KMS 通话的影响。这些可选的混合后量子密钥交换功能至少与我们当今使用的TLS加密一样安全,并且可能会提供额外的长期安全优势。不过,与目前使用的传统密钥交换协议相比,它们会影响延迟和吞吐量性能。

您发送到 AWS Key Management Service (AWS KMS) 的数据在传输过程中受到传输层安全 (TLS) 连接提供的加密保护。 AWS KMS 支持TLS会话的经典密码套件使得当前技术无法对密钥交换机制进行暴力攻击。但是,如果将来大规模量子计算变得可行,那么TLS密钥交换机制中使用的经典密码套件将容易受到这些攻击。如果您开发的应用程序依赖于通过TLS连接传输的数据的长期机密性,则应考虑在大规模量子计算机可供使用之前迁移到后量子密码学的计划。 AWS 正在努力为这个未来做准备,我们也希望你也做好充分的准备。

为了保护当今加密的数据免受未来潜在的攻击, AWS 正在与密码学界一起开发抗量子算法或后量子算法。我们已经实现了混合后量子密钥交换密码套件 AWS KMS ,该套件结合了经典和后量子元素,以确保您的TLS连接至少与经典密码套件一样牢固。

在大多数情况下,这些混合密码套件可用于您的生产工作负载。 AWS 区域但是,由于混合密码套件的性能特征和带宽要求与经典密钥交换机制的性能特征和带宽要求不同,因此我们建议您在不同的条件下在 AWS KMS API呼叫中对其进行测试

反馈

与以前一样,我们希望您能够提供反馈并参与我们的开源存储库。我们特别想听听您的基础设施是如何与这种新的TLS流量变体交互的。

  • 要提供有关本主题的反馈,请使用此页面右上角的反馈链接。

  • 我们正在的s2n-tls存储库中以开源方式开发这些混合密码套件。 GitHub要提供有关密码套件可用性方面的反馈,或者共享全新的测试条件或结果,请在 s2n-tls 存储库中创建问题

  • 我们正在编写代码示例,以便在aws-kms-pq-tls-example GitHub存储库 AWS KMS 中TLS使用混合后量子。要提出问题或分享有关配置HTTP客户端或 AWS KMS 客户端以使用混合密码套件的想法,请在存储库中aws-kms-pq-tls-example创建问题

支持的 AWS 区域

后量子TLS版 AWS KMS 适用于除中国(北京)和中国(宁夏)以外的所有 AWS 区域 AWS KMS 支持国家。

注意

AWS KMS 中的FIPS AWS GovCloud (US)端点不支持混合后TLS量子。

有关每个 AWS KMS 终端节点的列表 AWS 区域,请参阅中的AWS Key Management Service 终端节点和配额Amazon Web Services 一般参考。有关FIPS终端节点的信息,请参阅中的FIPS终端节点Amazon Web Services 一般参考

关于混合后量子密钥交换 TLS

AWS KMS 支持混合后量子密钥交换密码套件。您可以在 Linux 系统上使用 AWS SDK for Java 2.x 和 AWS 通用运行时来配置使用这些密码套件的HTTP客户端。然后,每当你使用HTTP客户端连接到 AWS KMS 终端节点时,都会使用混合密码套件。

此HTTP客户端使用 s2n-tls,这是该TLS协议的开源实现。s2n-tls 使用的混合密码套件只能用于密钥交换,而不能用于直接数据加密。在密钥交换过程中,客户端和服务器会计算将用于加密和解密传输中的数据的密钥。

s2n-tls使用的算法是混合算法,它将当今使用的经典密钥交换算法 Elliptic Curve Diffie-Hellman (ECDH) 与美国国家标准与Kyber技术研究所 (NIST) 指定为其第一个标准后量子密钥协议算法的公钥加密和密钥建立算法相结合。TLS此混合算法单独使用每个算法来生成密钥。然后,以加密方式结合使用这两个密钥。使用s2n-tls,您可以将HTTP客户端配置为首选 post-quantumTLS,它在首选项列表中排在Kyber第一位ECDH。传统密钥交换算法包含在优先列表中以确保兼容性,但它们的优先顺序较低。

如果正在进行的研究表明该Kyber算法缺乏预期的后量子强度,那么混合密钥仍然至少与目前使用的单一ECDH密钥一样强大。在关于后量子算法的研究完成之前,我们建议使用混合算法,而不是单独使用后量子算法。

使用混合后量子和 TLS AWS KMS

您可以使用混合后量子调TLS用 AWS KMS. 在设置HTTP客户端测试环境时,请注意以下信息:

传输中加密

s2n-tls 中的混合密码套件仅用于传输中加密。当您的数据从您的客户端传输到 AWS KMS 终端时,它们会保护您的数据。 AWS KMS 不使用这些密码套件对下的数据进行加密。 AWS KMS keys

取而代之的是,在KMS密钥下 AWS KMS 加密数据时,它使用带有 256 位密钥的对称加密和伽罗瓦计数器模式下的高级加密标准 (AES-GCM) 算法,该算法已经具有量子抗性。从理论上讲,未来,对在256位AES以下创建的密文进行大规模的量子计算攻击会将GCM密钥的有效安全性降低到 128位。这个安全级别足以使对 AWS KMS 密文进行暴力攻击变得不可行。

支持的系统

目前,仅在 Linux 系统上支持使用 s2n-tls 中的混合密码套件。此外,只有支持 AWS 公共运行时的密码套件SDKs才支持这些密码套件,例如。 AWS SDK for Java 2.x有关示例,请参阅如何配置混合后量子 TLS

AWS KMS 端点

使用混合密码套件时,请使用标准 AWS KMS 端点。中的混合密码套件与经过验证s2n-tls的 FIPS140-2 端点不兼容。 AWS KMS

当您将HTTP客户端配置为首选后量子TLS连接时s2n-tls,后量子密码在密码首选项列表中排在第一位。但是,在优先列表中,传统非混合密码处于较低的优先顺序,以便实现兼容性。当您将HTTP客户端配置为首选经过 AWS KMS FIPS 140-2验证TLS的端点的后量子时,s2n-tls将协商经典的非混合密钥交换密码。

有关每个 AWS KMS 终端节点的列表 AWS 区域,请参阅中的AWS Key Management Service 终端节点和配额Amazon Web Services 一般参考。有关FIPS终端节点的信息,请参阅中的FIPS终端节点Amazon Web Services 一般参考

预期性能

我们的早期基准测试表明,中的混合密码套件比经典TLS密码套s2n-tls件慢。效果因网络配置文件、CPU速度、内核数量和通话速率而异。有关性能测试结果,请参阅如何使用Kyb TLS er调整混合后量子密码学

如何配置混合后量子 TLS

在此过程中,为 AWS 通用运行时HTTP客户端添加 Maven 依赖关系。接下来,配置一个首选后TLS量子版本的HTTP客户端。然后,创建一个使用该 AWS KMS 客户端的HTTP客户端。

要查看配置和使用混合后量子TLS与的完整工作示例 AWS KMS,请参阅aws-kms-pq-tls-example存储库。

注意

C AWS ommon Runtime HTTP Client 已作为预览版推出,已于 2023 年 2 月正式上市。在正式发行版中,tlsCipherPreference 类和 tlsCipherPreference() 方法参数已替换为 postQuantumTlsEnabled() 方法参数替。如果您在预览期间使用此示例,则需要更新您的代码。

  1. 将 AWS 通用运行时客户端添加到你的 Maven 依赖项中。我们建议您使用最新可用版本。

    例如,此语句将 AWS 通用运行时客户端2.20.0的版本添加到您的 Maven 依赖项中。

    <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>aws-crt-client</artifactId> <version>2.20.0</version> </dependency>
  2. 要启用混合后量子密码套件,请将其添加到您的项目中并对其 AWS SDK for Java 2.x 进行初始化。然后在您的HTTP客户端上启用混合后量子密码套件,如以下示例所示。

    此代码使用 m postQuantumTlsEnabled() ethod 参数来配置一个AWS 常用的运行时HTTP客户端,该客户端更喜欢推荐的混合后量子密码套件 Kyber。ECDH然后,它使用配置的HTTP客户端来构建异 AWS KMS 步客户端的实例KmsAsyncClient。此代码完成后,KmsAsyncClient实例上的所有AWS KMS API请求都使用混合后量子TLS。

    // Configure HTTP client SdkAsyncHttpClient awsCrtHttpClient = AwsCrtAsyncHttpClient.builder() .postQuantumTlsEnabled(true) .build(); // Create the AWS KMS async client KmsAsyncClient kmsAsync = KmsAsyncClient.builder() .httpClient(awsCrtHttpClient) .build();
  3. 使用混合后量子TLS测试您的 AWS KMS 通话。

    当您在配置的 AWS KMS 客户端上调用 AWS KMS API操作时,您的呼叫将使用混合后量子TLS传输到 AWS KMS 端点。要测试您的配置,请致电 AWS KMS API,例如ListKeys

    ListKeysReponse keys = kmsAsync.listKeys().get();

使用以下方法测试混合后量子 TLS AWS KMS

考虑在调用的应用程序上使用混合密码套件运行以下测试。 AWS KMS

  • 运行负载测试和基准测试。混合密码套件的执行方式与传统密钥交换算法有所不同。您可能需要调整连接超时,以便增加握手时间。如果您在 AWS Lambda 函数内部运行,请延长执行超时设置。

  • 请尝试从不同位置进行连接。根据您的请求所采用的网络路径,您可能会发现中间主机、代理或带有深度数据包检查功能的防火墙 (DPI) 阻止了该请求。这可能是由于在TLS握手ClientHello部分使用了新的密码套件,或者是较大的密钥交换消息所致。如果您在解决这些问题时遇到问题,请与您的安全团队或 IT 管理员合作更新相关配置并解除对新TLS密码套件的封锁。

了解有关后量子TLS学的更多信息 AWS KMS

有关TLS在中使用混合后量子的更多信息 AWS KMS,请参阅以下资源。