Comment puis-je partager des clés avec d'autres utilisateurs de façon à n’autoriser que certaines fonctions cryptographiques dans CloudHSM ?

Lecture de 10 minute(s)
0

Comment puis-je autoriser un utilisateur à encapsuler une clé et autoriser un autre utilisateur uniquement à la désencapsuler ?

Brève description

Vous pouvez partager l'accès des utilisateurs aux clés stockées dans les modules de sécurité matérielle (hardware security module, HSM) dans votre cluster AWS CloudHSM. Dans ce cas, les utilisateurs disposent de toutes les autorisations telles qu'encapsuler, désencapsuler, chiffrer et déchiffrer.

Résolution

Exportez une clé, puis réimportez-la deux fois. Les attributs de la clé importée changent avec les autorisations d'encapsuler ou de désencapsuler. Ensuite, la clé est partagée avec différents utilisateurs pour exécuter les fonctions d'encapsulage et de désencapsulage.

Répertorier tous les utilisateurs de votre cluster à l'aide de l'outil de ligne de commande cloudhsm_mgmt_util

Avant de commencer à utiliser l'outil cloudhsm_mgmt_util consultez Mise en route avec cCloudHSM Management Utility (CMU).

Exécutez la commande listUsers comme dans l'exemple suivant :

Number of users found:8

    User Id             User Type       User Name                          MofnPubKey    LoginFailureCnt         2FA
         1              CO              admin                                    NO               0               NO
         2              AU              app_user                                 NO               0               NO
         3              CO              officer1                                 NO               0               NO
         4              CO              crypto_user1                             NO               0               NO
         5              CO              crypto_user2                             NO               0               NO
         6              CU              crypto_user3                             NO               0               NO
         7              CU              crypto_user4                             NO               0               NO
         8              CU              crypto_user5                             NO               0               NO

Comme crypto_user1 et crypto_user2 sont des responsables de la cryptographie, ils ne peuvent pas posséder des clés. Cet exemple utilise les utilisateurs de chiffrement crypto_user3, crypto_user4 et crypto_user5.

Utilisez la commande genSymKey avec l'outil de ligne de commande key_mgmt_util pour créer une clé symétrique AES dans votre module HSM

Connectez-vous à votre module HSM en utilisant crypto_user3, puis utilisez l'outil key_mgmt_util pour créer une clé symétrique pour chiffrer et déchiffrer. Utilisez la commande genSymKey pour créer une clé de bits AES 256 labellisée rootKey, comme dans l'exemple suivant :

Command:  genSymKey -t 31 -s 32 -l rootKey

        Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Created.  Key Handle: 786512

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

Cet exemple utilise le descripteur de clé 786512.

Créer une clé de session à l'aide de la commande genSymKey pour encapsuler la clé sur le disque et la désencapsuler dans votre HSM module

Créez une clé de session en utilisant le paramètre -sess. Veillez à maintenir la fenêtre de session ouverte et vérifiez que la connexion est établie et que crypto_user3 reste connecté. Utilisez la commande genSymKey avec l'étiquette sessionKey pour identifier cette clé ultérieurement.

Command:  genSymKey -t 31 -s 32 -sess -l sessionKey

        Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Created.  Key Handle: 786511

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

Dans cet exemple, la clé de session 786511 exécute les opérations wrapKey et unWrapKey.

Remarque : la clé de session est supprimée une fois la session fermée.

Utiliser la commande wrapKey pour écrire la clé sur le disque et la conserver secrète

Exportez la clé symétrique 786512 vers un fichier sur votre disque local. La clé symétrique 786512 chiffre avec la clé de session 786511. Ce chiffrement garantit que vous ne stockez jamais la clé symétrique 786512 en texte brut en dehors de votre module HSM. Une fois que vous avez encapsulé la clé rootKey sur votre disque local, utilisez la commande unWrapKey pour importer la rootKey 786512 dans le module HSM. Créez une copie de rootKey dans le module HSM en utilisant un descripteur de clé différent. Ensuite, modifiez les attributs de la copie rootKey pour restreindre l'utilisation de la clé.

Dans cet exemple, la clé sessionKey 786511 encapsule la clé rootKey 786512 et l'enregistre sur le disque local dans le fichier root.key :

