RSALlaveros sin procesar - AWS Encryption SDK

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

RSALlaveros sin procesar

El RSA anillo de claves Raw realiza el cifrado y el descifrado asimétricos de las claves de datos de la memoria local con las claves RSA públicas y privadas que usted proporciona. Debe generar, almacenar y proteger la clave privada, preferiblemente en un módulo de seguridad de hardware (HSM) o en un sistema de administración de claves. La función de cifrado cifra la clave de datos bajo la clave RSA pública. La función de descifrado descifra la clave de datos utilizando la clave privada. Puede seleccionar entre los distintos modos de RSArelleno.

Un conjunto de RSA claves RAW que cifra y descifra debe incluir una clave pública y una clave privada asimétricas. Sin embargo, puede cifrar los datos con un RSA anillo de claves RAW que solo tenga una clave pública y puede descifrar los datos con un anillo de claves RAW que solo tenga una RSA clave privada. Puede incluir cualquier conjunto de RSA claves RAW en un conjunto de claves múltiples. Si configura un conjunto de RSA claves RAW con una clave pública y privada, asegúrese de que formen parte del mismo par de claves. Algunas implementaciones lingüísticas del no AWS Encryption SDK construirán un RSA anillo de claves Raw con claves de pares diferentes. Otros confían en usted para comprobar que sus claves pertenecen al mismo par de claves.

El RSA anillo de claves Raw es equivalente e interopera con el interior SDK de cifrado de AWS para Java y JceMasterKeyel RawMasterKeyinterior SDK de cifrado de AWS para Python cuando se utiliza con RSA claves de cifrado asimétricas. Puede cifrar los datos con una implementación y descifrarlos con cualquier otra implementación mediante la misma clave de encapsulamiento. Para obtener más información, consulte Compatibilidad de conjuntos de claves.

nota

El RSA anillo de claves Raw no admite claves asimétricas. KMS Si desea utilizar RSA KMS claves asimétricas, versión 4. x de la forma AWS Encryption SDK . NETy versión 3. x de los AWS KMS anillos de claves SDK de cifrado de AWS para Java compatibles que utilizan cifrado simétrico (SYMMETRIC_DEFAULT) o asimétrico. RSA AWS KMS keys

Si cifra los datos con un conjunto de RSA claves RAW que incluye la clave pública de una RSA KMS clave, ni ellos ni ellos pueden descifrarlos. AWS Encryption SDK AWS KMS No puede exportar la clave privada de una clave AWS KMS asimétrica a un anillo de KMS claves RAW. RSA La operación de AWS KMS descifrado no puede descifrar el mensaje cifrado que devuelve. AWS Encryption SDK

Al crear un conjunto de RSA claves sin procesar en el SDK de cifrado de AWS para C, asegúrese de proporcionar el contenido del PEM archivo que incluye cada clave como una cadena C terminada en cero, no como una ruta o un nombre de archivo. Al crear un RSA llavero Raw JavaScript, tenga en cuenta la posible incompatibilidad con las implementaciones de otros lenguajes.

Espacios de nombres y nombres

Para identificar el material RSA clave de un anillo de claves, el anillo de RSA claves Raw utiliza un espacio de nombres y un nombre clave que usted proporciona. Estos valores no son secretos. Aparecen en texto no cifrado en el encabezado del mensaje cifrado que devuelve la operación de cifrado. Recomendamos utilizar el espacio de nombres de clave y el nombre de clave que identifique el par de RSA claves (o su clave privada) en su HSM sistema de administración de claves.

nota

El espacio de nombres y el nombre de clave son equivalentes a los campos ID de proveedor (o proveedor) e ID de clave en JceMasterKey y RawMasterKey.

SDK de cifrado de AWS para C Reserva el valor del espacio de nombres aws-kms clave para las claves. KMS No lo utilice en un AES llavero Raw ni en un llavero Raw RSA con. SDK de cifrado de AWS para C

Si crea diferentes conjuntos de claves para cifrar y descifrar un mensaje determinado, el espacio de nombres y los valores de los nombres son fundamentales. Si el espacio de nombres de clave y el nombre de clave del conjunto de claves de descifrado no coinciden exactamente y distinguen mayúsculas de minúsculas entre el espacio de nombres de clave y el nombre de clave del conjunto de claves de cifrado, no se utiliza el conjunto de claves de descifrado, incluso si las claves son del mismo par de claves.

