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.
-
Cuando se carga un almacén de claves, la lista de claves se carga directamente desde el HSM. No existe una representación física en fichero del almacén de claves, por lo que al llamar al método
load()
se pasanull
en los parámetros file y password. 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 HSM es una secuencia de 16 caracteres aleatorios más 3 caracteres
JCA
que se colocan al final del nombre de la clave, en total 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.
Cuando se utilizan Access Tokens, el campo accessToken
es obligatorio. El Access Token es la estructura DN_A_TOKEN
en formato Base64; por ejemplo: el AToken
devuelto por HSMCON o por el método TacAccessToken.getAToken()
y transformado a Base64.
La dirección IP del HSM sólo puede omitirse cuando está activo el equilibrio de carga.
Atención
Al utilizar usuario y contraseña, siempre deben utilizarse los dos separadores :
y @
, aunque no se indique la dirección IP del HSM. En el caso de los tokens de acceso, siempre debe utilizarse @
.
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
DINAMO Para utilizar el ECCDHwithSHA256KDF
KeyAgreement con la JCA debe utilizar la especificación de parámetrosDNECDHX963ParameterSpec
para generar la SecretKey
.
Constructor 1
Para inicializar DNECDHX963ParameterSpec
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);