AWS Encryption SDK for JavaScript的兼容性 - AWS Encryption SDK

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

AWS Encryption SDK for JavaScript的兼容性

AWS Encryption SDK for JavaScript从设计上可以与 AWS Encryption SDK的其他语言实施进行互操作。在大多数情况下,您可以使用AWS Encryption SDK for JavaScript加密数据,并使用任何其他语言实施解密数据,包括 AWS Encryption SDK命令行界面。而且,您可以使用 AWS Encryption SDK for JavaScript 解密由 AWS Encryption SDK 其他语言实施生成的加密消息

不过,在使用 AWS Encryption SDK for JavaScript 时,您需要注意 JavaScript 语言实施和 Web 浏览器中的某些兼容性问题。

此外,在使用不同的语言实施时,请务必配置兼容的主密钥提供程序、主密钥和密钥环。有关详细信息,请参阅 密钥环兼容性

AWS Encryption SDK for JavaScript兼容性

AWS Encryption SDK 的 JavaScript 实施在以下方面与其他语言实施有所不同:

  • AWS Encryption SDK for JavaScript的加密操作不返回非帧密文。不过,AWS Encryption SDK for JavaScript将解密由 AWS Encryption SDK的其他语言实施返回的帧和非帧密文。

  • 从 Node.js 12.9.0 版开始,Node.js 支持以下 RSA 密钥包装选项:

    • 具有 SHA1、SHA256、SHA384 或 SHA512 的 OAEP

    • 具有 SHA1 的 OAEP 和具有 SHA1 的 MGF1

    • PKCS1v15

  • 在 12.9.0 版之前,Node.js 仅支持以下 RSA 密钥包装选项:

    • 具有 SHA1 的 OAEP 和具有 SHA1 的 MGF1

    • PKCS1v15

浏览器兼容性

某些 Web 浏览器不支持 AWS Encryption SDK for JavaScript 所需的基本加密操作。您可以为浏览器实施的 WebCrypto API 配置回退以弥补某些缺少的操作。

Web 浏览器限制

以下限制是所有 Web 浏览器通用的:

  • WebCrypto API 不支持 PKCS1v15 密钥包装。

  • 浏览器不支持 192 位密钥。

所需的加密操作

AWS Encryption SDK for JavaScript需要在 Web 浏览器中使用以下操作。如果浏览器不支持这些操作,则它与AWS Encryption SDK for JavaScript不兼容。

所需的回退

AWS Encryption SDK for JavaScript需要在 Web 浏览器中使用以下库和操作。如果您支持的 Web 浏览器不满足这些要求,您必须配置回退。否则,尝试将AWS Encryption SDK for JavaScript与浏览器一起使用将会失败。

  • WebCrypto API 在 Web 应用程序中执行基本加密操作,该 API 并非适用于所有浏览器。有关支持 Web 加密的 Web 浏览器版本的信息,请参阅我是否可以使用 Web 加密?

  • 最新版本的 Safari Web 浏览器不支持零字节的 AES-GCM 加密,这是 AWS Encryption SDK所必需的。如果浏览器实施了 WebCrypto API,但无法使用 AES-GCM 加密零字节,则AWS Encryption SDK for JavaScript仅使用回退库进行零字节加密。它使用 WebCrypto API 执行所有其他操作。

要为这两种限制配置回退,请将以下语句添加到代码中。在 configureFallback 函数中,指定一个支持缺少的功能的库。以下示例使用 Microsoft 研究 JavaScript 加密库 (msrcrypto),但您可以将其替换为兼容的库。有关完整的示例,请参阅 fallback.ts

import { configureFallback } from '@aws-crypto/client-browser' configureFallback(msrCrypto)