RSAChaveiros Raw - AWS Encryption SDK

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

RSAChaveiros Raw

O RSA chaveiro Raw executa criptografia e descriptografia assimétricas de chaves de dados na memória local com as chaves RSA públicas e privadas fornecidas por você. Você precisa gerar, armazenar e proteger a chave privada, preferencialmente em um módulo de segurança de hardware (HSM) ou sistema de gerenciamento de chaves. A função de criptografia criptografa a chave de dados sob a chave RSA pública. A função de descriptografia descriptografa a chave de dados usando a chave privada. Você pode selecionar entre os vários modos de RSA preenchimento.

Um RSA chaveiro bruto que criptografa e descriptografa deve incluir um par assimétrico de chave pública e chave privada. No entanto, você pode criptografar dados com um RSA chaveiro bruto que tenha apenas uma chave pública e descriptografar dados com um RSA chaveiro bruto que tenha apenas uma chave privada. Você pode incluir qualquer RSA chaveiro Raw em um chaveiro múltiplo. Se você configurar um RSA chaveiro Raw com uma chave pública e privada, certifique-se de que eles façam parte do mesmo par de chaves. Algumas implementações de linguagem do não AWS Encryption SDK construirão um RSA chaveiro Raw com chaves de pares diferentes. Outras pessoas confiam em você para verificar se suas chaves são do mesmo par de chaves.

O RSA chaveiro Raw é equivalente e interopera com o JceMasterKeyin the AWS Encryption SDK for Java e o RawMasterKeyin the AWS Encryption SDK for Python quando são usados com chaves de criptografia RSA assimétricas. Você pode criptografar dados com uma implementação e descriptografá-los com qualquer outra implementação usando a mesma chave de encapsulamento. Para obter detalhes, consulte Compatibilidade dos tokens de autenticação.

nota

O RSA chaveiro Raw não suporta teclas assimétricasKMS. Se você quiser usar RSA KMS chaves assimétricas, versão 4. x do AWS Encryption SDK formulário. NETe a versão 3. x dos AWS KMS chaveiros de AWS Encryption SDK for Java suporte que usam criptografia simétrica (SYMMETRIC_DEFAULT) ou assimétrica. RSA AWS KMS keys

Se você criptografar dados com um RSA chaveiro Raw que inclua a chave pública de uma RSA KMS chave, nem o AWS Encryption SDK nem AWS KMS poderá decifrá-la. Você não pode exportar a chave privada de uma chave AWS KMS assimétrica para um KMS chaveiro RawRSA. A operação de AWS KMS descriptografia não pode descriptografar a mensagem criptografada retornada. AWS Encryption SDK

Ao criar um RSA chaveiro Raw no AWS Encryption SDK for C, certifique-se de fornecer o conteúdo do PEM arquivo que inclui cada chave como uma string C terminada em nulo, não como um caminho ou nome de arquivo. Ao criar um RSA chaveiro Raw JavaScript, esteja ciente da possível incompatibilidade com outras implementações de linguagem.

Namespaces e nomes

Para identificar o material RSA chave em um chaveiro, o RSA chaveiro Raw usa um namespace e um nome de chave fornecidos por você. Esses valores não são secretos. Eles aparecem em texto simples no cabeçalho da mensagem criptografada que a operação de criptografia retorna. Recomendamos usar o namespace e o nome da chave que identificam o par de chaves (ou sua RSA chave privada) no seu HSM sistema ou no sistema de gerenciamento de chaves.

nota

O namespace da chave e o nome da chave são equivalentes aos campos ID do provedor (ou provedor) e ID da chave no JceMasterKey e no RawMasterKey.

O AWS Encryption SDK for C reserva o valor do namespace da aws-kms chave para KMS as chaves. Não o use em um AES chaveiro Raw ou em um RSA chaveiro Raw com o. AWS Encryption SDK for C

Se você cria tokens de autenticação diferentes para criptografar e descriptografar determinada mensagem, o namespace e os valores do nome são cruciais. Se o namespace e o nome da chave no token de autenticação de descriptografia não corresponderem exatamente e com distinção entre maiúsculas e minúsculas ao namespace e ao nome da chave no token de autenticação de criptografia, o token de autenticação de descriptografia não será usado, mesmo que as chaves sejam do mesmo par de chaves.

