Trabalhar com proteção de informações criptográficas e portadores de chaves de hardware no Linux


O armazenamento de chaves em tokens e cartões inteligentes oferece proteção adicional contra invasores externos e internos, incluindo aqueles com um certo nível de acesso ao sistema e equipamento de informação.

Hoje, mostrarei como protegemos chaves de criptografia e assinaturas eletrônicas em nossos sistemas de informação, e farei isso em um guia detalhado e bem ilustrado para configurar o SUSE Linux Enterprise Server 12 SP3 para trabalhar com o token Aladdin JaCarta PKI e o CryptoPro CSP KC2 4.0.9944.

Havia vários motivos para publicar este guia:

Razão 1


A documentação oficial do Aladdin-RD JaCarta é mais adaptada aos sistemas operacionais Astra Linux e ALT Linux, certificados pelo Ministério da Defesa, FSTEC e FSB como um meio de proteger informações.

Razão 2


A melhor instrução sobre como configurar a interação com a mídia de hardware no Linux, também foi encontrada em wiki.astralinux.ru - Trabalhando com o CryptoPro CSP

Razão 3


UPD 16/04/2019: No processo de configuração do ambiente e do equipamento, verificou-se que a transportadora que estava disponível pela primeira vez não era o JaCarta PKI Nano, como esperado, mas um dispositivo operando no modo SafeNet Authentication Client eToken PRO.

UPD 16/04/2019: Uma vez que o banco precisava de um dispositivo que pudesse funcionar na mesma infraestrutura do eToken PRO (Java). Como tal dispositivo, a empresa "ZAO Aladdin R.D." ofereceu um token JaCarta PRO, que foi selecionado pelo banco. No entanto, na fase de formação do artigo e dos documentos de expedição, um funcionário da empresa cometeu um erro. Em vez do modelo JaCarta PRO, o JaCarta PKI foi acidentalmente inserido no artigo e nos documentos de remessa.

UPD 16/04/2019: Agradeço à empresa Aladdin R.D. por ajudar a descobrir e estabelecer a verdade.

Não há significados políticos e ocultos nesse erro, mas apenas o erro técnico de um funcionário na preparação de documentos. Token JaCarta PRO é um produto da empresa Aladdin R.D. O applet que executa a parte funcional foi desenvolvido pela empresa "ZAO Aladdin R.D."


Este eToken PRO foi para uma festa lançada antes de 1 de dezembro de 2017.
Após essa data, a empresa "Aladdin R.D." Parou de vender dispositivos eToken PRO (Java).

Seguindo um pouco à frente, devo dizer que o trabalho com ele foi configurado através dos drivers apropriados - SafenetAuthenticationClient-10.0.32-0.x86_64 , que só podem ser obtidos em suporte ao Aladdin R.D. em um aplicativo online separado.

No CryptoPro CSP, para trabalhar com esse token, era necessário instalar o pacote cprocsp-rdr-emv-64 | Módulo de suporte EMV / Gemalto .

Este token foi determinado e respondeu. Usando o utilitário SACTools do pacote SafenetAuthenticationClient , foi possível inicializá-lo. Mas, ao trabalhar com proteção de informações criptográficas, ele se comportou de maneira extremamente estranha e imprevisível.

Foi mostrado da seguinte forma, no comando:

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

A resposta foi que estava tudo bem:

 [ErrorCode: 0x00000000] 

Mas imediatamente após tentar ler as chaves programaticamente, a mesma verificação começou a produzir um erro:

 [ErrorCode: 0x8009001a] 

De acordo com a lista de códigos de erro do modelo de objeto dos componentes do Microsoft COM Error Codes (Security and Setup)

 NTE_KEYSET_ENTRY_BAD 0x8009001A Keyset as registered is invalid. 

“Conjunto de chaves inválido” - o motivo dessa mensagem pode estar no antigo chip, firmware e applet da Gemalto ou em seus drivers para o sistema operacional que não oferecem suporte aos novos padrões de geração ES e funções de hash GOST R 34.10-2012 e GOST R 34.11- 2012.

Nesse estado, o token foi bloqueado. O índice de proteção de informações criptográficas começou a mostrar o estado irrelevante do leitor e do contêiner de chaves. Reiniciar o serviço cprocspractor provider cprocsp , os serviços de token pcscd e cartão inteligente e todo o sistema operacional não ajudou, apenas a reinicialização.

