AWS Encryption SDK para. NET - 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.

AWS Encryption SDK para. NET

El AWS Encryption SDK para. NETes una biblioteca de cifrado del lado del cliente para desarrolladores que escriben aplicaciones en C# y otros. NETlenguajes de programación. Es compatible con Windows, macOS y Linux.

nota

Versión 4.0.0 del formulario AWS Encryption SDK . NETse desvía de la especificación del AWS Encryption SDK mensaje. Como resultado, los mensajes cifrados en la versión 4.0.0 solo se pueden descifrar en la versión 4.0.0 o posterior de for. AWS Encryption SDK NET. No se pueden descifrar mediante ninguna otra implementación de lenguaje de programación.

Versión 4.0.1 del formulario AWS Encryption SDK . NETescribe mensajes de acuerdo con la especificación del AWS Encryption SDK mensaje y es interoperable con otras implementaciones de lenguajes de programación. De forma predeterminada, la versión 4.0.1 puede leer los mensajes cifrados por la versión 4.0.0. Sin embargo, si no desea descifrar los mensajes cifrados con la versión 4.0.0, puede especificar la propiedad de la NetV4_0_0_RetryPolicy para impedir que el cliente lea estos mensajes. Para obtener más información, consulte las notas de la versión 4.0.1 en el repositorio de. aws-encryption-sdk-dafny GitHub

El AWS Encryption SDK para. NETse diferencia de algunas de las implementaciones de otros lenguajes de programación del AWS Encryption SDK en los siguientes aspectos:

El AWS Encryption SDK cuatro. NETincluye todas las funciones de seguridad introducidas en las versiones 2.0. x y versiones posteriores de las implementaciones en otros idiomas de AWS Encryption SDK. Sin embargo, si está utilizando el AWS Encryption SDK para. NETpara descifrar datos cifrados por una versión anterior a la versión 2.0. x versión en otro idioma, implementación de la AWS Encryption SDK, es posible que necesite ajustar su política de compromisos. Para obtener más información, consulte ¿Cómo establecer su política de compromiso?.

El AWS Encryption SDK para. NETes un producto de Dafny, un lenguaje de verificación formal en el que se escriben las especificaciones, el código para implementarlas y las pruebas para probarlas. AWS Encryption SDK El resultado es una biblioteca que implementa las características del AWS Encryption SDK en una trama que garantiza la corrección funcional.

Más información

  • Para ver ejemplos que muestran cómo configurar las opciones del AWS Encryption SDK, como especificar un conjunto de algoritmos alternativo, limitar las claves de datos cifrados y utilizar claves AWS KMS multirregionales, consulte. Configuración del AWS Encryption SDK

  • Para obtener más información sobre la programación con el formulario AWS Encryption SDK . NET, consulte el aws-encryption-sdk-netdirectorio del aws-encryption-sdk-dafny repositorio en GitHub.

Instalación del AWS Encryption SDK formulario. NET

El AWS Encryption SDK para. NETestá disponible en el AWS.Cryptography.EncryptionSDKpaquete NuGet. Para obtener detalles sobre la instalación y la creación del AWS Encryption SDK formulario. NET, consulte el READMEarchivo.md del aws-encryption-sdk-net repositorio.

Versión 3.x

Versión 3. x de la AWS Encryption SDK forma. NETsoportes. NETFramework 4.5.2 — 4.8 solo en Windows. Es compatible. NETCore 3.0+ y. NET5.0 y versiones posteriores en todos los sistemas operativos compatibles.

Versión 4.x

Versión 4. x de la AWS Encryption SDK forma. NETsoportes. NET6.0 y. NETFramework net48 y versiones posteriores.

El AWS Encryption SDK para. NETrequiere las teclas AWS SDK for .NET incluso si no está utilizando AWS Key Management Service (AWS KMS). Se instala con el NuGet paquete. Sin embargo, a menos que utilice AWS KMS claves, AWS Encryption SDK para. NETno requiere AWS credenciales ni interacción con ningún AWS servicio. Cuenta de AWS Si necesita ayuda para configurar una AWS cuenta, consulteUso de la AWS Encryption SDK con AWS KMS.

Depurando el formulario AWS Encryption SDK . NET

El AWS Encryption SDK para. NETno genera ningún registro. Excepciones en AWS Encryption SDK el formulario. NETgeneran un mensaje de excepción, pero no hay rastros de pila.

