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 CSPRazã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: 0101Para 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 PKIDe 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 CSPzypper 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.iniuma 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 / SACToolsExecute 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
- Aladdin-RD JaCarta Documentação
- wiki.astralinux.ru - Trabalhe com o CryptoPro CSP
- 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)
- CryptoPro CSP 4.0 CSP 4.0 FCN (Gemalto)
- Utilitário de diagnóstico do Pcsc-tools reader da security: projeto chipcard (software.opensuse.org)
- CryptoPro CSP para Linux. Personalização.
- PINs padrão do portador de chave Aladdin-RD (senhas)