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

Date de la dernière mise à jour : 28/08/2020

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

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 dans 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 de cloudhsm_mgmt_util.

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 chiffrement, ils ne peuvent pas détenir 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 avec l'étiquette masterKey, comme dans l'exemple suivant :

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

        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é masterKey sur votre disque local, utilisez la commande unWrapKey pour importer la clé 786512 dans le module HSM. Créez une copie de masterKey dans le module HSM en utilisant un descripteur de clé différent. Ensuite, modifiez les attributs de la copie masterKey pour restreindre l'utilisation de la clé.

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

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

        Key Wrapped.

        Wrapped Key written to file "master.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 importer la clé vers votre module HSM avec un nouveau descripteur

Importez la clé master.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 master.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 master.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, notez la clé masterKey 786512 et les 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. 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 clé principale 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 et0.

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 263.

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é masterKey 786512 qui peut à la fois encapsuler et désencapsuler, de la clé 786524 qui peut uniquement 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é masterKey 786512 sur votre disque local avec le descripteur 786523 que vous avez attribué pour le désencapsulage.

Ensuite, encapsulez la clé masterKey 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é. Par conséquent, les utilisateurs crypto_user4 et crypto_user5 peuvent utiliser la clé uniquement 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

Cet article vous a-t-il été utile ?


Vous avez besoin d'aide ?