IBM Cloud Docs
Creación e importación de claves de cifrado

Creación e importación de claves de cifrado

Aprenda a crear, cifrar y traer las claves de cifrado a la nube utilizando Hyper Protect Crypto Services.

Objetivos

Esta guía de aprendizaje le muestra los pasos para crear e importar de forma segura claves de cifrado en el servicio Hyper Protect Crypto Services. Está destinada a los usuarios que son nuevos en la función de gestión de claves de Hyper Protect Crypto Services, pero que pueden tener cierta familiaridad con los sistemas de gestión de claves. Los pasos siguientes requieren unos 20 minutos para completarse.

  • Configuración de la API de servicio de gestión de claves
  • Preparación de la instancia de servicio de Hyper Protect Crypto Services para empezar a importar claves
  • Creación y cifrado de claves utilizando el kit de herramientas de criptografía de OpenSSL
  • Importación de una clave de cifrada a la instancia de servicio de Hyper Protect Crypto Services

Esta guía de aprendizaje no supondrá ningún cargo en su cuenta de IBM Cloud.

Flujo de tareas

El siguiente gráfico de flujo le proporciona una visión general sobre cómo crear e importar claves de cifrado. Puede pulsar cada paso del gráfico para ver los detalles del paso.

Pulse cada paso para obtener más detalles sobre el flujo
Flujo de tareas de creación e importación de una clave de cifrado
1. Crear una señal de importación 2. Recuperar la señal de importación 3. Crear una clave de cifrado 4. Establecer la clave de cifrado como una variable de entorno 5. Cifrar el valor nonce con la clave de cifrado 6. Cifrar la clave de cifrado creada 7. Importar la clave cifrada 8. Limpiar

Antes de empezar

Para empezar, necesita la CLI de IBM Cloud para poder interactuar con los servicios que suministre en IBM Cloud. También necesita los paquetes openssl y jq instalados localmente en la estación de trabajo.

  1. Cree una cuenta deIBM Cloud.

  2. Descargue e instale la CLI de IBM Cloud para el sistema operativo.

  3. Descargue e instale el Plugin de la CLI de IBM Key Protect v0.6.3 o posterior, y configúrelo para utilizarlo en Hyper Protect Crypto Services. Asegúrese de actualizar la variable KP_PRIVATE_ADDR al URL de punto final de gestión de claves de instancia actual.

    Para comprobar la versión del plugin de CLI de IBM Key Protect:

    ibmcloud plugin show key-protect
    

    Para actualizar el plugin de CLI de IBM Key Protect a la última versión:

    ibmcloud plugin update key-protect -r 'IBM Cloud'
    
  4. Descargue e instale la biblioteca de criptografíaOpenSSL.

    Puede utilizar los mandatos de openssl para crear claves de cifrado en la estación de trabajo local si está probando Hyper Protect Crypto Services por primera vez. Esta guía de aprendizaje requiere OpenSSL versión 1.0.2r o superior.

    Si utiliza un Mac, puede ponerse en marcha rápidamente con OpenSSL utilizando Homebrew. Ejecute brew install openssl si va a instalar el paquete por primera vez, o ejecute brew upgrade openssl para actualizar un paquete existente a la última versión.

  5. Descargue e instale jq.

    jq le ayuda a dividir datos JSON. Utilizará jq en esta guía de aprendizaje para capturar y utilizar datos específicos que se devuelven al llamar a la API de servicio de gestión de claves de Hyper Protect Crypto Services.

  6. Crear una instancia de servicio de Hyper Protect Crypto Services.

  7. Inicializar la instancia de servicio de Hyper Protect Crypto Services.

  8. Configure la API del servicio de gestión de claves de Hyper Protect Crypto Services.

Crear una señal de importación

Con sus credenciales de servicio, puede empezar a interactuar con la API de servicio de gestión de claves para crear y traer las claves de cifrado al servicio.

