Porte-clés AWS KMS ECDH - AWS Chiffrement des bases SDK

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Porte-clés AWS KMS ECDH

Notre bibliothèque de chiffrement côté client a été renommée AWS Database Encryption. SDK Ce guide du développeur fournit toujours des informations sur le client de chiffrement DynamoDB.
Important

Le AWS KMS ECDH porte-clés n'est disponible qu'avec la version 1.5.0 de la bibliothèque des fournisseurs de matériaux.

Un AWS KMS ECDH porte-clés utilise un accord de clé asymétrique AWS KMS keyspour obtenir une clé d'encapsulation symétrique partagée entre deux parties. Tout d'abord, le porte-clés utilise l'algorithme d'accord de clés Diffie-Hellman (ECDH) à courbe elliptique pour dériver un secret partagé à partir de la clé privée contenue dans la paire de clés de l'expéditeur et de la KMS clé publique du destinataire. Le trousseau de clés utilise ensuite le secret partagé pour dériver la clé d'encapsulation partagée qui protège vos clés de chiffrement des données. La fonction de dérivation de clé SDK utilisée par le chiffrement AWS de base de données (KDF_CTR_HMAC_SHA384) pour dériver la clé d'encapsulation partagée est conforme aux NISTrecommandations relatives à la dérivation de clés.

La fonction de dérivation de clés renvoie 64 octets de matériel de saisie. Pour garantir que les deux parties utilisent le bon matériel de saisie, le chiffrement de AWS base de données SDK utilise les 32 premiers octets comme clé d'engagement et les 32 derniers octets comme clé d'encapsulation partagée. Lors du déchiffrement, si le trousseau de clés ne peut pas reproduire la même clé d'engagement et la même clé d'encapsulation partagée que celles stockées dans le champ de description du matériel de l'enregistrement crypté, l'opération échoue. Par exemple, si vous chiffrez un enregistrement avec un trousseau de clés configuré avec la clé privée d'Alice et la clé publique de Bob, un trousseau de clés configuré avec la clé privée de Bob et la clé publique d'Alice reproduira la même clé d'engagement et la même clé d'encapsulation partagée et pourra déchiffrer l'enregistrement. Si la clé publique de Bob ne provient pas d'une paire de KMS clés, Bob peut créer un trousseau de ECDHclés brut pour déchiffrer l'enregistrement.

Le AWS KMS ECDH trousseau de clés chiffre les enregistrements avec une clé symétrique à l'aide de -. AES GCM La clé de données est ensuite cryptée par enveloppe avec la clé d'encapsulation partagée dérivée à l'aide de AES -GCM. Chaque AWS KMS ECDH porte-clés ne peut avoir qu'une seule clé d'emballage partagée, mais vous pouvez inclure plusieurs AWS KMS ECDH porte-clés, seuls ou avec d'autres porte-clés, dans un porte-clés multiple.

Autorisations requises pour les AWS KMS ECDH porte-clés

Le chiffrement AWS de base de données SDK ne nécessite pas de AWS compte et ne dépend d'aucun AWS service. Toutefois, pour utiliser un AWS KMS ECDH trousseau de clés, vous devez disposer d'un AWS compte et disposer des autorisations minimales suivantes sur le trousseau AWS KMS keys de clés. Les autorisations varient en fonction du schéma d'accord clé que vous utilisez.

  • Pour chiffrer et déchiffrer des enregistrements à l'aide du schéma d'accord de KmsPrivateKeyToStaticPublicKey clés, vous avez besoin de kms : GetPublicKey et kms : DeriveSharedSecret sur la paire de clés asymétrique KMSde l'expéditeur. Si vous fournissez directement la clé publique DER codée de l'expéditeur lorsque vous instanciez votre trousseau de clés, vous n'avez besoin que de l'DeriveSharedSecretautorisation kms : sur la paire de clés asymétriques de l'expéditeur. KMS

  • Pour déchiffrer des enregistrements à l'aide du schéma d'accord de KmsPublicKeyDiscovery clés, vous devez disposer des GetPublicKey autorisations kms : DeriveSharedSecret et kms : sur la paire de KMS clés asymétriques spécifiée.

Création d'un AWS KMS ECDH porte-clés

