Compatibilidade do AWS Encryption SDK para JavaScript - SDK de criptografia da AWS

Se fornecermos uma tradução da versão em inglês do guia, a versão em inglês prevalecerá caso haja qualquer conflito entre as versões. A tradução é fornecida com o uso de tradução por máquina.

Compatibilidade do AWS Encryption SDK para JavaScript

O AWS Encryption SDK para JavaScript é projetado para ser interoperável com outras implementações de linguagem do SDK de criptografia da AWS. Na maioria dos casos, você pode criptografar dados com o AWS Encryption SDK para JavaScript e descriptografá-los com qualquer outra implementação de linguagem, incluindo a Interface de linha de comando do SDK de criptografia da AWS. E você pode usar o AWS Encryption SDK para JavaScript para descriptografar mensagens criptografadas produzidas por outras implementações de linguagem do SDK de criptografia da AWS.

No entanto, ao usar o AWS Encryption SDK para JavaScript, você precisa estar ciente de alguns problemas de compatibilidade na implementação da linguagem JavaScript e em navegadores da Web.

Além disso, ao usar implementações de linguagem diferentes, configure tokens de autenticação, provedores de chaves mestras e chaves mestras compatíveis. Para obter mais detalhes, consulte Compatibilidade dos tokens de autenticação.

Compatibilidade do AWS Encryption SDK para JavaScript

A implementação de JavaScript do SDK de criptografia da AWS difere de outras implementações de linguagem nas seguintes maneiras:

  • A operação de criptografia do AWS Encryption SDK para JavaScript não retorna texto cifrado não emoldurado. No entanto, o AWS Encryption SDK para JavaScript descriptografará texto cifrado e não emoldurado retornado por outras implementações de linguagem do SDK de criptografia da AWS.

  • Começando com o Node.js versão 12.9.0, o Node.js é compatível com as seguintes opções de empacotamento de chave RSA:

    • OAEP com SHA1, SHA256, SHA384 ou SHA512

    • OAEP com SHA1 e MGF1 com SHA1

    • PKCS1v15

  • Antes da versão 12.9.0, o Node.js era compatível apenas com as seguintes opções de empacotamento de chave RSA:

    • OAEP com SHA1 e MGF1 com SHA1

    • PKCS1v15

Compatibilidade do navegador

Alguns navegadores da Web não são compatíveis com operações de criptografia básicas exigidas pelo AWS Encryption SDK para JavaScript. Você pode compensar algumas das operações ausentes configurando um fallback para a API WebCrypto que o navegador implementa.

Limitações de navegador da Web

As seguintes limitações são comuns a todos os navegadores da Web:

  • A API WebCrypto não é compatível com o empacotamento de chaves PKCS1v15.

  • Os navegadores não são compatíveis com chaves de 192 bits.

Operações de criptografia necessárias

O AWS Encryption SDK para JavaScript requer as seguintes operações em navegadores da Web. Se um navegador não for compatível com estas operações, ele será incompatível com o AWS Encryption SDK para JavaScript.

  • O navegador deve incluir crypto.getRandomValues(), que é um método para gerar valores de criptografia aleatórios. Para obter informações sobre as versões do navegador da Web compatíveis com o crypto.getRandomValues(), consulte Posso usar crypto.getRandomValues()?.

Fallback necessário

O AWS Encryption SDK para JavaScript requer as seguintes bibliotecas e operações em navegadores da Web. Se você oferecer suporte a um navegador da Web que não atenda a esses requisitos, deverá configurar um fallback. Caso contrário, as tentativas de usar o AWS Encryption SDK para JavaScript com o navegador falharão.

  • A API WebCrypto, que executa operações de criptografia básicas em aplicativos Web, não está disponível para todos os navegadores. Para obter informações sobre as versões do navegador da Web compatíveis com a criptografia da Web, consulte Posso usar criptografia da Web?.

  • As versões modernas do navegador da Web Safari não são compatíveis com a criptografia AES-GCM de zero bytes, exigida pelo SDK de criptografia da AWS. Se o navegador implementar a API WebCrypto, mas não puder usar o AES-GCM para criptografar zero bytes, o AWS Encryption SDK para JavaScript usará a biblioteca de fallback somente para criptografia de zero bytes. Ele usa a API WebCrypto para todas as outras operações.

Para configurar um fallback para qualquer limitação, adicione as seguintes instruções ao seu código. Na função configureFallback especifique uma biblioteca que seja compatível com os recursos ausentes. O exemplo a seguir usa a Microsoft Research JavaScript Cryptography Library (msrcrypto), mas você pode substituí-la por uma biblioteca compatível. Para obter um exemplo completo, consulte fallback.ts.

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