Command:  wrapKey -k 786512 -w 786511 -out root.key

        Key Wrapped.

        Wrapped Key written to file "root.key length 312
        
        Cfm2WrapKey returned: 0x00 : HSM Return: SUCCESS

Remarque : vous pouvez afficher la clé encapsulée dans votre répertoire local à l'aide de la commande ls.

Utiliser la commande unWrapKey pour réimporter la clé vers votre module HSM avec un nouveau descripteur

Réimportez la clé root.key dans le module HSM en utilisant la commande unWrapKey. Cet exemple crée les descripteurs de clé 786523 et 786524.

Important : effectuez deux fois cette étape.

Command:  unWrapKey -f root.key -w 786511

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Key Unwrapped.  Key Handle: 786523

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

Command:  unWrapKey -f root.key -w 786511

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Key Unwrapped.  Key Handle: 786524

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

Vérifier les descripteurs de clé et affecter des attributs

Utilisez la commande cloudhsm_mgmt_util pour vérifier tous les descripteurs de clé détenus par crypto_user3. Dans cet exemple, prêtez attention à la clé rootKey 786512 et aux descripteurs de clé importés 786523 et 786524. Vous saisissez l'ID utilisateur 6 et 0 pour crypto_user3 pour indiquer que vous ne voulez pas hacher toutes les clés calculées. En procédant ainsi, vous pouvez voir les descripteurs de clé que vous utilisez dans le module HSM. Les descripteurs de clé affichés par la commande findAllKeys sont identiques sur le plan cryptographique, et ont les mêmes attributs que la rootKey 786512.

Remarque : le descripteur de clé de session 786511 n'est pas affiché, car il ne reste que le temps de la session.

aws-cloudhsm>findAllKeys 6 0
Keys on server 0(172.31.3.131):
Number of keys found 3
number of keys matched from start index 0::3
786512,786523,786524
findAllKeys success on server 0(172.31.3.131)
Keys on server 1(172.31.4.209):
Number of keys found 3
number of keys matched from start index 0::3
786512,786523,786524
findAllKeys success on server 1(172.31.4.209)

Cet exemple attribue un descripteur de clé pour encapsuler la clé 786524, et l'autre descripteur de clé pour désencapsuler la clé 786523.

Utiliser la commande cloudhsm_mgmt_util avec la commande setAttribute pour configurer les attributs d'encapsulage et de désencapsulage de clé

La commande setAttribute nécessite le descripteur de clé et l'ID d'attribut. L'ID d'attribut fait référence à un nombre entier qui correspond à un attribut de clé. Répertoriez ces attributs en utilisant la commande listAttibutes. Utilisez la commande aws-cloudhsm>setAttribute avec la clé 786523 pour affecter à l'attribut OBJ_ATTR_WRAP les valeurs 262 et 0.

aws-cloudhsm>setAttribute 786523 262 0
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. Cav server does NOT synchronize these changes with the
nodes on which this operation is not executed or failed, please
ensure this operation is executed on all nodes in the cluster.
****************************************************************

Do you want to continue(y/n)?y
setAttribute success on server 0(172.31.3.131)
setAttribute success on server 1(172.31.4.209)

Ensuite, utilisez la commande setAttribute avec la clé 786524 pour affecter à l'attribut OBJ_ATTR_UNWRAP les valeurs 263 et 0. L'attribut OBJ_ATTR_WRAP est 262.

aws-cloudhsm>setAttribute 786524 263 0
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. Cav server does NOT synchronize these changes with the
nodes on which this operation is not executed or failed, please
ensure this operation is executed on all nodes in the cluster.
****************************************************************

Do you want to continue(y/n)?y
setAttribute success on server 0(172.31.3.131)
setAttribute success on server 1(172.31.4.209)

Maintenant, vous disposez de la clé rootKey 786512 qui peut à la fois encapsuler et désencapsuler, de la clé 786524 qui ne peut qu’encapsuler et de la clé 786523 qui ne peut que désencapsuler.

Dans cet exemple, crypto_user3 possède les clés 786512, 786523, 786524, et les clés ne sont pas partagées.