Pour créer un AWS KMS ECDH trousseau de clés qui chiffre et déchiffre des données, vous devez utiliser le schéma d'accord de clés. KmsPrivateKeyToStaticPublicKey Pour initialiser un AWS KMS ECDH trousseau de clés avec le schéma d'accord de KmsPrivateKeyToStaticPublicKey clés, fournissez les valeurs suivantes :

  • AWS KMS key Identifiant de l'expéditeur

    Doit identifier une ECC paire de KMS clés NIST à courbe elliptique asymétrique recommandée () avec une KeyUsage valeur de. KEY_AGREEMENT La clé privée de l'expéditeur est utilisée pour dériver le secret partagé.

  • (Facultatif) Clé publique de l'expéditeur

    Il doit s'agir d'une clé publique X.509 DER codée, également appelée SubjectPublicKeyInfo (SPKI), telle que définie dans RFC 5280.

    L' AWS KMS GetPublicKeyopération renvoie la clé publique d'une paire de KMS clés asymétriques dans le DER format codé requis.

    Pour réduire le nombre d' AWS KMS appels effectués par votre trousseau de clés, vous pouvez fournir directement la clé publique de l'expéditeur. Si aucune valeur n'est fournie pour la clé publique de l'expéditeur, le keyring appelle AWS KMS pour récupérer la clé publique de l'expéditeur.

  • Clé publique du destinataire

    Vous devez fournir la clé publique X.509 DER codée du destinataire, également appelée SubjectPublicKeyInfo (SPKI), telle que définie dans RFC 5280.

    L' AWS KMS GetPublicKeyopération renvoie la clé publique d'une paire de KMS clés asymétriques dans le DER format codé requis.

  • Spécification de la courbe

    Identifie la spécification de la courbe elliptique dans les paires de clés spécifiées. Les paires de clés de l'expéditeur et du destinataire doivent avoir la même spécification de courbe.

    Valeurs valides: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Facultatif) Une liste de jetons de subvention

    Si vous contrôlez l'accès à la KMS clé de votre AWS KMS ECDH trousseau de clés par des autorisations, vous devez fournir tous les jetons de subvention nécessaires lors de l'initialisation du trousseau de clés.

C# / .NET

L'exemple suivant crée un AWS KMS ECDH trousseau de clés contenant la KMS clé de l'expéditeur, la clé publique de l'expéditeur et la clé publique du destinataire. Cet exemple utilise le senderPublicKey paramètre facultatif pour fournir la clé publique de l'expéditeur. Si vous ne fournissez pas la clé publique de l'expéditeur, le keyring appelle AWS KMS pour récupérer la clé publique de l'expéditeur. Les paires de clés de l'expéditeur et du destinataire sont toutes deux en ECC_NIST_P256 évolution.

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Must be DER-encoded X.509 public keys var BobPublicKey = new MemoryStream(new byte[] { }); var AlicePublicKey = new MemoryStream(new byte[] { }); // Create the AWS KMS ECDH static keyring var staticConfiguration = new KmsEcdhStaticConfigurations { KmsPrivateKeyToStaticPublicKey = new KmsPrivateKeyToStaticPublicKeyInput { SenderKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", SenderPublicKey = BobPublicKey, RecipientPublicKey = AlicePublicKey } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = staticConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

L'exemple suivant crée un AWS KMS ECDH trousseau de clés contenant la KMS clé de l'expéditeur, la clé publique de l'expéditeur et la clé publique du destinataire. Cet exemple utilise le senderPublicKey paramètre facultatif pour fournir la clé publique de l'expéditeur. Si vous ne fournissez pas la clé publique de l'expéditeur, le keyring appelle AWS KMS pour récupérer la clé publique de l'expéditeur. Les paires de clés de l'expéditeur et du destinataire sont toutes deux en ECC_NIST_P256 évolution.

// Retrieve public keys // Must be DER-encoded X.509 public keys ByteBuffer BobPublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"); ByteBuffer AlicePublicKey = getPublicKeyBytes("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"); // Create the AWS KMS ECDH static keyring final CreateAwsKmsEcdhKeyringInput senderKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPrivateKeyToStaticPublicKey( KmsPrivateKeyToStaticPublicKeyInput.builder() .senderKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab") .senderPublicKey(BobPublicKey) .recipientPublicKey(AlicePublicKey) .build()).build()).build();

