nCipher nShield/netHSM

A continuación se explica cómo se instala y utiliza la tarjeta nCipher nShield.

Introducción

Concepto de seguridad mundial de nCipher

El material de claves del HSM nShield se almacena en los llamados blobs de claves del equipo host. Cada blob de claves es un contenedor cifrado que contiene claves y una Lista de Control de Acceso (LCA) que determina cómo se permite el uso de las claves contenidas en el blob.

Antes de poder usar un HSM nShield, debe configurar un entorno de seguridad. Un entorno de seguridad consta de lo siguiente:

  • Un conjunto de HSM que comparten la misma clave de módulo

  • Exactamente un conjunto de tarjetas de administrador (ACS) que otorga acceso administrativo al mundo de la seguridad

  • Cero o más blobs de clave, donde cada blob de clave está protegido por uno de los siguientes

    • La clave del módulo y un conjunto de tarjetas de operador (OCS)

    • La clave del módulo y una frase de contraseña

    • La clave del módulo únicamente

Al crear un mundo de seguridad, se genera una nueva clave de módulo dentro del HSM y se crea un ACS. Tanto el ACS como el OCS son un conjunto de N tarjetas inteligentes, por lo que se requieren M tarjetas inteligentes para autorizar una operación o descifrar un blob de claves.

Precargar blobs de claves

Cada blob de clave creado en el entorno de seguridad corresponde a un token en EJBCA. Para que el token sea visible al crear un nuevo token criptográfico en EJBCA, es necesario precargar los blobs de clave que se van a usar. Al precargar un blob de clave, este se copia y se descifra dentro del HSM. El usuario del equipo host que ejecutó el comando de precarga puede usar las claves del blob de clave hasta que:

  • Hay un tiempo de espera (controlado por el parámetro --timeout del comando createocs)

  • La última tarjeta de operador del OCS fue expulsada del HSM (si se utiliza un OCS para proteger el blob de claves y el OCS es un conjunto de tarjetas no persistentes)

  • O si se interrumpió la sesión PKCS#11, por ejemplo, porque el HSM se desconectó del host.

Para precargar blobs de clave, se utiliza el comando preload , para tokens OCS, o el comando ppmk , para tokens de tarjeta blanda.

Instrucciones de instalación de ejemplo

Paso 1: Instalar el módulo nShield y crear un token

Instale el módulo nShield como se describe en la Guía de instalación de nShield. Instale el software cliente en el servidor EJBCA y conéctelo al HSM.

Los componentes del cliente necesarios para instalar son:

  • hwsp (controladores, demonio, etc.)

  • ctls (administración de claves y otras herramientas principales, herramientas de generación de claves, configuración, herramientas de prueba, pkcs11, etc.)

  • ctd (herramientas API básicas nativas y estándar)