Tester l'encapsulage de la clé pour vérifier que tous les attributs sont définis correctement

Exécutez la commande wrapKey avec l'outil de ligne de commande key_mgmt_util.

Encapsulez la clé rootKey 786512 sur votre disque local avec le descripteur 786523 que vous avez attribué pour le désencapsulage.

Ensuite, encapsulez la clé rootKey 786512 sur votre disque local avec le descripteur 786524 que vous avez attribué pour l'encapsulage.

Command:  wrapKey -k 786512 -w 786523 -out wrapped.key

        Cfm2WrapKey returned: 0xb3

        HSM Error: This operation violates the current configured/FIPS policies

Command:  wrapKey -k 786512 -w 786524 -out wrapped.key

        Key Wrapped.

        Wrapped Key written to file "wrapped.key.test length 309

        Cfm2WrapKey returned: 0x00 : HSM Return: SUCCESS

Dans cet exemple, la commande échoue pour l'encapsulage de la clé 786523, comme indiqué dans l'erreur HSM. L'erreur HSM est générée parce que l'attribut d'encapsulage OBJ_ATTR_WRAP a la valeur 0.

Exécuter la commande getAttribute pour vérifier que la valeur d'attribut de clé est false

La commande getAttribute utilise les outils key_mgmt_util et cloudhsm_mgmt_util. Même si la syntaxe est différente pour les deux outils de ligne de commande, chaque outil affiche le résultat des attributs. Cet exemple utilise l'outil cloudhsm_mgmt_util, car il ne nécessite pas d'attributs pour enregistrer dans un fichier.

aws-cloudhsm>getAttribute 786523 262
Attribute Value on server 0(172.31.3.131):
OBJ_ATTR_WRAP
0x00000000

Attribute Value on server 1(172.31.4.209):
OBJ_ATTR_WRAP
0x00000000

Partager des clés avec d'autres utilisateurs

Partagez les clés avec crypto_user4 (ID utilisateur 7) et crypto_user5 (ID utilisateur 8) en utilisant la commande cloudhsm_mgm_util. Partagez la clé de désencapsulage 786523 avec crypto_user4, et la clé d'encapsulage 786524 avec crypto_user5. Ainsi, les utilisateurs crypto_user4 et crypto_user5 peuvent utiliser la clé pour les fonctions cryptographiques, mais ils ne peuvent pas supprimer, exporter, partager, annuler le partage ou modifier les attributs de clé. Cela fait en sorte que les utilisateurs crypto_user4 et crypto_user5 ne puissent utiliser la clé que pour les opérations spécifiées par crypto_user3 lors de l'attribution des attributs de clé.

aws-cloudhsm>shareKey 786523 7 1
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. Cav server does NOT synchronize these changes with the
nodes on which this operation is not executed or failed, please
ensure this operation is executed on all nodes in the cluster.
****************************************************************

Do you want to continue(y/n)?y
shareKey success on server 0(172.31.3.131)
shareKey success on server 1(172.31.4.209)


aws-cloudhsm>shareKey 786524 8 1
*************************CAUTION********************************
This is a CRITICAL operation, should be done on all nodes in the
cluster. Cav server does NOT synchronize these changes with the
nodes on which this operation is not executed or failed, please
ensure this operation is executed on all nodes in the cluster.
****************************************************************

Do you want to continue(y/n)?y
shareKey success on server 0(172.31.3.131)
shareKey success on server 1(172.31.4.209)

Tester la fonctionnalité d'encapsulage par rapport à la fonctionnalité de désencapsulage en utilisant la commande wrapKey entre le disque et votre module HSM

Vérifiez que crypto_user4 (ID utilisateur 7) peut désencapsuler la clé encapsulée avec crypto_user3.

Les clés crypto_user3 et crypto_user_4 sont identiques sur le plan cryptographique et utilisées pour exécuter les fonctions d'encapsulage et de désencapsulage séparément.

Command:  unWrapKey -f wrapped.key -w 786523

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Key Unwrapped.  Key Handle: 1048669

        Cluster Error Status
        Node id 3 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 4 and err state 0x00000000 : HSM Return: SUCCESS

Informations connexes

Activer le cluster CloudHSM

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans