Utilisation de clés fiables dans AWS CloudHSM - AWS CloudHSM

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.

Utilisation de clés fiables dans AWS CloudHSM

AWS CloudHSM prend en charge l'encapsulation fiable des clés pour protéger les clés de données contre les menaces internes. Cette rubrique décrit comment créer des clés fiables pour sécuriser les données.

Présentation des clés fiables

Une clé fiable est une clé qui est utilisée pour encapsuler d'autres clés et que les administrateurs et les responsables de chiffrement (CO) identifient spécifiquement comme étant fiable à l'aide de l'attribut CKA_TRUSTED. En outre, les administrateurs et les responsables de chiffrement (CO) utilisent CKA_UNWRAP_TEMPLATE et des attributs associés pour spécifier les actions que les clés de données peuvent effectuer une fois qu'elles ont été désencapsulées par une clé fiable. Les clés de données désencapsulées par la clé fiable doivent également contenir ces attributs pour que l'opération de désencapsulage réussisse, ce qui permet de garantir que les clés de données désencapsulées ne sont autorisées que pour l'usage que vous souhaitez.

Utilisez l'attribut CKA_WRAP_WITH_TRUSTED pour identifier toutes les clés de données que vous souhaitez encapsuler avec des clés fiables. Cela vous permet de restreindre les clés de données afin que les applications ne puissent utiliser que des clés fiables pour les désencapsuler. Une fois que vous avez défini cet attribut sur les clés de données, il devient en lecture seule et vous ne pouvez pas le modifier. Lorsque ces attributs sont en place, les applications ne peuvent déballer vos clés de données qu'avec les clés auxquelles vous faites confiance, et les désencapsulages se traduisent toujours par des clés de données dotées d'attributs qui limitent la manière dont ces clés peuvent être utilisées.

Attributs de clés fiables

Les attributs suivants vous permettent de marquer une clé comme étant fiable, de spécifier qu'une clé de données ne peut être encapsulée et désencapsulée qu'avec une clé fiable, et de contrôler ce que peut faire une clé de données une fois qu'elle a été désencapsulée :

  • CKA_TRUSTED : Appliquez cet attribut (en plus de CKA_UNWRAP_TEMPLATE) à la clé qui encapsulera les clés de données pour indiquer qu'un administrateur ou un responsable de chiffrement (CO) a fait preuve de la diligence nécessaire et qu'il fait confiance à cette clé. Seul un administrateur ou un CO peut définir CKA_TRUSTED. L'utilisateur de chiffrement (CU) possède la clé, mais seul un CO peut définir son attribut CKA_TRUSTED.

  • CKA_WRAP_WITH_TRUSTED : Appliquez cet attribut à une clé de données exportable pour indiquer que vous ne pouvez encapsuler cette clé qu'avec des clés marquées comme CKA_TRUSTED. Une fois CKA_WRAP_WITH_TRUSTED défini sur true, l'attribut passe en lecture seule et vous ne pouvez ni le modifier ni le supprimer.

  • CKA_UNWRAP_TEMPLATE : Appliquez cet attribut à la clé d'encapsulage (en plus de CKA_TRUSTED) pour spécifier les noms et valeurs d'attribut que le service doit automatiquement appliquer aux clés de données qu'il désencapsule. Lorsqu'une application soumet une clé pour désencapsulage, elle peut fournir également son propre modèle de désencapsulage. Si vous spécifiez un modèle de désencapsulage et que l'application fournit son propre modèle de désencapsulage, le HSM utilise les deux modèles pour appliquer des noms et des valeurs d'attribut à la clé. Toutefois, si une valeur dans le CKA_UNWRAP_TEMPLATE pour la clé d’encapsulage entre en conflit avec un attribut fourni par l'application lors de la demande de désencapsulage, cette dernière échoue.

Pour plus d'informations sur les attributs, veuillez consulter les rubriques suivantes :

Comment utiliser des clés fiables pour encapsuler des clés de données

Pour utiliser une clé fiable pour encapsuler une clé de données, vous devez suivre trois étapes de base :

  1. Pour la clé de données que vous prévoyez d'encapsuler avec une clé fiable, définissez son attribut CKA_WRAP_WITH_TRUSTED sur true.

  2. Pour la clé fiable avec laquelle vous prévoyez d'encapsuler la clé de données, définissez son attribut CKA_TRUSTED sur true.

  3. Utilisez la clé fiable pour encapsuler la clé de données.

Étape 1 : définir le CKA_WRAP_WITH_TRUSTED de la clé de données sur true

Pour la clé de données que vous souhaitez encapsuler, choisissez l'une des options suivantes pour définir l'attribut CKA_WRAP_WITH_TRUSTED de la clé sur true. Cela restreint la clé de données afin que les applications ne puissent utiliser que des clés fiables pour l'encapsuler.

Option 1 : si vous générez une nouvelle clé, définissez CKA_WRAP_WITH_TRUSTED sur true