O namespace da chave e o nome da chave do material da chave nos chaveiros de criptografia e decodificação devem ser os mesmos, independentemente de o chaveiro conter a chave RSA pública, a chave RSA privada ou ambas as chaves no par de chaves. Por exemplo, suponha que você criptografe dados com um RSA chaveiro bruto para uma chave RSA pública com namespace HSM_01 e nome de chave. RSA_2048_06 Para descriptografar esses dados, construa um RSA chaveiro Raw com a chave privada (ou par de chaves) e o mesmo namespace e nome de chave.

Modo de preenchimento

Você deve especificar um modo de preenchimento para RSA chaveiros Raw usados para criptografia e descriptografia, ou usar recursos de sua implementação de linguagem que o especifiquem para você.

O AWS Encryption SDK suporta os seguintes modos de preenchimento, sujeitos às restrições de cada idioma. Recomendamos um modo OAEPde preenchimento, especialmente OAEP com SHA -256 e MGF1 com SHA -256 Padding. O modo PKCS1de preenchimento é suportado somente para compatibilidade com versões anteriores.

  • OAEPcom SHA -1 e MGF1 com SHA -1 Padding

  • OAEPcom SHA -256 e MGF1 com SHA -256 Padding

  • OAEPcom SHA -384 e MGF1 com SHA preenchimento -384

  • OAEPcom SHA -512 e MGF1 com SHA -512 Padding

  • PKCS1Acolchoamento v1.5

Os exemplos a seguir mostram como criar um RSA chaveiro Raw com a chave pública e privada de um par de RSA chaves e o modo de preenchimento OAEP com SHA -256 e MGF1 SHA -256. As variáveis RSAPublicKey e RSAPrivateKey representam o material principal fornecido por você.

C

Para criar um RSA chaveiro Raw no AWS Encryption SDK for C, useaws_cryptosdk_raw_rsa_keyring_new.

Ao criar um RSA chaveiro Raw no AWS Encryption SDK for C, certifique-se de fornecer o conteúdo do PEM arquivo que inclui cada chave como uma string C terminada em nulo, não como um caminho ou nome de arquivo. Para obter um exemplo completo, consulte raw_rsa_keyring.c.

struct aws_allocator *alloc = aws_default_allocator(); AWS_STATIC_STRING_FROM_LITERAL(key_namespace, "HSM_01"); AWS_STATIC_STRING_FROM_LITERAL(key_name, "RSA_2048_06"); struct aws_cryptosdk_keyring *rawRsaKeyring = aws_cryptosdk_raw_rsa_keyring_new( alloc, key_namespace, key_name, private_key_from_pem, public_key_from_pem, AWS_CRYPTOSDK_RSA_OAEP_SHA256_MGF1);
C# / .NET

Para instanciar um RSA chaveiro Raw no formulário. AWS Encryption SDK NET, use o materialProviders.CreateRawRsaKeyring() método. Para ver um exemplo completo, consulte R awRSAKeyring Example.cs.

O exemplo a seguir usa a versão 4. x do AWS Encryption SDK formulário. NET.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); var keyNamespace = "HSM_01"; var keyName = "RSA_2048_06"; // Get public and private keys from PEM files var publicKey = new MemoryStream(System.IO.File.ReadAllBytes("RSAKeyringExamplePublicKey.pem")); var privateKey = new MemoryStream(System.IO.File.ReadAllBytes("RSAKeyringExamplePrivateKey.pem")); // Create the keyring input var createRawRsaKeyringInput = new CreateRawRsaKeyringInput { KeyNamespace = keyNamespace, KeyName = keyName, PaddingScheme = PaddingScheme.OAEP_SHA512_MGF1, PublicKey = publicKey, PrivateKey = privateKey }; // Create the keyring var rawRsaKeyring = materialProviders.CreateRawRsaKeyring(createRawRsaKeyringInput);
JavaScript Browser

