Configuración de la autenticación de quórum para los usuarios de criptografía de AWS CloudHSM mediante la CLI de CloudHSM - AWS CloudHSM

Configuración de la autenticación de quórum para los usuarios de criptografía de AWS CloudHSM mediante la CLI de CloudHSM

En estos temas, se describe cómo configurar CloudHSM para la autenticación de quórum por parte de los usuarios de criptografía. Realice estos pasos una sola vez durante la configuración inicial. Para la administración y el uso de claves posteriores, consulte Administración y uso de claves con autenticación de quórum habilitada para AWS CloudHSM mediante la CLI de CloudHSM.

Requisitos previos

Paso 1. Creación y registro de una clave de firma

Para utilizar la autenticación de quórum, cada usuario de criptografía debe completar todos los siguientes pasos:

Creación de un par de claves RSA

Hay muchas formas de crear y proteger un par de claves. El siguiente ejemplo muestra cómo hacerlo con OpenSSL.

ejemplo : creación de una clave privada con OpenSSL

En el siguiente ejemplo, se muestra cómo utilizar OpenSSL para crear una clave RSA de 2048 bits. Para utilizar este ejemplo, reemplace <crypto_user1.key> por el nombre del archivo en el que desea almacenar la clave.

$ openssl genrsa -out <crypto_user1.key> Generating RSA private key, 2048 bit long modulus .....................................+++ .+++ e is 65537 (0x10001)

A continuación, genere la clave pública usando la clave privada que acaba de crear.

ejemplo : creación de una clave pública con OpenSSL

El siguiente ejemplo muestra cómo usar OpenSSL para crear una clave pública a partir de la clave privada que acaba de crear.

$ openssl rsa -in crypto_user1.key -outform PEM -pubout -out crypto_user1.pub writing RSA key

Creación de un token de registro

Cree un token y fírmelo con la clave privada que acaba de generar en el paso anterior.

Creación de un token de registro
  1. Use el siguiente comando para iniciar la CLI de CloudHSM:

    Linux
    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
    Windows
    PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
  2. Cree un token de registro ejecutando el comando quorum token-sign generate:

    aws-cloudhsm > quorum token-sign generate --service registration --token /path/tokenfile { "error_code": 0, "data": { "path": "/path/tokenfile" } }
  3. El comando quorum token-sign generate genera un token de registro en la ruta de archivo especificada. Inspeccione el archivo del token:

    $ cat /path/tokenfile { "version": "2.0", "tokens": [ { "approval_data": <approval data in base64 encoding>, "unsigned": <unsigned token in base64 encoding>, "signed": "" } ] }

    El archivo del token consta de lo siguiente:

    • approval_data: un token de datos aleatorios codificado en base64 cuyos datos sin procesar no exceden el máximo de 245 bytes.

    • unsigned: un token de approval_data codificado en base64 y con hash SHA-256

    • signed: un token firmado (firma) codificado en base64 del token sin firmar que emplea la clave privada RSA de 2048 bits generada anteriormente con OpenSSL.

    Firme el token sin firmar con la clave privada para demostrar que tiene acceso a la clave privada. Necesitará que el archivo del token de registro esté completamente rellenado con una firma y la clave pública para registrar al usuario de criptografía como usuario de quórum en el clúster de AWS CloudHSM.

Firma del token de registro no firmado

  1. Decodifique el token sin firmar codificado en base64 e introdúzcalo en un archivo binario:

    $ echo -n '6BMUj6mUjjko6ZLCEdzGlWpR5sILhFJfqhW1ej3Oq1g=' | base64 -d > crypto_user.bin
  2. Use OpenSSL y la clave privada para firmar el token de registro ahora binario sin firmar, y cree un archivo de firma binaria:

    $ openssl pkeyutl -sign \ -inkey crypto_user1.key \ -pkeyopt digest:sha256 \ -keyform PEM \ -in crypto_user.bin \ -out crypto_user.sig.bin
  3. Codifique la firma binaria en base64:

    $ base64 -w0 crypto_user.sig.bin > crypto_user.sig.b64
  4. Copie y pegue la firma codificada en base64 en el archivo del token:

    { "version": "2.0", "tokens": [ { "approval_data": <approval data in base64 encoding>, "unsigned": <unsigned token in base64 encoding>, "signed": <signed token in base64 encoding> } ] }

Cómo registrar una clave pública con el HSM