Création d'un porte-clés AWS KMS ECDH Discovery

Lors du déchiffrement, il est recommandé de spécifier les clés que le chiffrement SDK de AWS base de données peut utiliser. Pour suivre cette bonne pratique, utilisez un AWS KMS ECDH trousseau de clés avec le schéma d'accord des KmsPrivateKeyToStaticPublicKey clés. Toutefois, vous pouvez également créer un trousseau de AWS KMS ECDH découverte, c'est-à-dire un AWS KMS ECDH trousseau de clés capable de déchiffrer tout enregistrement dont la clé publique de la paire de clés spécifiée correspond à la KMS clé publique du destinataire enregistrée dans le champ de description matérielle de l'enregistrement chiffré.

Important

Lorsque vous déchiffrez des enregistrements à l'aide du schéma d'accord de KmsPublicKeyDiscovery clés, vous acceptez toutes les clés publiques, quel que soit leur propriétaire.

Pour initialiser un AWS KMS ECDH trousseau de clés avec le schéma d'accord de KmsPublicKeyDiscovery clés, fournissez les valeurs suivantes :

  • AWS KMS key Identifiant du destinataire

    Doit identifier une ECC paire de KMS clés NIST à courbe elliptique asymétrique recommandée () avec une KeyUsage valeur de. KEY_AGREEMENT

  • Spécification de la courbe

    Identifie la spécification de la courbe elliptique dans la paire de KMS clés du destinataire.

    Valeurs valides: ECC_NIST_P256, ECC_NIS_P384, ECC_NIST_P512

  • (Facultatif) Une liste de jetons de subvention

    Si vous contrôlez l'accès à la KMS clé de votre AWS KMS ECDH trousseau de clés par des autorisations, vous devez fournir tous les jetons de subvention nécessaires lors de l'initialisation du trousseau de clés.

C# / .NET

L'exemple suivant crée un trousseau de clés de AWS KMS ECDH découverte avec une paire de KMS clés sur la ECC_NIST_P256 courbe. Vous devez disposer des DeriveSharedSecret autorisations kms : GetPublicKey et kms : sur la paire de KMS clés spécifiée. Ce porte-clés peut déchiffrer n'importe quel enregistrement où la clé publique de la paire de KMS clés spécifiée correspond à la clé publique du destinataire stockée dans le champ de description du matériel de l'enregistrement crypté.

// Instantiate material providers var materialProviders = new MaterialProviders(new MaterialProvidersConfig()); // Create the AWS KMS ECDH discovery keyring var discoveryConfiguration = new KmsEcdhStaticConfigurations { KmsPublicKeyDiscovery = new KmsPublicKeyDiscoveryInput { RecipientKmsIdentifier = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" } }; var createKeyringInput = new CreateAwsKmsEcdhKeyringInput { CurveSpec = ECDHCurveSpec.ECC_NIST_P256, KmsClient = new AmazonKeyManagementServiceClient(), KeyAgreementScheme = discoveryConfiguration }; var keyring = materialProviders.CreateAwsKmsEcdhKeyring(createKeyringInput);
Java

L'exemple suivant crée un trousseau de clés de AWS KMS ECDH découverte avec une paire de KMS clés sur la ECC_NIST_P256 courbe. Vous devez disposer des DeriveSharedSecret autorisations kms : GetPublicKey et kms : sur la paire de KMS clés spécifiée. Ce porte-clés peut déchiffrer n'importe quel enregistrement où la clé publique de la paire de KMS clés spécifiée correspond à la clé publique du destinataire stockée dans le champ de description du matériel de l'enregistrement crypté.

// Create the AWS KMS ECDH discovery keyring final CreateAwsKmsEcdhKeyringInput recipientKeyringInput = CreateAwsKmsEcdhKeyringInput.builder() .kmsClient(KmsClient.create()) .curveSpec(ECDHCurveSpec.ECC_NIST_P256) .KeyAgreementScheme( KmsEcdhStaticConfigurations.builder() .KmsPublicKeyDiscovery( KmsPublicKeyDiscoveryInput.builder() .recipientKmsIdentifier("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321").build() ).build()) .build();