Para ser sincero, observe que o SafeNet eToken PRO funcionou corretamente com as teclas GOST R 34.10-2001 no sistema operacional Windows 7 e 10.

Você pode tentar instalar o CryptoPro CSP 4.0 FCN (Gemalto) , mas o objetivo é proteger nosso ES e chaves de criptografia com os produtos FSB e FSTEC certificados pela família JaCarta que suportam novos padrões.

O problema foi resolvido usando o token JaCarta PKI real na embalagem regular (XL).

Mas foi gasto muito tempo tentando fazer o Safenet eToken PRO funcionar. Eu queria chamar a atenção para isso e, talvez, proteger alguém disso.

Razão 4


Às vezes, você mesmo precisa retornar a artigos e instruções antigos. Isso é conveniente quando as informações são colocadas em uma fonte externa. Então, obrigado a Habr pela oportunidade.

Guia de configuração


Depois de instalar o token JaCarta PKI na porta USB do servidor e iniciar o sistema, verificamos que o novo dispositivo foi detectado e aparece na lista:

lsusb



No nosso caso, é o dispositivo 003 do barramento 004: ID 24dc: 0101

Para diagnosticar os leitores, você pode usar o utilitário pcsc-tools no projeto security: chipcard (software.opensuse.org) .

É iniciado pelo comando:

pcsc_scan



Até que todos os pacotes necessários sejam instalados, as informações sobre o token não serão exibidas.

Instalando drivers e software para trabalhar com o JaCarta PKI


Na página de suporte do site "Aladdin R.D." Fazemos o download da documentação e do software para trabalhar apenas com o JaCarta PKI

De acordo com o Guia de Implementação do JaCarta for Linux, seção 4.2., A primeira etapa é instalar o pcsc-lite , ccid e libusb .
Para que o utilitário de gerenciamento JaCarta funcione, os seguintes componentes devem ser instalados:

  • PC / SC Lite - uma camada intermediária para fornecer acesso a cartões inteligentes de acordo com o padrão PC / SC, pacote pcsc-lite.
  • Bibliotecas Ccid e libusb para trabalhar com chaves USB, cartões inteligentes e leitores de cartões inteligentes.
Verificamos a disponibilidade desses pacotes 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, o pacote pcsc-lite foi atualizado, o CCID foi instalado e o libusb não foi necessário executar nenhuma ação.

Os dois comandos a seguir instalam o pacote com drivers e software diretamente para trabalhar com o JaCarta PKI:

zypper install idprotectclientlib-637.03-0.x86_64.rpm



zypper install idprotectclient-637.03-0.x86_64.rpm



Verifique se os drivers e o software do JaCarta PKI estão instalados:

zypper search idprotectclient



Ao tentar fazer o SafeNet eToken PRO funcionar, encontrei informações de que o pacote openct - Biblioteca para leitores de cartão inteligente pré-instalado no SLES pode entrar em conflito com o pcsc-lite - PCSC Smart Cards Library , cuja instalação requer Aladdin R.D.

zypper search openct



Portanto, removemos o pacote openct:

rpm -e openct

Agora todos os drivers e softwares necessários para trabalhar com o token estão instalados.

Realizamos diagnósticos usando o utilitário pcsc-tools e garantimos que o JaCarta seja detectado no sistema operacional:

pcsc_scan



Instalando pacotes CryptoPro CSP


Ao instalar o CryptoPro CSP por padrão, os pacotes necessários para trabalhar com tokens e cartões inteligentes estão ausentes.

zypper search cprocsp



Instalando os componentes JaCarta para o componente de suporte CryptoPro CSP no CSP

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



Alguns componentes têm dependências. Portanto, por exemplo, se você tentar instalar o pacote de suporte do SafeNet eToken PRO cprocsp-rdr-emv-64-4.0.9944-5.x86_64.rpm - módulo de suporte EMV / Gemalto , receberemos uma mensagem sobre a necessidade de instalar primeiro o componente base do suporte do leitor CSP cprocsp -rdr-pcsc-64-4.0.9944-5.x86_64.rpm - Componentes PC / SC para leitores 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 os pacotes de suporte básico para leitores e mídia principal:

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