A continuación se proporciona un ejemplo resumido de lo anterior, sobre cómo instalar el módulo nShield y crear conjuntos de tarjetas de administrador y operador:

  1. Asegúrese de tener instalado todo el software y los controladores necesarios y de haber creado el usuario y el grupo nfast. En Linux, ¿debería instalarse el software en /opt/nfast o en la ubicación a la que apunta la variable de entorno NFAST_HOME?

  2. Inicie sesión como usuario nfast: sudo su nfast

  3. Establezca el cuadro nCipher en modo de inicialización colocando el interruptor en modo I.

  4. Borre el cuadro nCipher presionando el botón de reinicio en el dispositivo.

  5. Compruebe que el modo esté en modo de preinicialización y no en modo operativo :

    $ /opt/nfast/bin/enquiry
    Server:
    enquiry reply flags none
    enquiry reply level Six
    serial number 41C5-BA04-6D2C
    mode operational
    version 2.23.6
    speed index 147
    rec. queue 442..642
    level one flags Hardware HasTokens
    version string 2.23.6cam5, 2.22.6cam7 built on Apr 25 2005 18:15:46
    checked in 00000000431dca98 Tue Sep 6 18:58:00 2005
    level two flags none
    max. write size 8192
    level three flags KeyStorage
    level four flags OrderlyClearUnit HasRTC HasNVRAM HasNSOPermsCmd ServerHasPollCmds FastPollSlotList HasSEE HasKLF HasShareACL HasFeatureEnable HasFileOp HasLongJobs ServerHasLongJobs AESModuleKeys NTokenCmds LongJobsPreferred
    code 0 type module 0
    product name nFast server
    device name
    EnquirySix version 4
    groups impath kx
    feature ctrl flags none
    features enabled none
    version serial 0
    remote server port 9004
    Module #1:
    enquiry reply flags none
    enquiry reply level Six
    serial number 41C5-BA04-6D2C
    mode pre-initialisation
    version 2.22.6
    speed index 147
    rec. queue 9..152
    level one flags Hardware HasTokens InitialisationMode PreMaintInitMode
    version string 2.22.6cam7 built on Apr 25 2005 18:15:46
    checked in 00000000426636cd Wed Apr 20 13:02:37 2005
    level two flags none
    max. write size 8192
    level three flags KeyStorage
    level four flags OrderlyClearUnit HasRTC HasNVRAM HasNSOPermsCmd ServerHasPollCmds FastPollSlotList HasSEE HasKLF HasShareACL HasFeatureEnable HasFileOp HasLongJobs ServerHasLongJobs AESModuleKeys NTokenCmds LongJobsPreferred
    code 6 type module 6
    product name nC1002P /nC3022P
    device name #1 nFast PCI device, bus 0, slot 13.
    EnquirySix version 5
    groups impath kx DHPrime1024
    feature ctrl flags LongTerm
    features enabled StandardKM
    version serial 24
    rec. LongJobs queue 8
    SEE machine type de máquina gen1AIF
  6. Crea el mundo de seguridad con el comando:

    $ /opt/nfast/bin/new-world -i -Q 1 /1
    15:04:50 WARNING: Module #1: preemptively erasing module to see its slots!
    Create Security World:
    Module 1: 0 cards of 1 written
    Module 1 slot 0: empty
    Module 1 slot 0: unknown card
    Module 1 slot 0:- passphrase specified - overwriting card
    Card writing complete.
    security world generated on module #0; hknso = 6807e0b031c4f797b739ec33ca7dba05279cf54f

    La opción -QK/N indica cuántas tarjetas de administración se crean (N). Se necesitarán K de estas tarjetas para restaurar un módulo con una copia de seguridad del mundo de seguridad. 1/1 es una mala opción en producción, pero es suficiente en este ejemplo. Elija K >=3 y N > K en producción.

  7. Cambie el modo en el interruptor del dispositivo al modo O.

  8. Haga clic en Borrar nuevamente.

  9. Consultar con consulta que el modo ha cambiado a Operacional
    Ejemplo de creación de tarjetas de operador:

    $ /opt/nfast/bin/createocs -m 1 -Q 2 /3 -N ejbca -M -p -T 0
    Creating Cardset:
    Module 1: 0 cards of 3 written
    Module 1 slot 0: Admin Card #1
    Module 1 slot 0: empty
    Module 1 slot 0: blank card
    Module 1 slot 0:- passphrase specified - writing card (naming `EJBCA card 1')
    Module 1: 1 card of 3 written
    Módulo 1 ranura 0: retirar la tarjeta #1 Module 1 slot 0: remove already-written card
    Module 1 slot 0: empty
    Module 1 slot 0: blank card
    Module 1 slot 0:- passphrase specified - writing card (naming `EJBCA card 2')
    Module 1: 2 cards of 3 written
    Module 1 slot 0: remove already-written card #2
    Module 1 slot 0: empty
    Module 1 slot 0: blank card
    New passphrases do not match; please try again.
    Module 1 slot 0:- passphrase specified - writing card (naming `EJBCA card 3')
    Card writing complete.
    cardset created; hkltu = 8d30f2ab5bdccacd8a4333aefed2c0ea1ff0e6db
    $

    Esto generará 3 tarjetas del conjunto ejbca . Se necesitarán dos de estas tarjetas para generar claves e iniciar ejbca. Se pueden usar diferentes conjuntos de tarjetas para diferentes CA.

    El comando de precarga (ver a continuación) siempre debe llamarse como el mismo usuario a menos que se elimine el directorio /opt/nfast/kmdata/preload.
    Si recibe un error HostDataAccessDenied al ejecutar la precarga o iniciar JBoss, se debe a que los permisos de archivo en el directorio /opt/nfast/kmdata/preload son incorrectos. Probablemente se deba a que (en algún momento) ejecutó la precarga con otro usuario, como root o nfast.

  10. Cargue el conjunto de tarjetas para que se puedan generar las claves protegidas por el conjunto de tarjetas (conjunto de tarjetas llamado ejbca ):

    $ /opt/nfast/bin/preload -c ejbca pause
    Loading cardsets:
    ejbca on modules 1
    Loading `ejbca':
    Module 1 slot 0: `ejbca ' #3 (`EJBCA card 3' )
    Module 1 slot 0:- passphrase supplied - reading card
    Module 1 slot 0: `ejbca ' #3 (`EJBCA card 3' ): already read
    Module 1 slot 0: empty
    Module 1 slot 0: `ejbca ' #2 (`EJBCA card 2' )
    Module 1 slot 0:- passphrase supplied - reading card
    Card reading complete.
    Loading complete; now pausing

Paso 2: Crear claves PKCS#11 en el módulo nShield

<p Puede crear claves en HSM con EJBCA mediante la interfaz de línea de comandos de clientToolBox o la interfaz de administración web. Usar la CLI es una forma muy rápida y cómoda de verificar el funcionamiento de las conexiones HSM.

Todos los conjuntos de tarjetas de operador precargadas (OCS) tienen su propia ranura. No es posible predecir el ID de la ranura. Sin embargo, la etiqueta de la ranura indica el nombre de la OCS. El índice de las ranuras depende del orden de carga de las OCS, por lo que se recomienda referenciarlas mediante la etiqueta de ranura/token.

Los siguientes comandos asumen que EJBCA está instalado en /opt/ejbca, JBoss en /opt/jboss y nShield en /opt/nfast. El software puede instalarse en otras ubicaciones, por lo que deberá modificar los comandos según corresponda.

Para crear claves PKCS#11 en el módulo nShield, utilice la interfaz de línea de comandos:

Inicie sesión como el usuario que ejecuta el servidor de aplicaciones. Este usuario debe ser miembro del grupo nfast.

Para crear claves PKCS#11, haga lo siguiente:

  1. Crea 3 claves protegidas por el conjunto de claves ejbca de esta manera:

    $ ~nfast /bin/preload -c ejbca /opt/ejbca/dist/clientToolBox/ejbcaClientToolBox .sh PKCS11HSMKeyTool generate /opt/nfast/toolkits/pkcs11/libcknfast .so 4096 signKey TOKEN_LABEL:ejbca
    PKCS11 Token [SunPKCS11-NFastJava] Password:
    Creating certificate with entry signKey.
    $ ~nfast /bin/preload -c ejbca /opt/ejbca/dist/clientToolBox/ejbcaClientToolBox .sh PKCS11HSMKeyTool generate /opt/nfast/toolkits/pkcs11/libcknfast .so 2048 defaultKey TOKEN_LABEL:ejbca
    Loaded pkcs11 uc17cfc7c330e613af5709789ff823a476177e233c-d165e440baa8dc9963780c682836ba17513e8cbf key (RSAPrivate) on modules 1
    PKCS11 Token [SunPKCS11-NFastJava] Password:
    Creating certificate with entry defaultKey.
    $ ~nfast /bin/preload -c ejbca /opt/ejbca/dist/clientToolBox/ejbcaClientToolBox .sh PKCS11HSMKeyTool generate /opt/nfast/toolkits/pkcs11/libcknfast .so 1024 testKey TOKEN_LABEL:ejbca
    Loaded pkcs11 uc17cfc7c330e613af5709789ff823a476177e233c-27cfdae84bf4298f2dde83cd00980a81bcf095bf key (RSAPrivate) on modules 1
    PKCS11 Token [SunPKCS11-NFastJava] Password:
    Creating certificate with entry testKey.

Paso 3: Crear una CA usando el HSM nShield

Para iniciar EJBCA, la precarga debe estar ejecutándose con los almacenes de claves necesarios cargados. En este ejemplo, esto se realizó en el paso 2. Ahora, la precarga se utiliza para iniciar JBoss/WildFly:

$ ~nfast /bin/preload -c ejbca $APPSRV_HOME /bin/standalone .sh

Para crear una nueva CA, realice lo siguiente en la interfaz de administración de EJBCA:

  1. Cree un nuevo token criptográfico. Seleccione PKCS#11 como tipo. Use "Etiqueta de ranura/token" para referenciar la ranura; el índice de la ranura puede cambiar según el orden de carga de OCS. Según el tipo de token, deberá proporcionar un código de autenticación o ninguno. Después de crear el token criptográfico, debería ver las claves listadas y podrá probarlas haciendo clic en el botón Probar.

  2. Cree una nueva CA, seleccione el token criptográfico nShield y seleccione los algoritmos y claves adecuados. Consulte la documentación de EJBCA para obtener más información sobre la creación de una CA.

    1. Con las claves generadas previamente, un ejemplo de práctica recomendada es utilizar signKey para firmar certificados y CRL, testKey para pruebas y defaultKey para todo lo demás (cifrado):

Si varias CA comparten el mismo OCS (y, por lo tanto, la ranura), solo debe crear un token criptográfico en EJBCA y hacer referencia a este token criptográfico desde todas las CA.

Al usar la precarga, no se requiere un código de autenticación para activar una CA. Puede asignar cualquier valor al código de autenticación durante la activación.

Tokens protegidos por módulos, OCS y Softcard

nCipher ofrece al menos tres tipos de tokens. Puede usar todos los tipos de tokens con EJBCA: tokens protegidos por módulo, conjunto de tarjetas de operador (OCS) o tarjeta blanda.

Tokens protegidos por OCS

Al utilizar tokens protegidos por OCSP, se debe utilizar el comando de precarga para cargar el OCS y las claves.

El comando de precarga (ver a continuación) siempre debe llamarse como el mismo usuario a menos que se elimine el directorio /opt/nfast/kmdata/preload.
Si recibe un error HostDataAccessDenied al ejecutar la precarga o al iniciar el servidor de aplicaciones, se debe a que los permisos de archivo en el directorio /opt/nfast/kmdata/preload son incorrectos. Probablemente se deba a que (en algún momento) ejecutó la precarga con otro usuario, como root o nfast.

Cargue el conjunto de tarjetas para que se puedan generar claves protegidas por el conjunto de tarjetas (en este ejemplo, llamamos al OCS ejbca , pero se puede nombrar arbitrariamente):

$ /opt/nfast/bin/preload -c ejbca pause
Loading cardsets:
ejbca on modules 1
Loading `ejbca':
Module 1 slot 0 : `ejbca ' #3 (`EJBCA card 3' )
Module 1 slot 0 :- passphrase supplied - reading card
Module 1 slot 0 : `ejbca ' #3 (`EJBCA card 3' ): already read
Module 1 slot 0 : empty
Module 1 slot 0 : `ejbca ' #2 (`EJBCA card 2' )
Module 1 slot 0 :- passphrase supplied - reading card
Card reading complete.
Loading complete; now pausing

No usar precarga

Si se utiliza un conjunto de tarjetas 1/N, no es necesario precargar (aunque se puede). Para PKCS#11, simplemente no utilice el comando preload. El código de autenticación ahora es necesario para activar el token criptográfico en EJBCA.

Al usar un OCS 1/n, se debe insertar una tarjeta del OCS al activar un token criptográfico en EJBCA. Si el OCS es persistente, se puede retirar la tarjeta y activar otro token criptográfico insertando su OCS. Si el OCS no es persistente, el conjunto de tarjetas se descargará automáticamente al retirar la tarjeta.

Al utilizar k/n OCS donde k>1, debe cargar todos los OCS que se utilizarán con precarga y luego iniciar el servidor de aplicaciones también con precarga.

Ejemplo:

$ ~nfast/bin/preload -c 2of3_0 pause
-- follow instruction to insert cards and enter pins. --
-- then press ctr-z --
$ bg
$ ~nfast/bin/preload -c 2of3_1 exit
-- follow instruction to insert cards and enter pins. –

Uso de más de un OCS

Es posible usar más de un OCS. Esto es necesario cuando se desea que diferentes CA estén protegidas por diferentes OCS. Para ello, se establece la variable de entorno CKNFAST_LOADSHARING=1. Esta variable de entorno también se establece implícitamente al ejecutar con precarga. Para obtener una lista de todas las ranuras disponibles, se puede ejecutar el siguiente comando:

$ CKNFAST_LOADSHARING= 1 ~nfast/bin/ckinfo

Tokens protegidos con Softcard

Los tokens protegidos de Softcard se comportan de forma similar a los tokens protegidos de OCS, con la única diferencia de que se usa el comando ppmk en lugar de la precarga. Por ejemplo:

$ /opt/nfast/bin/ppmk -m 1 -p ejbca pause

Tokens protegidos del módulo

Las claves protegidas por módulo no requieren un conjunto de tarjetas ni la ejecución de comandos de precarga o ppmk. Por lo tanto, no se requiere un código PIN para activar dicho token. Son adecuadas como claves de protección de bases de datos en EJBCA.

Las claves protegidas del módulo se almacenan en una ranura con el índice de ranura 0. Esta ranura es visible si la variable de entorno CKNFAST_NO_ACCELERATOR_SLOTS está establecida en 0. Esta variable se puede configurar de forma permanente para todas las aplicaciones PKCS#11 agregando lo siguiente a /opt/nfast/cknfastrc

# Enable module keys protected del módulo
CKNFAST_NO_ACCELERATOR_SLOTS= 0

Excepto para usar el índice de ranura 0, se debe usar un archivo de configuración PKCS#11 al crear claves. Esto se debe a que el atributo PKCS#11 CKA_PRIVATE debe establecerse en falso para permitir el uso de la clave sin iniciar sesión. El archivo podría tener este aspecto al usar EJBCA clientToolBox:

Ejemplo:

name=NFastJava
library=/opt/nfast/toolkits/pkcs11/libcknfast.so
slotListIndex= 0
attributes(*,CKO_PUBLIC_KEY,*) = {
CKA_TOKEN = false
}
attributes(*,CKO_PRIVATE_KEY,*) = {
CKA_TOKEN = true
CKA_PRIVATE = false
CKA_SIGN = true
CKA_DECRYPT = true
}
disabledMechanisms = {
CKM_SHA1_RSA_PKCS
CKM_SHA256_RSA_PKCS
CKM_SHA384_RSA_PKCS
CKM_SHA512_RSA_PKCS
CKM_MD2_RSA_PKCS
CKM_MD5_RSA_PKCS
CKM_DSA_SHA1
CKM_ECDSA_SHA1
}

Al agregarlo como archivo de atributos para su uso en la interfaz de administración, se deben eliminar las filas name , library y slotListIndex , ya que se agregan según su selección en la interfaz. Por lo tanto, se necesitan dos archivos: uno para usar con clientToolBox y otro para la interfaz de administración.

Haga referencia al archivo utilizado para la interfaz de usuario de administración en $EJBCA_HOME/conf/web.properties, agregando las dos líneas siguientes, si el archivo se coloca en /opt/ejbca-custom/attrib/ModuleProtectedKey.conf.

cryptotoken.p11.attr. .name=ModuleProtectedKey 0
cryptotoken.p11.attr. .file=/opt/ejbca-custom/attrib/ModuleProtectedKey.conf 0

Construir y volver a implementar EJBCA

cd /opt/ejbca
ant -q clean deployear

Equilibrio de carga

Si desea utilizar Loadsharing con múltiples módulos, ya sean tarjetas PCI o NetHSM, debe asegurarse de tener un OCS 1/N y el quórum N para poder tener suficientes tarjetas para insertar en cada HSM que desee para equilibrar la carga de la clave en el inicio del servidor/CA al iniciar sesión. El mismo mundo de seguridad debe cargarse en todos los módulos participantes.

Después de configurar el primer netHSM, haga lo siguiente en el segundo:

  • Utilice el panel del segundo netHSM para configurar el rfs

  • Utilice el panel del segundo netHSM para cargar el mundo de seguridad

  • Utilice el panel del segundo netHSM para configurar los clientes

  • en cada cliente ejecute: /opt/nfast/bin/nethsmenroll

Para equilibrar la carga, es necesario tener CKNFAST_LOADSHARING=1.

Si se utiliza la precarga, la conmutación por error al otro HSM, si uno de los HSM está roto, no funciona.

Ejemplo de inicio de jboss:

ejbca@host: /usr/local/ejbca > CKNFAST_LOADSHARING=1 .. /jboss/bin/standalone .sh

Para activar una CA, se necesita una tarjeta inteligente del OCS de la ranura correspondiente insertada en ambos HSM. El OCS debe ser 1/n, ya que no se puede usar la precarga.

Compatibilidad con criptografía de curva elíptica

Si desea generar claves de curva elíptica (EC), como secp256r1, y usar el algoritmo de firma ECDSA, necesita adquirir una licencia de nCipher. Al intentar generar una clave EC en EJBCA sin una licencia instalada en el HSM, recibirá un mensaje de error similar a "No se reconoció el algoritmo EC".