O AWS Encryption SDK para JavaScript no navegador obtém suas primitivas criptográficas da WebCryptobiblioteca. Antes de construir o chaveiro, você deve usar importPublicKey() e/ou importar importPrivateKey() a matéria-prima da chave para o WebCrypto backend. Isso garante que o chaveiro esteja completo, mesmo que todas as chamadas sejam WebCrypto assíncronas. O objeto usado pelos métodos de importação inclui o algoritmo de encapsulamento e seu modo de preenchimento.

Depois de importar o material da chave, use o método RawRsaKeyringWebCrypto() para instanciar o token de autenticação. Ao criar um RSA chaveiro Raw JavaScript, esteja ciente da possível incompatibilidade com outras implementações de linguagem.

O exemplo a seguir usa a buildClient função para especificar a política de compromisso padrão,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Você também pode usar o buildClient para limitar o número de chaves de dados criptografadas em uma mensagem criptografada. Para obter mais informações, consulte Limitar as chaves de dados criptografadas.

Para ver um exemplo completo, consulte rsa_simple.ts (Browser). JavaScript

import { RsaImportableKey, RawRsaKeyringWebCrypto, buildClient, CommitmentPolicy, } from '@aws-crypto/client-browser' const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) const privateKey = await RawRsaKeyringWebCrypto.importPrivateKey( privateRsaJwKKey ) const publicKey = await RawRsaKeyringWebCrypto.importPublicKey( publicRsaJwKKey ) const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringWebCrypto({ keyName, keyNamespace, publicKey, privateKey, })
JavaScript Node.js

Para instanciar um RSA chaveiro Raw no AWS Encryption SDK para JavaScript Node.js, crie uma nova instância da classe. RawRsaKeyringNode O parâmetro wrapKey contém a chave pública. O parâmetro unwrapKey contém a chave privada. O construtor RawRsaKeyringNode calcula um modo de preenchimento padrão, embora você possa especificar um modo de preenchimento preferencial.

Ao criar um RSA chaveiro bruto JavaScript, esteja ciente da possível incompatibilidade com outras implementações de linguagem.

O exemplo a seguir usa a buildClient função para especificar a política de compromisso padrão,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Você também pode usar o buildClient para limitar o número de chaves de dados criptografadas em uma mensagem criptografada. Para obter mais informações, consulte Limitar as chaves de dados criptografadas.

Para ver um exemplo completo, consulte rsa_simple.ts (Node.js). JavaScript

import { RawRsaKeyringNode, buildClient, CommitmentPolicy, } from '@aws-crypto/client-node' const { encrypt, decrypt } = buildClient( CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) const keyNamespace = 'HSM_01' const keyName = 'RSA_2048_06' const keyring = new RawRsaKeyringNode({ keyName, keyNamespace, rsaPublicKey, rsaPrivateKey})
Java
final CreateRawRsaKeyringInput keyringInput = CreateRawRsaKeyringInput.builder() .keyName("RSA_2048_06") .keyNamespace("HSM_01") .paddingScheme(PaddingScheme.OAEP_SHA256_MGF1) .publicKey(RSAPublicKey) .privateKey(RSAPrivateKey) .build(); final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); IKeyring rawRsaKeyring = matProv.CreateRawRsaKeyring(keyringInput);
Python

O exemplo a seguir instancia o AWS Encryption SDK cliente com a política de compromisso padrão,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT Para ver um exemplo completo, consulte raw_rsa_keyring_example.py no AWS Encryption SDK for Python repositório em GitHub.

# Define the key namespace and key name key_name_space = "HSM_01" key_name = "RSA_2048_06" # Instantiate the material providers mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create Raw RSA keyring keyring_input: CreateRawRsaKeyringInput = CreateRawRsaKeyringInput( key_namespace=key_name_space, key_name=key_name, padding_scheme=PaddingScheme.OAEP_SHA256_MGF1, public_key=RSAPublicKey, private_key=RSAPrivateKey ) raw_rsa_keyring: IKeyring = mat_prov.create_raw_rsa_keyring( input=keyring_input )