Trabaje con protección de información criptográfica y portadores de claves de hardware en Linux


El almacenamiento de claves en tokens y tarjetas inteligentes proporciona protección adicional contra intrusos externos e internos, incluidos aquellos que tienen un cierto nivel de acceso al sistema y al equipo de información.

Hoy les contaré cómo protegemos las claves de cifrado y las firmas electrónicas en nuestros sistemas de información, y lo haré en una guía detallada y bien ilustrada para configurar SUSE Linux Enterprise Server 12 SP3 para trabajar con el token Aladdin JaCarta PKI y CryptoPro CSP KC2 4.0.9944.

Hubo varias razones para publicar esta guía:

Razón 1


La documentación oficial sobre Aladdin-RD JaCarta está más adaptada para los sistemas operativos Astra Linux y ALT Linux, certificada por el Ministerio de Defensa, FSTEC y FSB como un medio para proteger la información.

Razón 2


La mejor instrucción sobre cómo configurar la interacción con los medios de hardware en Linux, que se encontró, también fue de wiki.astralinux.ru - Trabajar con CryptoPro CSP

Razón 3


UPD 16/04/2019: En el proceso de configuración del entorno y el equipo, resultó que el operador que estaba disponible por primera vez no era JaCarta PKI Nano, como se esperaba, sino un dispositivo que funcionaba en modo SafeNet Authentication Client eToken PRO.

UPD 16/04/2019: Una vez que el Banco necesitaba un dispositivo que pudiera funcionar en la misma infraestructura que eToken PRO (Java). Como tal dispositivo, la empresa "ZAO Aladdin R.D." ofreció un token JaCarta PRO, que fue seleccionado por el banco. Sin embargo, en la etapa de formación del artículo y los documentos de envío, un empleado de la empresa cometió un error. En lugar del modelo JaCarta PRO, JaCarta PKI se introdujo accidentalmente en el artículo y en los documentos de envío.

UPD 16/04/2019: Agradezco a la compañía Aladdin R.D. por ayudarme a descubrir y establecer la verdad.

No hay significados políticos y ocultos en este error, sino solo el error técnico de un empleado al preparar documentos. Token JaCarta PRO es un producto de la empresa Aladdin R.D. El applet que realiza la parte funcional fue desarrollado por la empresa "ZAO Aladdin R.D."


Este eToken PRO fue para una fiesta lanzada antes del 1 de diciembre de 2017.
Después de esta fecha, la empresa "Aladdin R.D." Dejó de vender dispositivos eToken PRO (Java).

Mirando un poco más adelante, debo decir que el trabajo con él se configuró a través de los controladores apropiados: SafenetAuthenticationClient-10.0.32-0.x86_64 , que solo se puede obtener en apoyo de Aladdin R.D. en una solicitud en línea separada.

En CryptoPro CSP, para trabajar con este token, era necesario instalar el paquete cprocsp-rdr-emv-64 | Módulo de soporte EMV / Gemalto .

Este token se determinó y respondió. Utilizando la utilidad SACTools del paquete SafenetAuthenticationClient , fue posible inicializarlo. Pero cuando trabajaba con la protección de la información criptográfica, se comportó de manera extremadamente extraña e impredecible.

Se mostró de la siguiente manera, en el comando:

csptest -keyset -cont '\\.\Aladdin RD JaCarta [SCR Interface] (205D325E5842) 00 00\alfa_shark' -check 

La respuesta fue que todo estaba bien:

 [ErrorCode: 0x00000000] 

Pero inmediatamente después de intentar leer las claves mediante programación, la misma verificación comenzó a producir un error:

 [ErrorCode: 0x8009001a] 

De acuerdo con la lista de códigos de error del modelo de objetos de los componentes de los códigos de error COM de Microsoft (seguridad y configuración)

 NTE_KEYSET_ENTRY_BAD 0x8009001A Keyset as registered is invalid. 

“Conjunto de claves inválidas”: la razón de tal mensaje puede estar en el antiguo chip, firmware y applet Gemalto, o en sus controladores para el sistema operativo que no admite los nuevos estándares de generación ES y las funciones hash GOST R 34.10-2012 y GOST R 34.11- 2012

En este estado, el token fue bloqueado. El índice de protección de información criptográfica comenzó a mostrar el estado irrelevante del lector y el contenedor de claves. Reiniciar el servicio de proveedor criptográfico cprocsp , el token pcscd y los servicios de tarjeta inteligente y todo el sistema operativo no ayudaron, solo la reinicialización.

Para ser justos, debe tenerse en cuenta que SafeNet eToken PRO funcionó correctamente con las teclas GOST R 34.10-2001 en el sistema operativo Windows 7 y 10.