Para ayudarle a depurar, asegúrese de activar el inicio de sesión en la AWS SDK for .NET. Los registros y los mensajes de error del AWS SDK for .NET pueden ayudarle a distinguir los errores que se producen en el formulario AWS SDK for .NET de los que están en el AWS Encryption SDK formulario. NET. Para obtener ayuda con el AWS SDK for .NET registro, consulta AWSLoggingla Guía para AWS SDK for .NET desarrolladores. (Para ver el tema, amplíe la vista Abrir para. NETSección de contenido de Framework.)

AWS KMS llaveros en forma AWS Encryption SDK . NET

Los AWS KMS llaveros básicos del AWS Encryption SDK formulario. NETcoge solo una KMS llave. También requieren un AWS KMS cliente, lo que le da la oportunidad de configurar el cliente para Región de AWS la KMS clave.

Para crear un AWS KMS llavero con una o más llaves de embalaje, utilice un llavero múltiple. El para. AWS Encryption SDK NETtiene un llavero especial que admite una o más AWS KMS teclas y un llavero múltiple estándar que admite uno o más llaveros de cualquier tipo compatible. Algunos programadores prefieren usar un método de llaveros múltiples para crear todos sus llaveros, y así sucesivamente. AWS Encryption SDK NETapoya esa estrategia.

El AWS Encryption SDK para. NETproporciona llaveros básicos de una sola tecla y varios llaveros para todos los casos de uso típicos, incluidas las teclas multirregionales. AWS KMS

Por ejemplo, para crear un AWS KMS llavero con una sola AWS KMS tecla, puede utilizar el método. CreateAwsKmsKeyring()

Version 3.x

En el siguiente ejemplo se utiliza la versión 3. x del AWS Encryption SDK formulario. NETpara crear un AWS KMS cliente predeterminado para la región que contenga la clave especificada.

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var kmsKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn }; // Create the keyring var keyring = materialProviders.CreateAwsKmsKeyring(kmsKeyringInput);
Version 4.x

El siguiente ejemplo usa la versión 4. x del AWS Encryption SDK formulario. NETpara crear un AWS KMS cliente para la región que contenga la clave especificada.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = kmsArn }; // Create the keyring var kmsKeyring = mpl.CreateAwsKmsKeyring(createKeyringInput);

Para crear un conjunto de claves con una o más AWS KMS claves, utilice el CreateAwsKmsMultiKeyring() método. En este ejemplo se utilizan dos AWS KMS claves. Para especificar una KMS clave, utilice únicamente el Generator parámetro. El KmsKeyIds parámetro que especifica KMS claves adicionales es opcional.

La entrada de este conjunto de claves no requiere un AWS KMS cliente. En su lugar, AWS Encryption SDK utiliza el AWS KMS cliente predeterminado para cada región representado por una KMS clave en el anillo de claves. Por ejemplo, si la KMS clave identificada por el valor del Generator parámetro se encuentra en la región EE.UU. Oeste (Oregón) (us-west-2), se AWS Encryption SDK crea un AWS KMS cliente predeterminado para la us-west-2 región. Si necesita personalizar el cliente de AWS KMS , utilice el método CreateAwsKmsKeyring().

En el siguiente ejemplo, se utiliza la versión 4. x del AWS Encryption SDK formulario. NETy el CreateAwsKmsKeyring() método para personalizar el AWS KMS cliente.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<string> additionalKeys = new List<string> { "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" }; // Instantiate the keyring input object var createEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput { Generator = generatorKey, KmsKeyIds = additionalKeys }; var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(createEncryptKeyringInput);

Versión 4. x de la AWS Encryption SDK forma. NETadmite conjuntos de AWS KMS claves que utilizan cifrado simétrico (SYMMETRIC_DEFAULT) o claves RSA KMS asimétricas. AWS KMS los llaveros creados con RSA KMS claves asimétricas solo pueden contener un par de claves.

Para cifrar con un RSA AWS KMS anillo de claves asimétrico, no necesita kms: GenerateDataKey ni KMS:Encrypt porque debe especificar el material de clave pública que desea usar para el cifrado al crear el anillo de claves. No se realizan AWS KMS llamadas al cifrar con este anillo de claves. Para descifrar con un RSA AWS KMS anillo de claves asimétrico, necesita el permiso KMS:Decrypt.

Para crear un conjunto de claves asimétrico, debe proporcionar la RSA AWS KMS clave pública y la clave privada de su clave asimétrica. ARN RSA KMS La clave pública debe estar codificada. PEM En el siguiente ejemplo, se crea un AWS KMS llavero con un par de RSA claves asimétricas.

// Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); var publicKey = new MemoryStream(Encoding.UTF8.GetBytes(AWS KMS RSA public key)); // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsRsaKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = AWS KMS RSA private key ARN, PublicKey = publicKey, EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256 }; // Create the keyring var kmsRsaKeyring = mpl.CreateAwsKmsRsaKeyring(createKeyringInput);

Contextos de cifrado obligatorio en la versión 4.x

Con la versión 4. x de AWS Encryption SDK los cuatro. NET, puede usar el contexto de cifrado requerido CMM para requerir contextos de cifrado en sus operaciones criptográficas. Un contexto de cifrado es un conjunto de pares de clave-valor no secretos. El contexto de cifrado se vincula criptográficamente a los datos cifrados, de tal forma que se requiere el mismo contexto de cifrado para descifrar los datos. Si utiliza el contexto de cifrado requeridoCMM, puede especificar una o más claves de contexto de cifrado necesarias (claves obligatorias) que deben incluirse en todas las llamadas de cifrado y descifrado.

nota

El contexto de cifrado necesario solo CMM es compatible con las siguientes versiones:

  • Versión 3. x del SDK de cifrado de AWS para Java

  • Versión 4. x de la AWS Encryption SDK forma. NET

  • Versión 4. x de SDK de cifrado de AWS para Python, cuando se usa con la dependencia opcional de la biblioteca de proveedores de material criptográfico (MPL).

Si cifra los datos con el contexto de cifrado requeridoCMM, solo podrá descifrarlos con una de estas versiones compatibles.

Al cifrar, AWS Encryption SDK comprueba que todas las claves de contexto de cifrado necesarias estén incluidas en el contexto de cifrado que especificó. Firma AWS Encryption SDK los contextos de cifrado que especificó. Solo los pares clave-valor que no son claves obligatorias se serializan y almacenan en texto no cifrado en el encabezado del mensaje cifrado que devuelve la operación de cifrado.

Al descifrar, debe proporcionar un contexto de cifrado que contenga todos los pares clave-valor que representan las claves necesarias. AWS Encryption SDK Utiliza este contexto de cifrado y los pares clave-valor almacenados en el encabezado del mensaje cifrado para reconstruir el contexto de cifrado original que especificó en la operación de cifrado. Si AWS Encryption SDK no se puede reconstruir el contexto de cifrado original, se produce un error en la operación de descifrado. Si proporciona un par clave-valor que contiene la clave requerida con un valor incorrecto, el mensaje cifrado no se puede descifrar. Debe proporcionar el mismo par clave-valor que se especificó al cifrar.

importante

Considere detenidamente qué valores elige para las claves requeridas en su contexto de cifrado. Debe poder volver a proporcionar las mismas claves y sus valores correspondientes al descifrar. Si no puede reproducir las claves requeridas, el mensaje cifrado no se podrá descifrar.

El siguiente ejemplo inicializa un conjunto de AWS KMS claves con el contexto de cifrado requerido. CMM

var encryptionContext = new Dictionary<string, string>() { {"encryption", "context"}, {"is not", "secret"}, {"but adds", "useful metadata"}, {"that can help you", "be confident that"}, {"the data you are handling", "is what you think it is"} }; // Instantiate the AWS Encryption SDK and material providers var esdk = new ESDK(new AwsEncryptionSdkConfig()); var mpl = new MaterialProviders(new MaterialProvidersConfig()); // Instantiate the keyring input object var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = kmsKey }; // Create the keyring var kmsKeyring = mpl.CreateAwsKmsKeyring(createKeyringInput); var createCMMInput = new CreateRequiredEncryptionContextCMMInput { UnderlyingCMM = mpl.CreateDefaultCryptographicMaterialsManager(new CreateDefaultCryptographicMaterialsManagerInput{Keyring = kmsKeyring}), // If you pass in a keyring but no underlying cmm, it will result in a failure because only cmm is supported. RequiredEncryptionContextKeys = new List<string>(encryptionContext.Keys) }; // Create the required encryption context CMM var requiredEcCMM = mpl.CreateRequiredEncryptionContextCMM(createCMMInput);

Si usa un AWS KMS anillo de claves, el formulario. AWS Encryption SDK NETtambién utiliza el contexto de cifrado para proporcionar datos autenticados adicionales (AAD) en las llamadas que realiza el anillo de claves. AWS KMS