En el paso siguiente, creará una señal de importación para la instancia de servicio de Hyper Protect Crypto Services. Al crear una señal de importación basada en una política que especifique, habilita una seguridad adicional para la clave de cifrado mientras está de camino al servicio.

  1. En la línea de mandatos, cambie a un nuevo directorio hs-crypto-test.

    mkdir hs-crypto-test && cd hs-crypto-test
    

    Utilizará este directorio para almacenar los archivos que creará en pasos posteriores.

  2. Puede crear una señal de importación para la instancia de servicio de Hyper Protect Crypto Services utilizando la API de servicio de gestión de claves o utilizando la CLI y, a continuación, guardar la respuesta en un archivo JSON.

    • Utilizar la API

      curl -X POST $HPCS_API_URL/api/v2/import_token \
          -H "Accept: application/vnd.ibm.collection+json" \
          -H "Authorization: $ACCESS_TOKEN" \
          -H "Content-Type: application/json" \
          -H "Bluemix-Instance: $INSTANCE_ID" \
          -d '{
              "expiration": 1200,
              "maxAllowedRetrievals": 1
            }' > createImportTokenResponse.json
      

      En el cuerpo de la solicitud, puede especificar una política en la señal de importación que limita el uso en función del tiempo y el recuento de uso. En este ejemplo, se establece la hora de caducidad de la señal de importación en 1200 segundos (20 minutos), y también se permite sólo una recuperación de dicha señal dentro del tiempo de caducidad.

    • Utilice la CLI de IBM Key Protect

      ibmcloud kp import-token create --instance-id $INSTANCE_ID --max-retrievals=1 --expiration=1200 -o json > createImportTokenResponse.json
      
  3. Ver detalles de la señal de importación.

    jq '.' createImportTokenResponse.json
    

    La salida muestra los metadatos asociados a la señal de importación, tales como la fecha de creación y los detalles de la política. En el fragmento de código siguiente se muestra una salida de ejemplo.

    {
      "creationDate": "2020-06-08T16:58:29Z",
      "expirationDate": "2020-06-08T17:18:29Z",
      "maxAllowedRetrievals": 1,
      "remainingRetrievals": 1
    }
    

Recuperar la señal de importación

En el paso anterior, ha creado una señal de importación y ha visualizado los metadatos que están asociados a la señal.

En este paso, recuperará la clave pública y el valor nonce que están asociados con la señal de importación. Necesitará la clave pública para cifrar los datos en un paso posterior, y el nonce para verificar la solicitud de importación segura al servicio Hyper Protect Crypto Services.

Para recuperar el contenido de la señal de importación:

  1. Recupere la señal de importación que ha generado el paso anterior y guarde la respuesta en un archivo JSON.

    • Utilizar la API

      curl -X GET $HPCS_API_URL/api/v2/import_token \
          -H "Accept: application/vnd.ibm.collection+json" \
          -H "Authorization: $ACCESS_TOKEN" \
          -H "Bluemix-Instance: $INSTANCE_ID" > getImportTokenResponse.json
      
    • Utilice la CLI de IBM Key Protect

      ibmcloud kp import-token show -o json > getImportTokenResponse.json
      
  2. Opcional: Inspeccione el contenido de la señal de importación.

    jq '.' getImportTokenResponse.json
    

    La salida muestra información detallada sobre la señal de importación. En el fragmento de código siguiente se muestra una salida de ejemplo con valores truncados.

    {
      "creationDate": "2020-06-08T16:58:29Z",
      "expirationDate": "2020-06-08T17:18:29Z",
      "maxAllowedRetrievals": 1,
      "remainingRetrievals": 0,
      "payload": "MIICIjANBgkqhkiG...",
      "nonce": "8zJE9pKVdXVe/nLb"
    }
    

    El valor de payload representa la clave pública que está asociada a la señal de importación. Este valor está codificado en base64. Para mayor seguridad, Hyper Protect Crypto Services proporciona un valor nonce que se utiliza para verificar la singularidad de una solicitud al servicio. Tendrá que cifrar y proporcionar este valor al importar la clave de cifrado.

  3. Descodifique y guarde la clave pública en un archivo denominado PublicKey.pem y extraiga los valores en variables que se utilizarán más tarde.

    jq -r '.payload' getImportTokenResponse.json | openssl enc -base64 -A -d -out PublicKey.pem
    
    HPCS_PUBKEY="$(jq -r '.payload' getImportTokenResponse.json)"
    NONCE="$(jq -r '.nonce' getImportTokenResponse.json)"
    

    La clave pública se descarga ahora en la estación de trabajo en formato PEM. Continúe con el paso siguiente.

Crear una clave de cifrado

Con Hyper Protect Crypto Services, puede habilitar las ventajas de seguridad de Mantener su propia clave (KYOK) creando y cargando sus propias claves de cifrado para utilizarlas en IBM Cloud.

En el paso siguiente, creará una clave simétrica AES de 256 bits en el sistema local.

En esta guía de aprendizaje se utiliza el kit de herramientas de criptografía de OpenSSL para generar una clave pseudoaleatoria, pero es posible que desee explorar distintas opciones para generar claves más fuertes de acuerdo con sus necesidades de seguridad. Por ejemplo, es posible que desee utilizar el sistema de gestión de claves internas de la organización, respaldado por un módulo de seguridad de hardware (HSM) local, para crear y exportar claves.

Si desea crear una clave simétrica AES de 256 bits, desde la línea de mandatos, ejecute el siguiente mandato openssl:

openssl rand 32 > PlainTextKey.bin

Puede omitir este paso si utiliza su propia clave en esta guía de aprendizaje.

Correcto La clave de cifrado se ha guardado ahora en un archivo denominado PlainTextKey.bin. Continúe con el paso siguiente.

Establecer la clave de cifrado como una variable de entorno

Si crea la clave siguiendo el Paso 3, para codificar la clave y establecer el valor codificado como una variable de entorno, realice el mandato siguiente. Puede omitir este paso si utiliza su propia clave en esta guía de aprendizaje:

KEY_MATERIAL=$(openssl enc -base64 -A -in PlainTextKey.bin)

Cifrar el valor nonce con la clave de cifrado

Para una seguridad adicional, Hyper Protect Crypto Services requiere una verificación de nonce al importar una clave de cifrado al servicio.

En la criptografía, un nonce sirve como una señal de sesión que comprueba la singularidad de una solicitud para protegerse frente a ataques maliciosos y llamadas no autorizadas. Utilizando el mismo nonce que ha distribuido Hyper Protect Crypto Services, puede asegurarse de que la solicitud de cargar una clave es válida. El valor nonce se debe cifrar utilizando la misma clave que desea importar en el servicio.

Para cifrar el valor nonce:

  1. Si va a utilizar la API para realizar los pasos siguientes, haga lo siguiente:

    No es necesario que realice este paso si va a utilizar la CLI de IBM Key Protect.

    1. Descargue el kms-encrypt-nonce binario de ejemplo que es compatible con su sistema operativo. Extraiga el archivo y mueva el binario al directorio hs-crypto-test.

      El binario contiene un script que puede utilizar para ejecutar el cifrado AES-CBC en el valor nonce utilizando la clave que ha generado en el Paso 2. Para obtener más información sobre el script, consulte el archivo de origen en GitHub.

    2. Si utiliza Linux, marque el archivo como ejecutable ejecutando el siguiente mandato chmod. Puede omitir este paso si está utilizando Windows.

      chmod +x ./kms-encrypt-nonce
      
    3. Ejecute el script para cifrar el valor nonce con la clave que ha generado en el Paso 2.

  2. Guarde el nonce cifrado en un archivo denominado EncryptedValues.json.

    • Utilizar la API

      ./kms-encrypt-nonce -key $KEY_MATERIAL -nonce $NONCE -alg "CBC" > EncryptedValues.json
      
    • Utilice la CLI de IBM Key Protect

      ibmcloud kp import-token nonce-encrypt --key "$KEY_MATERIAL" --nonce "$NONCE" --cbc -o json > EncryptedValues.json
      
  3. Opcional: Inspeccione el contenido del archivo JSON.

    jq '.' EncryptedValues.json
    

    La salida muestra los valores que deberá proporcionar para el paso siguiente. En el fragmento de código siguiente se muestra una salida de ejemplo con valores truncados.

    {
      "encryptedNonce": "DVy/Dbk37X8gSVwRA5U6vrHdWQy8T2ej+riIVw==",
      "iv": "puQrzDX7gU1TcTTx"
    }
    

    El valor encryptedNonce representa el nonce original que se envuelve (o se cifra) mediante la clave th que ha generado utilizando OpenSSL. El valor de iv es el vector de inicialización (IV) que crea el algoritmo AES-CBC, y es necesario más adelante para que Hyper Protect Crypto Services pueda descifrar correctamente el nonce.

