Administración y uso de claves con autenticación de quórum habilitada para AWS CloudHSM mediante la CLI de CloudHSM
Después de configurar la autenticación de quórum para el clúster de AWS CloudHSM, los usuarios de criptografía no pueden realizar operaciones de administración ni de uso de claves del HSM de forma individual si su clave tiene valores de quórum asociados. En este tema, se explica cómo un usuario de criptografía puede obtener un token temporal para realizar una operación de administración o de uso de claves de HSM.
nota
Cada token de quórum es válido para una sola operación. Cuando esa operación se completa correctamente, el token deja de ser válido y el usuario de criptografía debe obtener un nuevo token. Un token de quórum solo es válido durante la sesión de inicio de sesión actual. Si cierra sesión en la CLI de CloudHSM o si la red se desconecta, el token deja de ser válido y deberá obtener uno nuevo. Solo puede utilizar un token de CloudHSM dentro de la CLI de CloudHSM. No puede utilizarlo para autenticarse en otra aplicación.
En el siguiente ejemplo, se muestra el resultado cuando un usuario de criptografía intenta crear una firma con una clave asociada a quórum en el HSM, después de que se haya configurado la autenticación de quórum. El comando falla con un error de Quorum Failed, lo que significa que la autenticación de quórum falló.
aws-cloudhsm >crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz{ "error_code": 1, "data": "Quorum Failed" }
Un usuario de criptografía debe completar las siguientes tareas para obtener un token temporal y poder realizar una operación de administración o de uso de claves del HSM:
Pasos
Paso 1. Cómo obtener un token de cuórum
-
Inicie la CLI de CloudHSM.
-
Inicie sesión en el clúster como usuario de criptografía.
aws-cloudhsm >login --username--password<crypto_user1>--role crypto-userpassword123En este ejemplo,
crypto_user1inicia sesión en la CLI de CloudHSM con el rolcrypto-user. Reemplace estos valores por los suyos.{ "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } } -
Genere un token de quórum mediante el comando quorum token-sign generate.
En el siguiente comando,
key-usageidentifica el nombre del servicio en el que utilizará el token que está en proceso de generar. En este caso, el token es para operaciones de uso de claves (servicio dekey-usage). En este ejemplo, se utiliza la marca--filterpara asociar el token a una clave específica.aws-cloudhsm >quorum token-sign generate --service key-usage --token</path/crypto_user1.token>--filter attr.label=rsa-private-key-example{ "error_code": 0, "data": { "path": "/home/crypto_user1.token" } }En este ejemplo, se obtiene un token de quórum para el usuario de criptografía con el nombre de usuario
crypto_user1y guarda el token en un archivo denominadocrypto_user1.token. Para utilizar el comando de ejemplo, sustituya estos valores por los suyos:El comando quorum token-sign generate genera un token de quórum del servicio de uso de claves en la ruta de archivo especificada. Puede inspeccionar el archivo del token:
$cat</path/crypto_user1.token>{ "version": "2.0", "service": "key-usage", "key_reference": "0x0000000000680006", "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==", "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=", "signatures": [] }El archivo del token consta de lo siguiente:
-
servicio: identificador del servicio de quórum al que está asociado el token.
-
key reference: identificador de la clave a la que está asociado este token de quórum.
-
approval_data: un token de datos base64 sin procesar generado por el HSM.
-
token: un token de approval_data codificado en base64 y con hash SHA-256
-
firmas: arreglo de tokens firmados codificados en base64 (firmas) del token sin firmar. Cada firma de aprobador tiene el formato de un literal de objeto JSON.
{ "username": "<APPROVER_USERNAME>", "role": "<APPROVER_ROLE>", "signature": "<APPROVER_RSA2048_BIT_SIGNATURE>" }Cada firma se crea a partir del resultado de un aprobador que utiliza su clave privada RSA de 2048 bits correspondiente, cuya clave pública se registró en el HSM.
-
-
Valide el token de quórum del nuevo servicio de usuario. El comando quorum token-sign list confirma que el token existe en CloudHSM.
aws-cloudhsm >quorum token-sign list{ "error_code": 0, "data": { "tokens": [ { "username": "crypto_user", "service": "key-usage", "key-reference": "0x0000000000680006", "minimum-token-count": 2 } ] } }El
minimum-token-countpresenta una vista agregada del clúster del número mínimo utilizable de tokens de clave correspondientes al nombre de usuario, el servicio y la referencia de clave, que se recuperan desde un único HSM del clúster.Por ejemplo, si se asume un clúster de 2 HSM y se reciben dos (2) tokens de uso de clave generados por el usuario
crypto_user1para la clave con referencia0x0000000000680006desde el primer HSM del clúster, y se recibe un (1) token de uso de clave generado por el usuariocrypto_user1para la clave con referencia0x0000000000680006desde el otro HSM del clúster, se mostrará el"minimum-token-count": 1.
Paso 2. Cómo obtener las firmas de los usuarios de criptografía aprobadores
Un usuario de criptografía que tiene un token de quórum debe obtener la aprobación del token por parte de otros usuarios de criptografía. Para otorgar su aprobación, los otros usuarios de criptografía utilizan su clave de firma para firmar criptográficamente el token fuera del HSM.
Existen muchas maneras diferentes de firmar el token. En el siguiente ejemplo, se muestra cómo firmar el token mediante OpenSSL
En este ejemplo, el usuario de criptografía que tiene el token (crypto-user) necesita al menos dos (2) aprobaciones. Los siguientes comandos de ejemplo muestran cómo dos (2) usuarios de criptografía pueden utilizar OpenSSL para firmar criptográficamente el token.
-
Decodifique el token sin firmar codificado en base64 e introdúzcalo en un archivo binario:
$echo -n '5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=' | base64 -d > crypto_user1.bin -
Utilice OpenSSL y la clave privada del aprobador para firmar el token binario de quórum sin firmar del servicio de usuario y crear un archivo de firma binaria.
$openssl pkeyutl -sign \ -inkey crypto_user1.key \ -pkeyopt digest:sha256 \ -keyform PEM \ -in crypto_user1.bin \ -out crypto_user1.sig.bin -
Codifique la firma binaria en base64:
$base64 -w0 crypto_user1.sig.bin > crypto_user1.sig.b64 -
Copie y pegue la firma codificada en base64 en el archivo del token, con el formato de literal de objeto JSON especificado anteriormente para la firma del aprobador.
{ "version": "2.0", "service": "key-usage", "key_reference": "0x0000000000680006", "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==", "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=", "signatures": [ { "username": "crypto_user1", "role": "crypto-user", "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg==" }, { "username": "crypto_user2", "role": "crypto-user", "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg==" } ] }
Paso 3. Apruebe el token en el clúster de CloudHSM y ejecute una operación.
Después de que un usuario de criptografía tenga las aprobaciones y firmas necesarias, puede proporcionar ese token al clúster de CloudHSM junto con una operación de administración de claves o de uso de claves.
Asegúrese de que la operación de clave corresponda al servicio de quórum adecuado asociado con el token de quórum. Para obtener más información, consulte Tipos y servicios compatibles para más detalles.
Durante la transacción, el token se aprobará dentro del clúster AWS CloudHSM y se ejecutará la operación de clave solicitada. El éxito de la operación de clave depende tanto de un token de quórum aprobado y válido como de una operación de clave válida.
ejemplo Generación de una firma mediante el mecanismo RSA-PKCS
En el siguiente ejemplo, un usuario de criptografía con sesión iniciada crea una firma con una clave en el HSM.
aws-cloudhsm >crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /path/crypto_user1.token{ "error_code": 0, "data": { "key-reference": "0x0000000000640007", "signature": "h6hMqXacBrT3x3MXV13RXHdQno0+IQ6iy0kVrGzo23+eoWT0ZZgrSpBCu5KcuP6IYYHw9goQ5CfPf4jI1nO5m/IUJtF1A1lmcz0HjEy1CJ7ICXNReDRyeOU8m43dkJzt0OUdkbtkDJGAcxkbKHLZ02uWsGXaQ8bOKhoGwsRAHHF6nldTXquICfOHgSd4nimObKTqzUkghhJW5Ot5oUyLMYP+pZmUS38ythybney94Wj6fzYOER8v7VIY5ijQGa3LfxrjSG4aw6QijEEbno5LSf18ahEaVKmVEnDBL54tylCJBGvGsYSY9HNhuJoHPgiDL/TDd2wfvP4PaxbFRyyHaw==" } }
Si el usuario de criptografía intenta realizar otra operación de uso de claves del HSM con el mismo token, esta fallará.
aws-cloudhsm >crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /home/crypto_user1.token{ "error_code": 1, "data": "Quorum approval is required for this operation" }
Para realizar otra operación de clave del HSM, el usuario de criptografía debe generar un nuevo token de quórum, obtener nuevas firmas de los aprobadores y ejecutar la operación de clave deseada por medio del argumento --aporbación para proporcionar el token de quórum.
Utilice quorum token-sign list para comprobar si hay tokens disponibles. Este ejemplo muestra que el usuario de criptografía no tiene tokens aprobados.
aws-cloudhsm >quorum token-sign list{ "error_code": 0, "data": { "tokens": [] } }