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:
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?
Inicie sesión como usuario nfast: sudo su nfast
Establezca el cuadro nCipher en modo de inicialización colocando el interruptor en modo I.
Borre el cuadro nCipher presionando el botón de reinicio en el dispositivo.
Compruebe que el modo esté en modo de preinicialización y no en modo operativo :
$/opt/nfast/bin/enquiryServer:enquiry reply flags noneenquiry reply level Sixserial number 41C5-BA04-6D2Cmode operationalversion 2.23.6speed index 147rec. queue 442..642level one flags Hardware HasTokensversion string 2.23.6cam5, 2.22.6cam7 built on Apr 25 2005 18:15:46checkedin00000000431dca98 Tue Sep 6 18:58:00 2005level two flags nonemax. write size 8192level three flags KeyStoragelevel four flags OrderlyClearUnit HasRTC HasNVRAM HasNSOPermsCmd ServerHasPollCmds FastPollSlotList HasSEE HasKLF HasShareACL HasFeatureEnable HasFileOp HasLongJobs ServerHasLongJobs AESModuleKeys NTokenCmds LongJobsPreferredcode 0typemodule0product name nFast serverdevice nameEnquirySix version 4groupsimpath kxfeature ctrl flags nonefeatures enabled noneversion serial 0remote server port 9004Module#1:enquiry reply flags noneenquiry reply level Sixserial number 41C5-BA04-6D2Cmode pre-initialisationversion 2.22.6speed index 147rec. queue 9..152level one flags Hardware HasTokens InitialisationMode PreMaintInitModeversion string 2.22.6cam7 built on Apr 25 2005 18:15:46checkedin00000000426636cd Wed Apr 20 13:02:37 2005level two flags nonemax. write size 8192level three flags KeyStoragelevel four flags OrderlyClearUnit HasRTC HasNVRAM HasNSOPermsCmd ServerHasPollCmds FastPollSlotList HasSEE HasKLF HasShareACL HasFeatureEnable HasFileOp HasLongJobs ServerHasLongJobs AESModuleKeys NTokenCmds LongJobsPreferredcode 6typemodule6product name nC1002P/nC3022Pdevice name#1 nFast PCI device, bus 0, slot 13.EnquirySix version 5groupsimpath kxDHPrime1024feature ctrl flags LongTermfeatures enabled StandardKMversion serial 24rec. LongJobs queue 8SEE machinetypede máquinagen1AIFCrea el mundo de seguridad con el comando:
$/opt/nfast/bin/new-world-i -Q 1/115:04:50 WARNING: Module#1: preemptively erasing module to see its slots!Create Security World:Module 1: 0 cards of 1 writtenModule 1 slot 0: emptyModule 1 slot 0: unknown cardModule 1 slot 0:- passphrase specified - overwriting cardCard writing complete.security world generated on module#0; hknso = 6807e0b031c4f797b739ec33ca7dba05279cf54fLa 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.
Cambie el modo en el interruptor del dispositivo al modo O.
Haga clic en Borrar nuevamente.
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 0Creating Cardset:Module 1: 0 cards of 3 writtenModule 1 slot 0: Admin Card#1Module 1 slot 0: emptyModule 1 slot 0: blank cardModule 1 slot 0:- passphrase specified - writing card (naming `EJBCA card 1')Module 1: 1 card of 3 writtenMódulo 1 ranura 0: retirar la tarjeta#1Module 1 slot 0: remove already-written cardModule 1 slot 0: emptyModule 1 slot 0: blank cardModule 1 slot 0:- passphrase specified - writing card (naming `EJBCA card 2')Module 1: 2 cards of 3 writtenModule 1 slot 0: remove already-written card#2Module 1 slot 0: emptyModule 1 slot 0: blank cardNew passphrasesdonot 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.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 pauseLoading cardsets:ejbca on modules 1Loading `ejbca':Module 1 slot 0: `ejbca' #3 (`EJBCA card 3')Module 1 slot 0:- passphrase supplied - reading cardModule 1 slot 0: `ejbca' #3 (`EJBCA card 3'): alreadyreadModule 1 slot 0: emptyModule 1 slot 0: `ejbca' #2 (`EJBCA card 2')Module 1 slot 0:- passphrase supplied - reading cardCard 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:
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:ejbcaPKCS11 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:ejbcaLoaded pkcs11 uc17cfc7c330e613af5709789ff823a476177e233c-d165e440baa8dc9963780c682836ba17513e8cbf key (RSAPrivate) on modules 1PKCS11 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:ejbcaLoaded pkcs11 uc17cfc7c330e613af5709789ff823a476177e233c-27cfdae84bf4298f2dde83cd00980a81bcf095bf key (RSAPrivate) on modules 1PKCS11 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 .shPara crear una nueva CA, realice lo siguiente en la interfaz de administración de EJBCA:
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.
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.
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 pauseLoading cardsets:ejbca on modules 1Loading `ejbca':Module 1 slot 0 : `ejbca ' #3 (`EJBCA card 3' )Module 1 slot 0 :- passphrase supplied - reading cardModule 1 slot 0 : `ejbca ' #3 (`EJBCA card 3' ): already readModule 1 slot 0 : emptyModule 1 slot 0 : `ejbca ' #2 (`EJBCA card 2' )Module 1 slot 0 :- passphrase supplied - reading cardCard reading complete.Loading complete; now pausingNo 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óduloCKNFAST_NO_ACCELERATOR_SLOTS= 0Excepto 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=NFastJavalibrary=/opt/nfast/toolkits/pkcs11/libcknfast.soslotListIndex= 0attributes(*,CKO_PUBLIC_KEY,*) = {CKA_TOKEN = false}attributes(*,CKO_PRIVATE_KEY,*) = {CKA_TOKEN = trueCKA_PRIVATE = falseCKA_SIGN = trueCKA_DECRYPT = true}disabledMechanisms = {CKM_SHA1_RSA_PKCSCKM_SHA256_RSA_PKCSCKM_SHA384_RSA_PKCSCKM_SHA512_RSA_PKCSCKM_MD2_RSA_PKCSCKM_MD5_RSA_PKCSCKM_DSA_SHA1CKM_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 0cryptotoken.p11.attr. .file=/opt/ejbca-custom/attrib/ModuleProtectedKey.conf 0Construir y volver a implementar EJBCA
cd /opt/ejbcaant -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 .shPara 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".