Aplicación
Dinamo El CSP es referenciado por JCA\JCE utilizando el identificadorND.
Las clases CSP no pueden clonarse.
El archivo keystore almacena la relación entre las claves almacenadas en el HSM y el CSP. Esta relación se establece de las siguientes maneras:
-
Creación de una clave a partir de las API JCA/JCE. De este modo, la clave se crea en el HSM pero se elimina al final del programa o cuando el objeto clave es eliminado por el recolector de basura de Java. Para que esta clave se mantenga en el HSM, debe incluirse en el almacén de claves, de modo que se garantice que no se eliminará al final del programa.
-
Al cargar un almacén de claves la lista de teclas se carga directamente desde HSM. No existe una representación física del almacén de claves, por lo que cuando se llama a la función
cargar()
sucedenull
en los parámetros de fichero y clave. Las claves se reconocerán como se describe en los puntos 3 y 4. Las contraseñas de las claves son una cadena vacía.Información
El nombre de la clave en el HSM es una secuencia de 16 caracteres aleatorios más 3 caracteres
JCA
que se colocan al final del nombre de la clave, con un total de 19 caracteres.Atención
Si el programa finaliza con un fallo inesperado, la llave no podrá retirarse del HSM.
Nomenclatura
Para la correcta interpretación de la clave privada, con su respectivo certificado (.cer) y cadena de certificados CA (p7b), debe seguirse la siguiente nomenclatura de claves.
Objeto | Regla de formación del nombre |
---|---|
Clave privada | <id_chave> |
Certificado | <id_chave>_cert |
Cadena de certificados | <id_chave>_chain |
Información
Cuando la cadena de certificados se carga en el almacén de claves, se clasifica según se define en RFC-5246.
Una vez cargadas las claves en el almacén de claves, se puede acceder al certificado y a la cadena de certificados a través de los respectivos métodos de recuperación disponibles en el alias de clave privada.
keystoreinstance.GetCertificate(id_chave)
keystoreinstance.GetCertificateChain(id_chave)
Cadenas
Las cadenas de certificados se aceptan con o sin el certificado principal (certificado relacionado con la propia clave).
Además de la forma descrita anteriormente, se permiten relaciones clave/cadena utilizando MAPs ( objetos HSM que permiten relacionar otros dos objetos). El uso de MAPs permite definir de forma más flexible la relación entre una clave privada y una cadena de certificados con nombres que no siguen la nomenclatura descrita en el punto (3) y el nombre del Alias en el KeyStore.
Esta relación es la siguiente:
- El nombre del objeto MAP dentro del HSM será el nombre del Alias en el KeyStore;
- El nombre de objeto de la primera ranura MAP será el nombre de la clave privada dentro del HSM;
- El nombre de objeto de la segunda ranura MAP será el nombre de la cadena de certificados dentro del HSM;
Las cadenas de certificados se aceptan con o sin el certificado principal (certificado relacionado con la propia clave).
Tiendas de llaves
DinamoExisten tres tipos de almacenes de claves disponibles en JCA/JCE , que se describen a continuación.
TAC
Tiene todos los permisos sobre las claves en el HSM, incluyendo eliminar y añadir claves en el HSM.
keystoreintance.getInstance("TAC", "ND")
TACV
TAC Virtual, similar al tipo TAC pero la eliminación de claves es sólo virtual, es decir, las claves sólo se eliminan del almacén de claves y no del HSM.
keystoreintance.getInstance("TACV", "ND")`
TACCON
Se comporta de la misma manera que el tipo TAC, salvo que el identificador de usuario, la contraseña y la dirección IP del HSM deben introducirse en los siguientes formatos usuario:contraseña@IP o accessToken@IP.
Cuando se utiliza nombre de usuario y contraseña, los campos ID de usuario y contraseña son obligatorios.
Al utilizar Fichas de acceso el campo accessToken
es obligatorio. O Ficha de acceso es la estructura DN_A_TOKEN
en formato Base64; por ejemplo AToken
devuelto por HSMCON o el TacAccessToken.getAToken()
y transformado en Base64.
La dirección IP del HSM sólo puede omitirse cuando está activo el equilibrio de carga.
Atención
Cuando se utiliza nombre de usuario y contraseña, las dos pestañas :
e @
debe utilizarse siempreaunque la dirección IP del HSM no se introduce. En el caso de las fichas de acceso @
debe ser siempre usado.
Ex:
keystoreintance.getInstance("TACCON", "ND")
keyStore.load(null, ("usr:12345678@10.0.62.10").toCharArray())
keyStore.load(null, ("usr:12345678@").toCharArray())
keyStore.load(null, ("bHVhbgAAAAAAAAAAAAAAAGIwx1mtzLLQ9OkapMIzRrTNxAssvFeUvDh1mO7I4x5xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=?@10.0.62.10").toCharArray())
ECCDHconSHA256KDF
Para utilizar el AcuerdoClave ECCDHconSHA256KDF
DINAMO con JCA debe utilizarse para generar Clave secreta
el parámetro spec DNECDHX963EspecParámetros
.
Constructor 1
Para inicializar DNECDHX963EspecParámetros
se pueden utilizar los siguientes parámetros.
Genera una clave persistente y exportable.
- kdfData KDF utilizado para generar la clave.
- keyLen Tamaño de la clave, en bits, que se generará en KeyAgreement.generateSecret(). El tamaño de la clave debe ser compatible con el algoritmo pasado en KeyAgreement.generateSecret().
public DNECDHX963ParameterSpec(byte[] kdfData, int keyLen );
Constructor 2
Inicializa los parámetros del algoritmo ECDH X9.63, que se utilizarán en la clase KeyAgreement.
- kdfData KDF utilizado para generar la clave.
- keyLen Tamaño de la clave, en bits, que se generará en KeyAgreement.generateSecret(). El tamaño de la clave debe ser compatible con el algoritmo pasado en KeyAgreement.generateSecret().
- exportable Informa de si la clave generada será exportable o no. Introduzca true para exportable y false para no exportable.
- temporary Informa de si la clave generada será temporal o no. Introduzca true para temporal y false para persistente.
java
public DNECDHX963ParameterSpec(byte[] kdfData,
int keyLen,
boolean exportable,
boolean temporary);