Nota:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Creación de redundancia para claves asimétricas en almacenes virtuales de Oracle Cloud Infrastructure
Introducción
En el acelerado mundo digital actual, la seguridad de los datos es de suma importancia. A medida que las organizaciones confían cada vez más en una infraestructura basada en la nube, es fundamental garantizar la confidencialidad de la información confidencial. Para ello, suelen utilizar el cifrado, que requiere una gestión de claves segura. Sin embargo, la gestión de claves puede plantear importantes desafíos, sobre todo en lo que respecta a la redundancia y la disponibilidad. En esta entrada del blog, analizaremos cómo puede lograr redundancia para claves asimétricas en almacenes virtuales y cómo las aplicaciones en dos regiones diferentes pueden aprovechar esto para el cifrado y el descifrado.
Oracle Cloud Infrastructure (OCI) ofrece Virtual Private Vault (VPV), un servicio de gestión de claves totalmente gestionado que le permite gestionar de forma centralizada las claves utilizadas para el cifrado de datos, el descifrado y la firma. Una de las funciones más críticas de VPV es la copia de seguridad y restauración entre regiones. Con esta función, puede realizar copias de seguridad y restaurar claves entre regiones, lo que las hace disponibles para su uso en una región diferente a la región en la que se crearon.
Vale la pena notar que la copia de seguridad y la restauración solo funcionan para VPV, no para Virtual Vault (VV), otro servicio de gestión de claves ofrecido por OCI. Además, no hay forma de realizar una copia de seguridad de las claves del módulo de seguridad de hardware (HSM) en Virtual Vault. Sin embargo, con la opción de clave Traiga su propia clave (BYOK)/import, puede importar el mismo material de claves en los almacenes de dos regiones diferentes e incluso si una región está completamente caída, la copia en otra región servirá como copia de seguridad. Esta redundancia garantiza que sus claves estén siempre disponibles, incluso si una región sufre una interrupción o un desastre. También le permite cumplir los requisitos normativos y de conformidad que exigen redundancia clave y recuperación ante desastres.
Objetivo
En este tutorial se guía por los pasos de alto nivel para importar la misma clave RSA en almacenes virtuales ubicados en dos regiones diferentes. La importación de claves se realizará en una región mediante un procedimiento paso a paso, mientras que en la otra región se utilizará un script para la importación. Después de importar la clave, cifraremos los datos de prueba con la clave en una región y, a continuación, descifraremos el texto cifrado resultante con la misma clave en el almacén ubicado en la otra región.
Requisitos
Cuenta de OCI con acceso para crear y gestionar almacenes y claves.
Nota: Para el escenario "Traiga su propia clave (BYOK), debe aplicar parches a OpenSSL. Para aplicar parches a OpenSSL, se necesita acceso con privilegios para ejecutar los comandos de shell necesarios. Se recomienda ejecutar los comandos de shell en un cuadro de Linux con acceso con privilegios. Los comandos de la CLI de OCI se pueden ejecutar en el shell en la nube o en un cuadro de Linux donde la CLI de OCI está instalada y configurada. Siga este procedimiento para instalar y configurar la CLI de OCI en un cuadro de Linux.
Tarea 1: importe la clave en un almacén de la primera región (ejemplo:Phoenix)
Siga este procedimiento para importar una clave asimétrica (RSA) a un almacén virtual.
-
Aplique un parche a OpenSSL: para el escenario "Traiga su propia clave (BYOK), debe aplicar un parche a OpenSSL para el ajuste de
RSA_OAEP_AES_SHA256
. Siga este procedimiento para aplicar parches a OpenSSL. -
Generar el material clave: utilice el material clave generado por una herramienta u origen según sus requisitos. En este tutorial, estamos utilizando OpenSSL para generar el material clave.
$HOME/local/bin/openssl.sh genrsa -out PRIVATEKEY.pem 2048
-
Obtener la clave de encapsulado RSA pública.
oci kms management wrapping-key get --endpoint <control_plane_URL>
oci kms management wrapping-key get --endpoint https://abcdefghijk-management.kms.us-phoenix-1.oraclecloud.com --raw-output --query 'data."public-key"' > VAULT_PUBLIC_WRAPPING_KEY.pem
-
Aplique RSA-OAEP con AES para ajustar el material de claves mediante la interfaz CLI.
a. Genere una clave AES temporal.
openssl rand -out <temporary_AES_key_path> 32
$HOME/local/bin/openssl.sh rand -out TEMP_AES_KEY.key 32
b. Ajuste la clave AES temporal con la clave de ajuste pública mediante RSA-OAEP con SHA-256.
openssl pkeyutl -encrypt -in <temporary_AES_key_path> -inkey <vault_public_wrapping_key_path> -pubin -out <wrapped_temporary_AES_key_file> -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
$HOME/local/bin/openssl.sh pkeyutl -encrypt -in TEMP_AES_KEY.key -inkey VAULT_PUBLIC_WRAPPING_KEY.pem -pubin -out WRAPPED_TEMP_AES_KEY.bin -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
c. Genere hexadecimal del material de claves AES temporal.
temporary_AES_key_hexdump=$(hexdump -v -e '/1 "%02x"' < temporary_AES_key_path)
TEMPORARY_AES_KEY_HEXDUMP=$(hexdump -v -e '/1 "%02x"' < TEMP_AES_KEY.key)
d. Si la clave privada RSA que desea importar está en formato PEM, conviértala en DER.
${OpenSSL_path} pkcs8 -topk8 -nocrypt -inform PEM -outform DER -in <your_pem_RSA_private_key_path> -out <your_RSA_private_key_file>
$HOME/local/bin/openssl.sh pkcs8 -topk8 -nocrypt -inform PEM -outform DER -in PRIVATEKEY.pem -out TARGET_KEY.key
e. Ajuste la clave privada RSA con la clave AES temporal.
openssl enc -id-aes256-wrap-pad -iv A65959A6 -K temporary_AES_key_hexdump -in <your_RSA_private_key_file> -out <wrapped_target_key_file>
$HOME/local/bin/openssl.sh enc -id-aes256-wrap-pad -iv A65959A6 -K $TEMPORARY_AES_KEY_HEXDUMP -in TARGET_KEY.key -out WRAPPED_TARGET_KEY.bin
f. Cree el material de claves encapsulado concatenando ambas claves encapsuladas.
cat <wrapped_temporary_AES_key_file> <wrapped_target_key_file> > <wrapped_key_material_file>
cat WRAPPED_TEMP_AES_KEY.bin WRAPPED_TARGET_KEY.bin > WRAPPED_KEY_MATERIAL.bin
g. Aplique la codificación base64 en el material de claves encapsulado y, a continuación, impórtela para crear una clave mediante CLI.
base64 WRAPPED_KEY_MATERIAL.bin -w 0 > WRAPPED_KEY_MATERIAL.base64
-
Importe el material de claves como clave externa mediante la CLI de OCI.
oci kms management key import --wrapped-import-key <wrapped_key_material> --compartment-id <compartment_id> --display-name <key_name> --endpoint <control_plane_URL> --key-shape <key_encryption_information> --protection-mode <key_protection_mode>
echo "{ \"wrappingAlgorithm\": \"RSA_OAEP_AES_SHA256\", \"keyMaterial\": \"$(cat WRAPPED_KEY_MATERIAL.base64)\" }" > WRAPPED_IMPORT_KEY.json
echo "{ \"algorithm\": \"RSA\", \"length\": \"256\" }" > KEY_SHAPE.json
oci kms management key import --wrapped-import-key file://WRAPPED_IMPORT_KEY.json --compartment-id ocid1.compartment.oc1..aaaaaaaabbbbbbbbbccccccccdddddddeeeeeefffff --display-name IMPORTEDKEY --endpoint https://abcdefghijk-management.kms.us-phoenix-1.oraclecloud.com --key-shape file://KEY_SHAPE.json --protection-mode SOFTWARE
Tarea 2: importe la misma clave en un almacén virtual en la segunda región (ejemplo: Ashburn)
-
Utilice el siguiente script para importar una clave asimétrica (RSA) a un almacén virtual.
-
Abra un símbolo del sistema y, a continuación, ejecute el siguiente script y reemplace los nombres de archivos y valores de ejemplo según corresponda.
#!/bin/bash #This script is for demonstration purposes only. It provides #a functioning set of calls to show how to import RSA keys #into the OCI Vault service. set -e; #set -x; #OPENSSL_PATH="<path to patched openssl.sh>" #PRIVATE_KEY="<path to target private key which needs to be imported>" #KEY_SIZE="<key size in bytes>" #DISPLAY_NAME="<Display Name>" #VAULT_KEYMANAGEMENT_ENDPOINT="<Vault Management Endpoint>" #COMPARTMENT_ID="<Compartment OCID>" #Sample OPENSSL_PATH="$HOME/local/bin/openssl.sh" PRIVATE_KEY="$HOME/local/bin/PRIVATEKEY.pem" KEY_SIZE="256" DISPLAY_NAME="IMPORTEDKEY" VAULT_KEYMANAGEMENT_ENDPOINT="https://abceefghijk-management.kms.us-ashburn-1.oraclecloud.com" COMPARTMENT_ID="ocid1.compartment.oc1..aaaaaaaabbbbbbccccccccdddddddeeeeeeeffffffff" WORK_DIR=$(mktemp -d -t kms_XXXX) BASE64="base64" echo "Openssl Path: ${OPENSSL_PATH}" echo "Work Dir: ${WORK_DIR}" #Getting Vault Public RSA Wrapping Key oci kms management wrapping-key get --endpoint ${VAULT_KEYMANAGEMENT_ENDPOINT} --raw-output --query 'data."public-key"' > ${WORK_DIR}/vault_public_wrapping_key.pem WRAPPING_KEY="${WORK_DIR}/vault_public_wrapping_key.pem" #Convert the private key to PKCS8 DER format. target_key_path=${WORK_DIR}/target_key.key ${OPENSSL_PATH} pkcs8 -topk8 -nocrypt -inform PEM -outform DER -in ${PRIVATE_KEY} -out ${target_key_path} #Generate a temporary AES key. temp_aes_key_path=${WORK_DIR}/temp_aes_key.key ${OPENSSL_PATH} rand -out ${temp_aes_key_path} 32 #Wrap the temporary AES key by using RSA-OAEP with SHA-256. wrapped_temp_aes_key=${WORK_DIR}/wrapped_temp_aes_key.bin ${OPENSSL_PATH} pkeyutl -encrypt -in ${temp_aes_key_path} -inkey ${WRAPPING_KEY} -pubin -out ${wrapped_temp_aes_key} -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 #Wrap the target RSA key. wrapped_target_key=${WORK_DIR}/wrapped_target_key.bin temp_aes_key_hexdump=$(hexdump -v -e '/1 "%02x"' < ${temp_aes_key_path}) ${OPENSSL_PATH} enc -id-aes256-wrap-pad -iv A65959A6 -K ${temp_aes_key_hexdump} -in ${target_key_path} -out ${wrapped_target_key} #Create the wrapped key material. wrapped_key_material_bin=${WORK_DIR}/wrapped_key_material.bin cat ${wrapped_temp_aes_key} ${wrapped_target_key} > ${wrapped_key_material_bin} echo "Binary wrapped key for console is available at: ${wrapped_key_material_bin}" #Import the wrapped key to the Vault service after base64 encoding the payload. wrapped_key_material_base64=${WORK_DIR}/wrapped_key_material.base64 ${BASE64} ${wrapped_key_material_bin} -w 0 > ${wrapped_key_material_base64} echo "Base64 encoded wrapped key for CLI or API is available at: ${wrapped_key_material_base64}" #####1. IMPORT NEW KEY USING CONSOLE ##### #browse and upload ${WORK_DIR}/wrapped_key_material.bin file in key import section on console. #####2. IMPORT NEW KEY USING OCI_CLI ##### key_material=$(${BASE64} ${wrapped_key_material_bin}) echo "{ \"wrappingAlgorithm\": \"RSA_OAEP_AES_SHA256\", \"keyMaterial\": \"$(cat ${wrapped_key_material_base64})\" }" > wrapped_import_key.json echo "{ \"algorithm\": \"RSA\", \"length\": ${KEY_SIZE} }" > key_shape.json oci kms management key import --wrapped-import-key file://wrapped_import_key.json --compartment-id ${COMPARTMENT_ID} --display-name ${DISPLAY_NAME} --endpoint ${VAULT_KEYMANAGEMENT_ENDPOINT} --key-shape file://key_shape.json --protection-mode SOFTWARE
Tarea 3: Cifrado y descifrado de datos
Ahora que tiene una clave creada en su almacén, puede utilizarla para cifrar y descifrar los datos.
-
Obtenga el ID de clave para la clave que ha creado. Puede encontrar el ID de clave haciendo clic en la clave del almacén y, a continuación, buscando el campo "ID de clave" en el panel de detalles de clave.
-
Puede utilizar las claves para cifrar y descifrar los datos. El texto sin formato incluido en la solicitud de ejemplo es un valor base64-encoded de una cadena UTF-8.
-
Texto sin formato: OCI es una infraestructura de nube pública que prioriza la seguridad
-
Base64: T0NJIGlzIGEgc2VjdXJpdHktZmlyc3QgcHVibGljIGNsb3VkIGluZnJhc3RydWN0dXJl
-
-
Cifre con la clave RSA presente en el almacén para la primera región.
oci kms crypto encrypt --key-id <key_ocid> --plaintext <plaintext Base64 Encoded> --encryption-algorithm <Encryption Algorithm> --endpoint <Vault Crypto Endpoint>
-
Para cifrar mediante el algoritmo de cifrado de clave RSA es un parámetro obligatorio y los valores aceptados son RSA_OAEP_SHA_1, RSA_OAEP_SHA_256
-
-
Descifrar mediante clave RSA presente en el almacén de la segunda región.
oci kms crypto decrypt --key-id <key_ocid> --ciphertext <cipher text> --encryption-algorithm <Encryption Algorithm> --endpoint <Vault Crypto Endpoint>
OCI Key Management ofrece funciones sólidas que le permiten lograr redundancia de claves y gestionar de forma segura sus claves de cifrado. Con la copia de seguridad entre regiones, la restauración y la replicación para el almacén privado virtual y la opción de importación BYOK/key para el almacén virtual, puede asegurarse de que los datos permanecen seguros incluso si una región está completamente caída. Las aplicaciones alojadas en diferentes regiones pueden aprovechar estas funciones para cifrar y descifrar datos de forma segura en diferentes regiones.
Enlaces relacionados
Agradecimientos
Autor: Chaitanya Chintala (asesor de seguridad en la nube)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Create redundancy for Asymmetric Keys in Oracle Cloud Infrastructure Virtual Vaults
F82529-01
June 2023
Copyright © 2023, Oracle and/or its affiliates.