Cifrar la clave de cifrado creada

A continuación, utilice la clave pública distribuida por Hyper Protect Crypto Services en el Paso 2 para cifrar la clave de cifrado que ha creado utilizando OpenSSL.

  • Cifre la clave de cifrado creada con la API y asigne la clave a la variable de entorno:

    openssl pkeyutl \
      -encrypt \
      -pubin \
      -keyform PEM \
      -inkey PublicKey.pem \
      -pkeyopt rsa_padding_mode:oaep \
      -pkeyopt rsa_oaep_md:sha1 \
      -in PlainTextKey.bin \
      -out EncryptedKey.bin
    
    ENCRYPTED_KEY=$(openssl enc -base64 -A -in EncryptedKey.bin)
    

    Si se encuentra con un error de valores de parámetro al ejecutar el mandato openssl en Mac OSX, puede que tenga que asegurarse de que OpenSSL está configurado correctamente para el entorno. Si ha instalado OpenSSL utilizando Homebrew, ejecute brew update y después brew install openssl para obtener la última versión. A continuación, ejecute export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile para crear un enlace simbólico con el paquete. Desde la línea de mandatos, ejecute which openssl && openssl version para verificar que la versión más reciente de OpenSSL esté disponible bajo la ubicación /usr/local/. Si sigue encontrando errores, asegúrese de utilizar solamente los parámetros que se enumeran en este ejemplo.

  • Cifre la clave de cifrado creada con la CLI de IBM Key Protect:

    ibmcloud kp import-token key-encrypt -k "$KEY_MATERIAL" -p "$HPCS_PUBKEY" --hash SHA1 -o json > EncryptedKey.json
    ENCRYPTED_KEY=$(jq -r '.encryptedKey' EncryptedKey.json)
    

    Correcto Ya está listo para cargar la clave cifrada en Hyper Protect Crypto Services. Continúe con el paso siguiente.

Importar la clave cifrada

Ahora puede importar la clave cifrada utilizando la API de servicio de gestión de claves.