Puede intentar instalar el CryptoPro CSP 4.0 FCN (Gemalto) , pero el objetivo es proteger nuestras claves ES y de cifrado con los productos FSB y FSTEC certificados por la familia JaCarta que admiten nuevos estándares.

El problema se resolvió tomando el token JaCarta PKI real en la carcasa regular (XL).

Pero se dedicó mucho tiempo a intentar que Safenet eToken PRO funcionara. Quería llamar la atención sobre esto y, tal vez, proteger a alguien de esto.

Razón 4


A veces, usted mismo necesita volver a los artículos e instrucciones anteriores. Esto es conveniente cuando la información se coloca en una fuente externa. Así que gracias a Habr por la oportunidad.

Guía de configuración


Después de instalar el token JaCarta PKI en el puerto USB del servidor e iniciar el sistema, verificamos que el nuevo dispositivo se detecte y aparezca en la lista:

lsusb



En nuestro caso, es el Bus 004 Dispositivo 003: ID 24dc: 0101

Para diagnosticar lectores, puede usar la utilidad pcsc-tools del proyecto security: chipcard (software.opensuse.org) .

Se inicia con el comando:

pcsc_scan



Hasta que se instalen todos los paquetes necesarios, no se mostrará información sobre el token.

Instalación de controladores y software para trabajar con JaCarta PKI


En la página de soporte del sitio "Aladdin R.D." Descargamos Documentación y software para trabajar solo con JaCarta PKI

De acuerdo con la Guía de implementación de JaCarta para Linux, cláusula 4.2., El primer paso es instalar pcsc-lite , ccid y libusb .
Para que la utilidad de administración JaCarta funcione, se deben instalar los siguientes componentes:

  • PC / SC Lite: una capa intermedia para proporcionar acceso a tarjetas inteligentes de acuerdo con el paquete PC / SC estándar, pcsc-lite.
  • Bibliotecas Ccid y libusb para trabajar con llaves USB, tarjetas inteligentes y lectores de tarjetas inteligentes.
Verificamos la disponibilidad de estos paquetes e instalamos:

zypper search pcsc-lite



zypper search libusb



zypper install pcsc-lite





zypper search CCID



zypper install pcsc-ccid



zypper search CCID



zypper install libusb



Como resultado, se actualizó el paquete pcsc-lite, se instaló CCID, libusb no se requirió ninguna acción.

Los siguientes dos comandos instalan el paquete con controladores y software directamente para trabajar con JaCarta PKI:

zypper install idprotectclientlib-637.03-0.x86_64.rpm



zypper install idprotectclient-637.03-0.x86_64.rpm



Compruebe que los controladores y el software para JaCarta PKI estén instalados:

zypper search idprotectclient



Al intentar que SafeNet eToken PRO funcionara, encontré información de que el paquete openct - Library for Smart Card Readers preinstalado en SLES puede entrar en conflicto con pcsc-lite - PCSC Smart Cards Library , cuya instalación requiere Aladdin R.D.

zypper search openct



Por lo tanto, eliminamos el paquete openct:

rpm -e openct

Ahora están instalados todos los controladores y software necesarios para trabajar con el token.

Realizamos diagnósticos utilizando la utilidad pcsc-tools y nos aseguramos de que JaCarta se detecte en el sistema operativo:

pcsc_scan



Instalar paquetes CryptoPro CSP


Al instalar CryptoPro CSP de forma predeterminada, faltan los paquetes necesarios para trabajar con tokens y tarjetas inteligentes.

zypper search cprocsp



Instalación de los componentes JaCarta para el componente de soporte CryptoPro CSP en el CSP

zypper install cprocsp-rdr-jacarta-64-3.6.408.683-4.x86_64.rpm



Algunos componentes tienen dependencias. Entonces, por ejemplo, si intenta instalar el paquete de soporte SafeNet eToken PRO cprocsp-rdr-emv-64-4.0.9944-5.x86_64.rpm - Módulo de soporte EMV / Gemalto, recibiremos un mensaje sobre la necesidad de instalar primero el componente base del soporte de lector CSP cprocsp -rdr-pcsc-64-4.0.9944-5.x86_64.rpm - Componentes de PC / SC para lectores CryptoPro CSP :

 zypper install cprocsp-rdr-emv-64-4.0.9944-5.x86_64.rpm Loading repository data... Reading installed packages... Resolving package dependencies... Problem: nothing provides cprocsp-rdr-pcsc-64 >= 4.0 needed by cprocsp-rdr-emv-64-4.0.9944-5.x86_64 Solution 1: do not install cprocsp-rdr-emv-64-4.0.9944-5.x86_64 Solution 2: break cprocsp-rdr-emv-64-4.0.9944-5.x86_64 by ignoring some of its dependencies Choose from above solutions by number or cancel [1/2/c] (c): c 

Instale los paquetes de soporte básicos para lectores y medios clave:

zypper install cprocsp-rdr-pcsc-64-4.0.9944-5.x86_64.rpm



zypper install lsb-cprocsp-pkcs11-64-4.0.9944-5.x86_64.rpm

Ahora puede instalar módulos para trabajar con otros tipos de medios y componentes de GUI:

zypper install cprocsp-rdr-emv-64-4.0.9944-5.x86_64.rpm



 zypper install cprocsp-rdr-novacard-64-4.0.9944-5.x86_64.rpm zypper install cprocsp-rdr-mskey-64-4.0.9944-5.x86_64.rpm zypper install cprocsp-rdr-gui-gtk-64-4.0.9944-5.x86_64.rpm 



Verifique la configuración final de CryptoPro CSP:

 zypper search cprocsp Loading repository data... Reading installed packages... 


S | Name | Summary | Type
---+-----------------------------+----------------------------------------------------+--------
i+ | cprocsp-curl-64 | CryptoPro Curl shared library and binaris. Build 9944. | package
i+ | cprocsp-rdr-emv-64 | EMV/Gemalto support module | package
i+ | cprocsp-rdr-gui-gtk-64 | GUI components for CryptoPro CSP readers. Build 9944. | package
i+ | cprocsp-rdr-jacarta-64 | JaCarta components for CryptoPro CSP. Build 683. | package
i+ | cprocsp-rdr-mskey-64 | Mskey support module | package
i+ | cprocsp-rdr-novacard-64 | Novacard support module | package
i+ | cprocsp-rdr-pcsc-64 | PC/SC components for CryptoPro CSP readers. Build 9944.| package
i+ | lsb-cprocsp-base | CryptoPro CSP directories and scripts. Build 9944. | package
i+ | lsb-cprocsp-ca-certs | CA certificates. Build 9944. | package
i+ | lsb-cprocsp-capilite-64 | CryptoAPI lite. Build 9944. | package
i+ | lsb-cprocsp-kc2-64 | CryptoPro CSP KC2. Build 9944. | package
i+ | lsb-cprocsp-pkcs11-64 | CryptoPro PKCS11. Build 9944. | package
i+ | lsb-cprocsp-rdr-64 | CryptoPro CSP readers. Build 9944. | package




Para aplicar los cambios, reiniciamos el servicio del proveedor criptográfico y verificamos su estado:

 /etc/init.d/cprocsp restart /etc/init.d/cprocsp status 



Configuración y diagnóstico de CryptoPro CSP


Verifique si el proveedor criptográfico ve nuestro token y otros tipos de medios disponibles con los siguientes comandos:

/opt/cprocsp/bin/amd64/csptest -card -enum -v –v



/opt/cprocsp/bin/amd64/csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251



/opt/cprocsp/sbin/amd64/cpconfig -hardware reader -view -f cp1251



Aladdin RD JaCarta [Interfaz SCR] (000000000000) 00 00 es nuestro medio.

Siguiendo las instrucciones de CryptoPro CSP para Linux. Configure , realice su registro en el proveedor criptográfico:

 /opt/cprocsp/sbin/amd64/cpconfig -hardware reader -add "Aladdin RD JaCarta [SCR Interface] (000000000000) 00 00" 



Como resultado de la ejecución en el archivo de configuración /etc/opt/cprocsp/config64.ini
se agregará una entrada a la sección [KeyDevices \ PCSC]:

[KeyDevices\PCSC\"Aladdin RD JaCarta [SCR Interface] (000000000000) 00 00"\Default]


Para cumplir con los requisitos del formulario CryptoPro CSP, los términos de uso y la guía del administrador de seguridad:
No se permite el uso de CryptoPro CSP CIP versión 4.0 con el modo de control de clave mejorado desactivado. La inclusión de este modo se describe en los documentos ZHTYA.00087-01 91 02. Guía del administrador de seguridad.
Es necesario habilitar un control mejorado del uso de la clave:

 /opt/cprocsp/sbin/amd64/cpconfig -ini '\config\parameters' -add long StrengthenedKeyUsageControl 1 

Verifique que el modo esté habilitado:

cat /etc/opt/cprocsp/config64.ini | grep StrengthenedKeyUsageControl



Reiniciamos el servicio de proveedor criptográfico:

 /etc/init.d/cprocsp restart /etc/init.d/cprocsp status 

Después del reinicio, verificamos que no haya errores en el trabajo del proveedor con operadores clave:

/opt/cprocsp/bin/amd64/csptest -keyset –verifycontext



/opt/cprocsp/bin/amd64/csptest -keyset -verifycontext -enum –unique

 CSP (Type:80) v4.0.9017 KC2 Release Ver:4.0.9944 OS:Linux CPU:AMD64 FastCode:REA AcquireContext: OK. HCRYPTPROV: 16052291 alfa_shark1 |SCARD\JACARTA_4E3900154029304C\CC00\E9F6 OK. Total: SYS: 0.000 sec USR: 0.000 sec UTC: 4.560 sec [ErrorCode: 0x00000000] 