Después de crear una clave, el usuario de criptografía debe registrar la clave pública en el clúster de AWS CloudHSM.

  1. Inicio de la CLI de CloudHSM:

    Linux
    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
    Windows
    PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
  2. Inicie sesión como el usuario de criptografía cuya clave pública desea registrar.

    aws-cloudhsm > login --username crypto_user1 --role crypto-user Enter password: { "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } }
  3. Registre la clave pública en el Registro de una estrategia de cuórum con firma de token de un usuario mediante la CLI de CloudHSM. Para obtener más información, consulte el siguiente ejemplo o utilice el comando help user change-quorum token-sign register.

    ejemplo : registre una clave pública con el clúster de AWS CloudHSM.

    En el siguiente ejemplo, se muestra cómo utilizar el comando user change-quorum token-sign register en la CLI de CloudHSM para registrar la clave pública de un usuario de criptografía en el HSM. Para utilizar este comando, el usuario de criptografía debe haber iniciado sesión en el HSM. Reemplace estos valores por sus propios valores:

    aws-cloudhsm > user change-quorum token-sign register --public-key </path/crypto_user.pub> --signed-token </path/tokenfile> { "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } }
    nota

    /path/crypto_user.pub: la ruta del archivo del archivo PEM de la clave pública

    Obligatorio: sí

    /path/token_file: la ruta del archivo que contiene el token firmado con la clave privada del usuario

    Obligatorio: sí

  4. Después de que todos los usuarios de criptografía registren sus claves públicas, la salida del comando user list muestra esta información en el campo de quórum, e indica la estrategia de quórum habilitada en uso.

    En este ejemplo, el clúster AWS CloudHSM tiene dos HSM, cada uno con los mismos usuarios de criptografía, como se muestra en la siguiente salida del comando user list. Para obtener más información sobre la creación de usuarios, consulte Administración de usuarios con la CLI de CloudHSM.

    aws-cloudhsm > user list { "error_code": 0, "data": { "users": [ { "username": "admin", "role": "admin", "locked": "false", "mfa": [], "quorum": [], "cluster-coverage": "full" }, { "username": "crypto_user1", "role": "crypto-user", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "crypto_user2", "role": "crypto-user", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "crypto_user3", "role": "crypto-user", "locked": "false", "mfa": [], "quorum": [ { "strategy": "token-sign", "status": "enabled" } ], "cluster-coverage": "full" }, { "username": "app_user", "role": "internal(APPLIANCE_USER)", "locked": "false", "mfa": [], "quorum": [], "cluster-coverage": "full" } ] } }

Paso 2. Configuración de los valores de quórum de clave durante la generación de la clave

Para utilizar la autenticación de quórum, un usuario de criptografía debe iniciar sesión en el HSM y, a continuación, configurar los valores de quórum de clave asociados. Este es el número mínimo de aprobaciones de usuarios de criptografía que se requieren para realizar operaciones de administración y uso de claves del HSM. Para obtener más información sobre los comandos de clave asociados con la administración o el uso de claves, consulte Tipos y servicios compatibles.

Generación de un par de claves con valores de quórum de clave configurados
  1. Use el siguiente comando para iniciar la CLI de CloudHSM:

    Linux
    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
    Windows
    PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
  2. Con la CLI de CloudHSM, inicie sesión como un usuario de criptografía.

    aws-cloudhsm > login --username crypto_user1 --role crypto-user Enter password: { "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } }

En este ejemplo, se genera un par de claves RSA que tiene valores de quórum de clave de dos (2) configurados tanto para las operaciones de administración de claves como para las operaciones de uso de claves. Puede elegir cualquier valor desde cero (0) hasta ocho (8), hasta el número total de usuarios de criptografía en el HSM. En este ejemplo, el HSM tiene tres (3) usuarios de criptografía, por lo que el valor máximo posible es tres (3). Tenga en cuenta que, en este ejemplo, compartimos la clave con <crypto_user2> durante la generación de la clave. Tenga en cuenta también que las claves públicas no tienen valores de quórum.

aws-cloudhsm > key generate-asymmetric-pair rsa \ --public-exponent 65537 \ --modulus-size-bits 2048 \ --public-label rsa-public-key-example \ --private-label rsa-private-key-example \ --public-attributes verify=true \ --private-attributes sign=true --share-crypto-users crypto_user2 \ --manage-private-key-quorum-value 2 \ --use-private-key-quorum-value 2 { "error_code": 0, "data": { "public_key": { "key-reference": "0x0000000000640006", "key-info": { "key-owners": [ { "username": "crypto_user", "key-coverage": "full" } ], "shared-users": [], "key-quorum-values": { "manage-key-quorum-value": 0, "use-key-quorum-value": 0 }, "cluster-coverage": "full" }, "attributes": { "key-type": "rsa", "label": "rsa-public-key-example", "id": "0x", "check-value": "0x218f50", "class": "public-key", "encrypt": false, "decrypt": false, "token": true, "always-sensitive": false, "derive": false, "destroyable": true, "extractable": true, "local": true, "modifiable": true, "never-extractable": false, "private": true, "sensitive": false, "sign": false, "trusted": false, "unwrap": false, "verify": true, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 512, "public-exponent": "0x010001", "modulus": "0xbdf471a3d2a869492f51c767bece8780730ae6479a9a75efffe7cea3594fb28ca518630e7b1d988b45d2fedc830b7ab848448c24c476cacb73d1523278aed289551e07af0fbfabe4811cc4601678bd097b5c0a578249ed1eb0e4878a80ba1ed85ac46eb1fee60d2a8bdd322075196dec4b57fa2cd82af44ad068115ac219bc073ec65c19c97bd883cf26931408d7bc51e237626b8b9b8f2485425907a0eb42f2f4c40018c8dac7ceeb1b646305a2e537ab904346883e41d568264abee0137048e4657d2cf72801810f3212f662b7a7ae134848b922771f6a30aa76718008d9cc74ff8ddcd8d867b05c3d40020d1514999af96889911467191b9f390d8de07f83", "modulus-size-bits": 2048 } }, "private_key": { "key-reference": "0x0000000000640007", "key-info": { "key-owners": [ { "username": "crypto_user", "key-coverage": "full" } ], "shared-users": [ { "username": "crypto_user2", "key-coverage": "full" } ], "key-quorum-values": { "manage-key-quorum-value": 2, "use-key-quorum-value": 2 }, "cluster-coverage": "full" }, "attributes": { "key-type": "rsa", "label": "rsa-private-key-example", "id": "0x", "check-value": "0x218f50", "class": "private-key", "encrypt": false, "decrypt": false, "token": true, "always-sensitive": true, "derive": false, "destroyable": true, "extractable": true, "local": true, "modifiable": true, "never-extractable": false, "private": true, "sensitive": true, "sign": true, "trusted": false, "unwrap": false, "verify": false, "wrap": false, "wrap-with-trusted": false, "key-length-bytes": 1216, "public-exponent": "0x010001", "modulus": "0xbdf471a3d2a869492f51c767bece8780730ae6479a9a75efffe7cea3594fb28ca518630e7b1d988b45d2fedc830b7ab848448c24c476cacb73d1523278aed289551e07af0fbfabe4811cc4601678bd097b5c0a578249ed1eb0e4878a80ba1ed85ac46eb1fee60d2a8bdd322075196dec4b57fa2cd82af44ad068115ac219bc073ec65c19c97bd883cf26931408d7bc51e237626b8b9b8f2485425907a0eb42f2f4c40018c8dac7ceeb1b646305a2e537ab904346883e41d568264abee0137048e4657d2cf72801810f3212f662b7a7ae134848b922771f6a30aa76718008d9cc74ff8ddcd8d867b05c3d40020d1514999af96889911467191b9f390d8de07f83", "modulus-size-bits": 2048 } } } }

Al generar una clave con controles de quórum, la clave se debe asociar a un número mínimo de usuarios igual al mayor valor de quórum de clave. Los usuarios asociados incluyen al propietario de la clave y a los usuarios de criptografía con quienes se comparte la clave. Para determinar el número mínimo de usuarios con los que se debe compartir la clave, obtenga el mayor valor entre el valor de quórum de uso de la clave y el valor de quórum de administración de la clave, y reste 1 para tener en cuenta al propietario de la clave, que está asociado de forma predeterminada a la clave. Para compartir la clave con más usuarios, utilice el comando Compartir una clave mediante la CLI de CloudHSM.

Si no se comparte la clave con un número suficiente de usuarios durante la generación de la clave, se provocará un error, como se muestra a continuación.

aws-cloudhsm > key generate-asymmetric-pair rsa \ --public-exponent 65537 \ --modulus-size-bits 2048 \ --public-label rsa-public-key-example \ --private-label rsa-private-key-example \ --public-attributes verify=true \ --private-attributes sign=true --share-crypto-users crypto_user2 crypto_user3 \ --manage-private-key-quorum-value 3 \ --use-private-key-quorum-value 4 { "error_code": 1, "data": "Invalid quorum value provided." }