Générez une clé à l'aide de PKCS #11, JCE ou CloudHSM CLI. Consultez les exemples suivants pour plus de détails.

PKCS #11

Pour générer une clé avec PKCS #11, vous devez définir l'attribut CKA_WRAP_WITH_TRUSTED de la clé sur true. Comme indiqué dans l'exemple suivant, procédez en incluant cet attribut dans le CK_ATTRIBUTE template de la clé puis en lui attribuant la valeur true :

CK_BYTE_PTR label = "test_key"; CK_ATTRIBUTE template[] = { {CKA_WRAP_WITH_TRUSTED, &true_val, sizeof(CK_BBOOL)}, {CKA_LABEL, label, strlen(label)}, ... };

Pour plus d'informations, veuillez consulter nos exemples publics illustrant la génération de clés avec PKCS #11.

JCE

Pour générer une clé avec JCE, vous devez définir l'attribut WRAP_WITH_TRUSTED de la clé sur true. Comme indiqué dans l'exemple suivant, procédez en incluant cet attribut dans le KeyAttributesMap de la clé puis en lui attribuant la valeur true :

final String label = "test_key"; final KeyAttributesMap keySpec = new KeyAttributesMap(); keySpec.put(KeyAttribute.WRAP_WITH_TRUSTED, true); keySpec.put(KeyAttribute.LABEL, label); ...

Pour plus d'informations, veuillez consulter nos exemples publics illustrant la génération de clés avec JCE.

CloudHSM CLI

Pour générer une clé avec la CLI CloudHSM, vous devez définir l'attribut wrap-with-trusted de la clé sur true. Pour ce faire, incluez wrap-with-trusted=true dans l'argument approprié pour la commande de génération de clés :

  • Pour les clés symétriques, ajoutez wrap-with-trusted à l'argument attributes.

  • Pour les clés publiques, ajoutez wrap-with-trusted à l'argument public-attributes.

  • Pour les clés privées, ajoutez wrap-with-trusted à l'argument private-attributes.

Pour de plus amples informations sur la génération de paires de clés, veuillez consulter clé generate-asymmetric-pair .

Pour plus d'informations sur la génération de clés symétriques, veuillez consulter Clé generate-symmetric .

Option 2 : Si vous utilisez une clé existante, utilisez la CLI CloudHSM pour la définir son CKA_WRAP_WITH_TRUSTED sur true

Pour attribuer la valeur true à l'attribut CKA_WRAP_WITH_TRUSTED d'une clé existante, procédez comme suit :

  1. Utilisez la commande login pour vous connecter en tant qu'utilisateur de chiffrement (CU).

  2. Utilisez la commande clé set-attribute pour définir l'attribut wrap-with-trusted de la clé sur true.

    aws-cloudhsm > key set-attribute --filter attr.label=test_key --name wrap-with-trusted --value true { "error_code": 0, "data": { "message": "Attribute set successfully" } }

Étape 2 : définir le CKA_TRUSTED de la clé fiable sur true

Pour qu'une clé soit une clé fiable, son attribut CKA_TRUSTED doit être défini sur true. Pour ce faire, vous pouvez utiliser la CLI CloudHSM ou l'Utilitaire de gestion CloudHSM (CMU).

Étape 3. Utilisez la clé fiable pour encapsuler la clé de données

Pour associer la clé de données référencée à l'étape 1 à la clé fiable que vous avez définie à l'étape 2, veuillez consulter les liens suivants pour obtenir des exemples de code. Chacun montre comment encapsuler les clés.

Comment désencapsuler une clé de données avec une clé fiable

Pour désencapsuler une clé de données, vous avez besoin qu'une clé fiable ait CKA_UNWRAP défini sur true. Pour être une telle clé, elle doit également répondre aux critères suivants :

  • L'attribut CKA_TRUSTED de la clé doit être défini sur true.

  • La clé doit utiliser des attributs CKA_UNWRAP_TEMPLATE et associés pour spécifier les actions que les clés de données peuvent effectuer une fois qu'elles sont désencapsulées. Si, par exemple, vous souhaitez qu'une clé désencapsulée ne soit pas exportable, vous définissez CKA_EXPORTABLE = FALSE dans le cadre de CKA_UNWRAP_TEMPLATE.

Note

CKA_UNWRAP_TEMPLATE n'est disponible qu'avec PKCS #11.

Lorsqu'une application soumet une clé pour désencapsulage, elle peut fournir également son propre modèle de désencapsulage. Si vous spécifiez un modèle de désencapsulage et que l'application fournit son propre modèle de désencapsulage, le HSM utilise les deux modèles pour appliquer des noms et des valeurs d'attribut à la clé. Toutefois, si, au cours de la demande de désencapsulage, une valeur du CKA_UNWRAP_TEMPLATE de la clé fiable entre en conflit avec un attribut fourni par l'application, la demande de désencapsulage échoue.

Pour voir un exemple de désencapsulage d'une clé de données avec une clé fiable, reportez-vous à cet exemple PKCS #11.