R3 Corda
Información general
Esta guía del usuario integrada con el software R3 Corda se ha preparado utilizando las versiones de software y firmware que se indican a continuación: - SO Windows 10 (Español) - R3 Corda 4.7 - Firmware HSM: 5.0.26.0 (o superior) - Cliente HSM: 4.7.30 (o superior)
Requisitos
- Conectividad con el HSM (puerto TCP 4433).
- Software cliente HSM instalado (véase el tema Instalación).
- Servicio HSM iniciado.
- Credenciales de la partición HSM donde se creará o utilizará la clave privada.
Integración R3 Corda con HSM
Aplicación
El proveedor de cifrado Corda devuelve objetos JCA que se utilizan externamente. Por tanto, el paso inicial es configurar esta API de integración para conectar con el HSM. Para obtener más detalles sobre la API JCA/JCE del HSM, consulta el tema JCA/JCE.
Visión general
El proveedor de cifrado Corda utiliza dos tipos de claves: 1. simétricas 1. asimétrica
Las claves asimétricas están protegidas por la clave simétrica( wrapping) y se almacenan externamente al HSM. La clave simétrica, denominada clave envolvente, se guarda en el HSM y no se exporta (no existe tal opción en la interfaz del proveedor).
El proveedor implementa, y es llamado para ejecutar, las siguientes operaciones:
- Generar KEK(clave envolvente);
- Generar clave privada;
- Exportar clave privada cifrada por KEK;
- Exportar clave pública;
- Eliminar la clave privada del HSM;
- Firma;
El proveedor Dinamo Corda implementa WRAPPED que es el modo más seguro disponible en Corda.
Existen dos modos de funcionamiento. En ambos modos, la clave simétrica se genera y se mantiene en el HSM y la clave asimétrica se almacena fuera del HSM. La diferencia radica en el tratamiento de la clave asimétrica.
-
Envuelta: Genera y utiliza la clave privada dentro del HSM. La clave fuera del HSM siempre está cifrada por la KEK(clave envolvente).
-
Modo Degradado Envuelto: Genera y utiliza la clave privada fuera del HSM. La clave se genera y utiliza en la memoria de la aplicación. Sólo entra en el HSM para ser cifrada/descifrada por la KEK(clave envolvente).
Nombres clave
Los alias de clave no son compatibles con los nombres de objeto de HSM, ya que contienen caracteres no aceptados y suelen ser más largos que el máximo permitido por HSM.
Algunos ejemplos de alias de Corda:
- Claves simétricas (clave de envoltura) :
a74eb4c1-b4d9-4e1d-9e48-88e6abad7d63
- Llaves no persistentes:
2f5f5b11-35bc-4eb3-8f6b-fb4e3d723a26
La abstracción del proveedor permite procesar el nombre de la clave y pasar un nombre compatible al HSM. La solución es una transformación de los alias pasados por Corda:
- Hacer un hash MD5 de los alias pasados por Corda;
- Transformar en una cadena hexadecimal;
Estos alias transformados se utilizan como alias en las llamadas JCA.
Las transformaciones sólo se realizan en claves no efímeras. En estos casos, el alias original se almacena en los metadatos del objeto, en el atributo label.
Peligro
En caso de error, utilice siempre el nombre del alias original que se recibió como parámetro. Estas cadenas se validan en las pruebas de compatibilidad.
Atributos clave
Los atributos de las claves simétrica y asimétrica se definen en la configuración de JCA. Para más detalles, consulte el tema Configuración.
Tipo de llave | Exportable | Observaciones |
---|---|---|
Asimétrico | ✔️ | Las claves asimétricas se cifran mediante una clave simétrica y se almacenan fuera del HSM. Por tanto, deben poder exportarse. Siempre se exportan. |
Simétrico | ❌ | Las claves simétricas se utilizan para proteger claves asimétricas y no salen del HSM. Por tanto, pueden no ser exportables. Este es el modo utilizado en el ejemplo de Corda. No hay ningún obstáculo para cambiar este parámetro. |
Peligro
Sólo puede utilizar 01 usuario configurado por aplicación. No utilice varios usuarios en el mismo proceso.
Configuración
Dado que utilizamos la JCA en nuestra implementación, la configuración se realiza a través de la función Configuración.ND
de la JCA. Las claves asimétricas deben configurarse como exportables y las simétricas opcionalmente como no exportables. El nombre del servicio Crypto Dinamo es:
DINAMO
En los archivos de configuración corda
freshIdentitiesConfFiguration {
mode="WRAPPED
cryptoServiceConfFiguration {
cryptoServiceName="DINAMO"
cryptoServiceConf="dinamo.conf"
}
perotienenKeyAlias="llave_maestra"
}
El archivo de configuración dinamo.conf
puede estar vacío o contener el archivo.config.hsm
.
El campo archivo.config.hsm
debe introducirse en el archivo de configuración de JCA. Introduzca el nombre del archivo con la ruta completa. No utilice comillas "
y si Windows utiliza \\
para separar las carpetas.
Ejemplos de contenidos aceptados:
-
ini hsm.config.file=C:corda-4.7-full-release\pository\com\r3\corda\\corda-hsm-tck\4.7\cordaconfidential.nd
-
ini hsm.config.file=
-
Archivo vacío
Configure el archivo de configuración JCA:
- Marcar las claves asimétricas como exportables;
- Marcar las claves simétricas como no exportables (opcional).
Peligro
Sólo puede utilizar 01 usuario configurado por aplicación. No utilice varios usuarios en el mismo proceso.
Los archivos JCA y JNI Dinamo pueden estar ubicados en la misma carpeta que el proveedor Corda Dinamo , que es la carpeta del controlador por defecto para Corda o una específica indicada en la configuración Corda.
ndjca.jar
tancjavalib.jar
dinamo_corda.jar
La biblioteca binaria (TacNDJavaLib.so
o TacNDJavaLib.dll
) debe estar disponible en SENDERO del sistema operativo.
En proveedor Dinamo Corda están disponibles en SLF4Jigual que Corda. La configuración para la generación de registros se realiza del mismo modo que Corda. Es posible que tenga que introducir el spec de proveedor Dinamo Corda. Basta con crear el archivo cordaspec.conf
con el contenido que figura a continuación e informe en caso necesario.
Pruebas
Las pruebas de compatibilidad Corda están disponibles en sitio web Corda y puede descargarse tras inscribirse en la versión de prueba.
- Descargar el archivo corda-4.7-full-release.tar.gz
y descomprímelo;
- La prueba está disponible en .\repository\com\r3\corda\corda-hsm-tck\4.7
;
- Se ejecuta con el comando java -jar corda-hsm-tck-4.7.jar
más opciones, que se describen a continuación;
Información
La aplicación de prueba está disponible en deps en corda\4.7\bin
-
Requisitos previos:
02 después de instalar y configurar JCA Dinamo:
- Archivo de configuración del proveedor Dinamo Corda. Llamaremos a este archivo
corda.propiedades
; - Archivo de especificaciones del proveedor Dinamo Corda. Llamaremos a este archivo
cordaspec.conf
;
El archivo de propiedades del proveedor puede configurarse como se describe en la sección Configuración. El archivo de especificaciones debe tener el siguiente contenido.
soportesoportedEsquemas: ["RSA_SHA256", "ECDSA_SECP256R1_SHA256", "ECDSA_SECP256K1_SHA256"] supptedSchemesForWrappingOperatons: ["RSA_SHA256", "ECDSA_SECP256R1_SHA256", "ECDSA_SECP256K1_SHA256"] suppendWrappingMode: WRAPPED sessionIenctivityTimeotMinutos: 20
- Archivo de configuración del proveedor Dinamo Corda. Llamaremos a este archivo
Ejecución
Para ejecutar la prueba de interfaz, utilice el siguiente comando.
Reemplazar:
- c:\cordaprovider
: por la ruta de la carpeta que contiene dinamo_corda.jar
incluidos los tarros JCA;
- c:\corda.properties
: por la ruta con el nombre de archivo del archivo de configuración Dinamo Corda
;
- c:\cordaspec.conf
: por la ruta con el nombre de archivo del archivo de especificaciones Dinamo Corda
;
Peligro
No utilice rutas relativas, algunas pruebas se ejecutan en carpetas fuera del directorio actual.
java -jar .\corda-hsm-tck-4.7.jar -n "DINAMO" -d "c:\cordaprovider" -r ".\rest-results" -lc "c:\corda.properties" -s "c:\cordaspec.conf" -cc "c:\corda.properties" -tc "c:\corda.properties" -t interface
Se pueden realizar más pruebas cambiando el -t
. Ver ayuda.