El espacio de nombres de clave y el nombre de clave del material clave de los anillos de claves de cifrado y descifrado deben ser los mismos independientemente de que el anillo de claves contenga la clave RSA pública, la clave RSA privada o ambas claves del par de claves. Por ejemplo, supongamos que cifra los datos con un RSA anillo de claves RAW para una clave RSA pública con el espacio de nombres y el nombre de la clave. HSM_01 RSA_2048_06 Para descifrar esos datos, cree un conjunto de RSA claves sin procesar con la clave privada (o el par de claves) y el mismo espacio de nombres y nombre de clave.

Modo de relleno

Debe especificar un modo de relleno para los conjuntos de RSA claves RAW que se utilizan para el cifrado y el descifrado, o bien utilizar las funciones de la implementación de su idioma que lo especifiquen por usted.

AWS Encryption SDK Admite los siguientes modos de relleno, sujetos a las limitaciones de cada idioma. Recomendamos un modo de OAEPrelleno, especialmente OAEP con SHA -256 y MGF1 con SHA -256 de relleno. El modo de PKCS1relleno solo se admite por motivos de compatibilidad con versiones anteriores.

  • OAEPcon SHA relleno -1 y MGF1 con SHA -1

  • OAEPcon SHA -256 y MGF1 con SHA un relleno de -256

  • OAEPcon un relleno de SHA -384 y con un relleno de -384 MGF1 SHA

  • OAEPcon acolchado SHA -512 y con -512 MGF1 SHA

  • PKCS1Acolchado v1.5

Los siguientes ejemplos muestran cómo crear un conjunto de RSA claves Raw con la clave pública y privada de un par de RSA claves y OAEP con los modos de SHA relleno -256 y MGF1 SHA -256. Las variables RSAPublicKey y RSAPrivateKey representan el material clave que proporciona.

C

Para crear un conjunto de RSA claves Raw en el, utilice. SDK de cifrado de AWS para Caws_cryptosdk_raw_rsa_keyring_new

Al crear un RSA anillo de claves sin procesar en el SDK de cifrado de AWS para C, asegúrese de proporcionar el contenido del PEM archivo que incluye cada clave como una cadena C terminada en cero, no como una ruta o un nombre de archivo. Para ver un ejemplo 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 crear una instancia de un llavero Raw en forma. RSA AWS Encryption SDK NET, usa el método. materialProviders.CreateRawRsaKeyring() Para ver un ejemplo completo, consulte R awRSAKeyring Example.cs.

En el siguiente ejemplo se utiliza la versión 4. x del AWS Encryption SDK formulario. 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

El SDK de cifrado de AWS para JavaScript del navegador obtiene sus primitivas criptográficas de la WebCryptobiblioteca. Antes de construir el conjunto de claves, debe usar importPublicKey() y/o importar el material clave sin procesar importPrivateKey() al backend. WebCrypto Esto garantiza que el conjunto de claves esté completo aunque todas las llamadas sean asíncronas. WebCrypto El objeto que utilizan los métodos de importación incluye el algoritmo de encapsulamiento y su modo de relleno.

Tras importar el material clave, utilice el método RawRsaKeyringWebCrypto() para crear una instancia del conjunto de claves. Cuando construyas un RSA llavero Raw JavaScript, ten en cuenta la posible incompatibilidad con las implementaciones de otros lenguajes.

En el siguiente ejemplo, se utiliza la buildClient función para especificar la política de compromiso predeterminada,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT También puede utilizarla buildClient para limitar el número de claves de datos cifradas en un mensaje cifrado. Para obtener más información, consulte Limitar las claves de datos cifrados.

Para ver un ejemplo 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 crear una instancia de un conjunto de RSA claves sin procesar SDK de cifrado de AWS para JavaScript para Node.js, cree una nueva instancia de la clase. RawRsaKeyringNode El parámetro wrapKey contiene la clave pública. El parámetro unwrapKey contiene la clave privada. El constructor RawRsaKeyringNode calcula el modo de relleno predeterminado por usted, aunque puede especificar el modo de relleno preferido.

Al crear un conjunto de RSA claves sin procesar JavaScript, ten en cuenta la posible incompatibilidad con las implementaciones de otros lenguajes.

En el siguiente ejemplo, se utiliza la buildClient función para especificar la política de compromiso predeterminada,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT También puede utilizarla buildClient para limitar el número de claves de datos cifradas en un mensaje cifrado. Para obtener más información, consulte Limitar las claves de datos cifrados.

Para ver un ejemplo 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

En el siguiente ejemplo, se crea una instancia del cliente con la política de compromiso predeterminada,. AWS Encryption SDK REQUIRE_ENCRYPT_REQUIRE_DECRYPT Para ver un ejemplo completo, consulte raw_rsa_keyring_example.py en el SDK de cifrado de AWS para Python repositorio de. 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 )