Agora você pode instalar módulos para trabalhar com outros tipos de mídia e componentes da 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 a configuração final do 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 as alterações, reiniciamos o serviço de provedor de criptografia e verificamos seu status:

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



Configuração e diagnóstico do CryptoPro CSP


Verifique se o provedor de criptografia vê nosso token e outros tipos de mídia disponíveis com os seguintes 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 [Interface SCR] (000000000000) 00 00 é o nosso meio.

Seguindo as instruções do CryptoPro CSP para Linux. Configure , execute seu registro no provedor de criptografia:

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



Como resultado da execução no arquivo de configuração /etc/opt/cprocsp/config64.ini
uma entrada será adicionada à seção [KeyDevices \ PCSC]:

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


Para cumprir os requisitos do formulário CryptoPro CSP, os Termos de uso e o Guia do administrador de segurança:
O uso do CryptoPro CSP CIP versão 4.0 com o modo de controle avançado de chave desativado não é permitido. A inclusão desse modo está descrita nos documentos ZHTYA.00087-01 91 02. Guia do administrador de segurança.
É necessário habilitar o controle aprimorado do uso de chaves:

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

Verifique se o modo está ativado:

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



Reiniciamos o serviço de provedor de criptografia:

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

Após o reinício, verificamos se não há erros no trabalho do provedor com as principais operadoras:

/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] 

Trabalhar com o JaCarta PKI Token


Vamos executar o programa Xming (encaminhamento X11) em nossa estação para que possamos abrir e trabalhar com as interfaces gráficas dos utilitários necessários via SSH.



Após instalar o IDProtectClient - software para trabalhar com o JaCarta PKI, dois arquivos apareceram no servidor na pasta / usr / share / applications :

Athena-IDProtectClient.desktop
Athena-IDProtectManager.desktop

Esses são os atalhos nos quais você pode ver as opções de inicialização dos utilitários Exec = / usr / bin / SACTools

Execute o utilitário IDProtectPINTool .

Utilizando-o, os códigos de acesso PIN para o token são definidos e alterados.

/usr/bin/IDProtectPINTool



Ao inicializar o token pela primeira vez, um link contendo códigos PIN (senhas) das principais operadoras por padrão será útil

O programa IDProtect_Manager permite exibir informações sobre o token e o contêiner com chaves e certificado:

/usr/bin/IDProtect_Manager



Para acessar o contêiner com as chaves, é necessário digitar a senha:





Para trabalhar com o SafeNet Authentication Client eToken PRO, existem programas semelhantes - SafeNet Authentication Client Monitor e SafeNet Authentication Client Tools , que são executados da seguinte maneira:

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



É mais conveniente executar operações diretamente com os principais contêineres na interface do provedor de criptografia CryptoPro JavaCSP:

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




Para exibir informações sobre o conteúdo do contêiner com as chaves, você pode executar o comando:

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

Para diagnosticar o contêiner, use o mesmo comando com a opção –check

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

Você precisará digitar a senha do contêiner:





Recuperação de chave de software


Em geral, um exemplo de recuperação de uma chave privada e de um certificado de chave pública de um contêiner em um token usando o CryptoPro Java CSP é o seguinte:

 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)); } 


Se você agir assim:

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

o provedor de criptografia tentará exibir uma solicitação para inserir a senha no contêiner por meio do console ou da janela da GUI.

Resultados


O token da portadora da chave do token é instalado na porta USB interna do servidor.

O hardware do servidor é selado e colocado em uma sala com acesso limitado.

Tais medidas podem aumentar o nível de proteção de nossos sistemas de informações contra roubo e comprometimento de chaves de assinatura ou criptografia eletrônica, remotamente pela rede e fisicamente.

Links úteis


  1. Aladdin-RD JaCarta Documentação
  2. wiki.astralinux.ru - Trabalhe com o CryptoPro CSP
  3. A lista de códigos de erro do modelo de objeto dos componentes dos Códigos de erro do Microsoft COM (segurança e instalação)
  4. CryptoPro CSP 4.0 CSP 4.0 FCN (Gemalto)
  5. Utilitário de diagnóstico do Pcsc-tools reader da security: projeto chipcard (software.opensuse.org)
  6. CryptoPro CSP para Linux. Personalização.
  7. PINs padrão do portador de chave Aladdin-RD (senhas)

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


All Articles