Para importar la clave cifrada:

  1. Recopile los valores del vector de inicialización (IV) y nonce cifrados.

    ENCRYPTED_NONCE=$(jq -r '.encryptedNonce' EncryptedValues.json)
    
    IV=$(jq -r '.iv' EncryptedValues.json)
    
  2. Almacene la clave cifrada en la instancia de servicio de Hyper Protect Crypto Services.

    • Utilizar la API

      curl -X POST  $HPCS_API_URL/api/v2/keys \
          -H "Accept: application/vnd.ibm.collection+json" \
          -H "Authorization: $ACCESS_TOKEN" \
          -H "Content-Type: application/json" \
          -H "Bluemix-Instance: $INSTANCE_ID" \
          -d '{
            "metadata": {
              "collectionType": "application/vnd.ibm.kms.key+json",
              "collectionTotal": 1
            },
            "resources": [
            {
              "name": "encrypted-root-key",
              "type": "application/vnd.ibm.kms.key+json",
              "payload": "'"$ENCRYPTED_KEY"'",
              "extractable": false,
              "encryptionAlgorithm": "RSAES_OAEP_SHA_1",
              "encryptedNonce": "'"$ENCRYPTED_NONCE"'",
              "iv": "'"$IV"'"
            }
          ]
        }' > createRootKeyResponse.json
      

      En el cuerpo de la solicitud, proporcione la clave de cifrado que ha preparado en el paso anterior. También proporcione los valores de nonce cifrado y de IV que se necesitan para verificar la solicitud. Por último, el valor extractable establecido en false designa la nueva clave como una clave raíz en el servicio que puede utilizar para el cifrado de sobre.

      Si la solicitud de API falla con un error de señal de importación caducada, vuelva al paso 1 para crear una nueva señal de importación. Recuerde que las señales de importación y las claves públicas asociadas caducan en base a la política que especifique en el momento de crearlas.

    • Utilice la CLI de IBM Key Protect

      ibmcloud kp key create new-imported-key --key-material "$ENCRYPTED_KEY" --encrypted-nonce "$ENCRYPTED_NONCE" --iv "$IV" --sha1 -o json > createRootKeyResponse.json
      

      De forma transparente para el usuario, Hyper Protect Crypto Services recibe el paquete cifrado a través de una conexión TLS 1.2. Dentro de un módulo de seguridad de hardware, el sistema utiliza la clave privada para descifrar la clave simétrica. Por último, el sistema utiliza la clave simétrica y el IV para descifrar el nonce y verificar la solicitud. Su clave ahora está almacenada en un módulo de seguridad de hardware validado por FIPS 140-2 Nivel 4 a prueba de manipulaciones.

  3. Ver los detalles de la clave.

    jq '.' createRootKeyResponse.json
    

    En el fragmento de código siguiente se muestra una salida de ejemplo.

    {
      "metadata": {
        "collectionType": "application/vnd.ibm.kms.key+json",
        "collectionTotal": 1
      },
      "resources": [
        {
          "id": "644cba65-e240-471f-8b84-14115447d2ae",
          "type": "application/vnd.ibm.kms.key+json",
          "name": "encrypted-root-key",
          "state": 1,
          "crn": "crn:v1:bluemix:public:hs-crypto:us-south:a/f047b55a3362ac06afad8a3f2f5586ea:346d9f67-4bb2-481e-a3e1-3c2c646aa886:key:644cba65-e240-471f-8b84-14115447d2ae",
          "extractable": false,
          "imported": true
        }
      ]
    }
    
    • El valor id es un identificador exclusivo que se asigna a la clave y se utiliza para llamadas posteriores a la API de servicio de gestión de claves.

    • El valor state establecido en 1 indica que la clave está ahora en el Estado de clave activa.

    • El valor de crn proporciona a vía de acceso de ámbito completa a la clave que especifica dónde reside el recurso en IBM Cloud.

    • Por último, los valores extractable e imported describen este recurso como una clave raíz que ha importado al servicio. Cuando establece el atributo extractable en true, el servicio designa la clave como una clave estándar que puede almacenar en sus aplicaciones o servicios. De lo contrario, cuando establece el atributo extractable en false, el servicio designa la clave como una clave raíz.

  4. Opcional: vaya al panel de control de Hyper Protect Crypto Services para ver y gestionar la clave.

    Puede examinar las características generales de sus claves desde la página de detalles de la aplicación. Elija entre una lista de opciones para gestionar la clave, como por ejemplo Rotación de la clave o Supresión de la clave.

Limpieza

  1. Recopile el identificador de la clave de cifrado que ha importado en el paso anterior.

    ROOT_KEY_ID=$(jq -r '.resources[].id' createRootKeyResponse.json)
    
  2. Elimine la clave de cifrado de la instancia de servicio de Hyper Protect Crypto Services.

    • Utilizar la API

      curl -X DELETE $HPCS_API_URL/api/v2/keys/$ROOT_KEY_ID \
        -H "Accept: application/vnd.ibm.collection+json" \
        -H "Authorization: $ACCESS_TOKEN" \
        -H "Bluemix-Instance: $INSTANCE_ID" | jq .
      
    • Utilice la CLI de IBM Key Protect

      ibmcloud kp key delete {ROOT_KEY_ID}
      
  3. Elimine todos los archivos locales asociados con esta guía de aprendizaje.

    rm kms-encrypt-nonce *.json *.bin *.pem
    
  4. Suprima el directorio de prueba que ha creado para esta guía de aprendizaje.

    cd .. && rm -r hs-crypto-test
    
  5. Opcional: Elimine la instancia de servicio de Hyper Protect Crypto Services.

    ibmcloud resource service-instance-delete import-keys-demo
    

    Si ha creado más claves de prueba en la instancia de servicio, asegúrese de eliminar todas las claves de cifrado de la instancia de servicio antes de dejar de suministrar la instancia.

Próximos pasos

En esta guía de aprendizaje, ha aprendido a configurar la API de servicio de gestión de claves de Hyper Protect Crypto Services, a crear una clave de cifrado y a importar de forma segura una clave cifrada en la instancia de servicio de Hyper Protect Crypto Services.