Trabajar con JaCarta PKI Token


Ejecutemos el programa Xming (reenvío X11) en nuestra estación para que podamos abrir y trabajar con las interfaces gráficas de las utilidades necesarias a través de SSH.



Después de instalar IDProtectClient - software para trabajar con JaCarta PKI, aparecieron dos archivos en el servidor en la carpeta / usr / share / aplicaciones :

Athena-IDProtectClient.desktop
Athena-IDProtectManager.desktop

Estos son accesos directos donde puede ver las opciones de inicio para las utilidades Exec = / usr / bin / SACTools

Ejecute la utilidad IDProtectPINTool .

Al usarlo, los códigos de acceso PIN para el token se configuran y cambian.

/usr/bin/IDProtectPINTool



Al inicializar el token por primera vez, un enlace que contiene los códigos PIN (contraseñas) de los proveedores de claves de forma predeterminada será útil

El programa IDProtect_Manager le permite ver información sobre el token y el contenedor con claves y certificado:

/usr/bin/IDProtect_Manager



Para acceder al contenedor con las claves, debe ingresar la contraseña:





Para trabajar con SafeNet Authentication Client eToken PRO, existen programas similares: SafeNet Authentication Client Monitor y SafeNet Authentication Client Tools , que se ejecutan así:

 /usr/bin/SACMonitor /usr/bin/SACTools 



Es más conveniente realizar operaciones directamente con contenedores de claves en la interfaz del proveedor criptográfico CryptoPro JavaCSP:

/jdk1.8.0_181/jre/bin/java ru.CryptoPro.JCP.ControlPane.MainControlPane




Para mostrar información sobre el contenido del contenedor con las teclas, puede ejecutar el comando:

 /opt/cprocsp/bin/amd64/csptest -keyset -cont '\\.\Aladdin RD JaCarta [SCR Interface] (000000000000) 00 00\alfa_shark1' -info 

Para diagnosticar el contenedor, use el mismo comando con el interruptor –check

 /opt/cprocsp/bin/amd64/csptest -keyset -cont '\\.\Aladdin RD JaCarta [SCR Interface] (000000000000) 00 00\alfa_shark' –check 

Deberá ingresar la contraseña para el contenedor:





Recuperación de clave de software


En general, un ejemplo de recuperación de una clave privada y un certificado de clave pública de un contenedor en un token utilizando CryptoPro Java CSP es el siguiente:

 import ru.CryptoPro.JCP.KeyStore.JCPPrivateKeyEntry; import ru.CryptoPro.JCP.params.JCPProtectionParameter; KeyStore keyStore = KeyStore.getInstance("Aladdin RD JaCarta [SCR Interface] (000000000000) 00 00", "JCSP"); keyStore.load(null, null); JCPPrivateKeyEntry entry = null; X509Certificate certificate = null; PrivateKey privateKey = null; try { entry = (JCPPrivateKeyEntry) keyStore.getEntry(keyAlias, new JCPProtectionParameter(pwd)); certificate = (X509Certificate) entry.getCertificate(); privateKey = entry.getPrivateKey(); } catch (UnrecoverableEntryException | NullPointerException e) { LOGGER.log(Level.WARNING, PRIVATE_KEY_NOT_FOUND + keyAlias + ExceptionUtils.getFullStackTrace(e)); } 


Si actúas así:

 Key key = keyStore.getKey(keyAlias, pwd); 

entonces el proveedor criptográfico intentará mostrar una solicitud para ingresar la contraseña al contenedor a través de la consola o la ventana de la GUI.

Resultados


El token del portador de la clave de token se instala en el puerto USB interno del servidor.

El hardware del servidor en sí está sellado y colocado en una habitación con acceso limitado.

Dichas medidas pueden aumentar el nivel de protección de nuestros sistemas de información contra el robo y el compromiso de la firma electrónica o las claves de cifrado, tanto de forma remota a través de la red como físicamente.

Enlaces utiles


  1. Documentación de Aladdin-RD JaCarta
  2. wiki.astralinux.ru - Trabaja con CryptoPro CSP
  3. La lista de códigos de error del modelo de objetos de los componentes de los códigos de error COM de Microsoft (seguridad y configuración)
  4. CryptoPro CSP 4.0 CSP 4.0 FCN (Gemalto)
  5. Utilidad de diagnóstico de lector de pcsc-tools de seguridad: proyecto de tarjeta chip (software.opensuse.org)
  6. CryptoPro CSP para Linux. Personalización
  7. PIN de portador de clave predeterminado de Aladdin-RD (contraseñas)

Source: https://habr.com/ru/post/441212/


All Articles