Token USB para GnuPG

Como já disse anteriormente, terminei uma especialização na área da criptografia e meu TCC foi sobre o GnuPG. Não pretendo aqui descrever a ferramenta, quem sabe mais para a frente, mas o que eu quero mostrar é como ter um token USB (como daqueles que podem ser adquiridos para certificado digital aqui no Brasil) para usar com o GnuPG.

Resolvi dividir o assunto em algumas partes para não ficar muito grande, assim, nesta primeira parte, mostro o equipamento adquirido, instalação dos drivers necessários para o uso e um teste rápido do produto.

As chaves do GnuPG ficam armazenadas no computador onde foi instalado e também podem ser armazenadas em um smart card, necessitando-se de um leitor de smart card para fazer a leitura do cartão.

Isto acaba tornando o uso das chaves com smart card pouco prático. Mas, caso se utilize um token USB, basta que o computador no qual desejamos utilizar o token tenha uma porta USB (e claro o driver apropriado do dispositivo🙂 ).

No momento há um projeto chamado Crypto Stick que está fabricando um dispositivo que possa ser utilizado como um token USB com suporte ao GnuPG. Recentemente eles disponibilizaram uma versão beta para quem quisesse adquirir o produto e que tem suas especificações mostradas aqui.

Mas existe um outro projeto, conhecido por OpenPGP Card, que é um smart card com suporte ao GnuPG, produzido pela g10code, uma empresa de consultoria na área de segurança fundada pelo criador do GnuPG. Há dois modelos de cartão: um similar àqueles de cartão de crédito e outro em que o chip é destacável, ficando no formato de um SIMCard.

Com este chip destacável, podemos utilizar um token USB que é produzido pela Gemalto, uma empresa que vende produtos voltados para segurança digital. O produto dela que serve para nossa finalidade é o IDBridge K30 ou USB Shell Token v2.

Adquiri um cartão e um token no site da Kernel Concepts. O cartão foi a versão com a opção de destaque do chip e o token foi o branco transparente (existe também uma versão em preto transparente).

Instalando o driver no Windows

Antes de utilizar o token, precisamos instalar o driver, que possui versões para Windows 32 ou 64 bits e está disponível aqui.

Baixei a versão Windows 64 bits  com o nome GemPcCCID_en-us_64.msi (observe que há para duas versões de Windows, uma em françês e outra em inglês; escolhi a inglês). A instalação é simples, basta seguir as indicações do instalador. Terminada esta parte vamos testar o token.

Instalando o driver no Linux

Também sou um usuário Linux, neste caso, utilizo o Lubuntu 14.04. De acordo com o site da Gemalto basta instalar a biblioteca libccid. Mas, eu descobri durante o teste, que se faz necessário uma outra biblioteca, a pcscd, pois sem ela não há comunicação com o leitor USB. Para isso proceda assim:

sudo apt-get install libccid pcscd

Testando o token USB

Com o token conectado na porta USB, abra o prompt de comando (ou terminal no Linux🙂 ) e digite (lembre-se que o GnuPG deve estar já instalado no sistema):

gpg --card-status

Algo similar ao resultado abaixo deve ser mostrado:

Application ID ...: D2760001240102000005000021150000
Version ..........: 2.0
Manufacturer .....: ZeitControl
Serial number ....: 00002115
Name of cardholder: [not set]
Language prefs ...: de
Sex ..............: unspecified
URL of public key : [not set]
Login data .......: [not set]
Signature PIN ....: forced
Key attributes ...: 2048R 2048R 2048R
Max. PIN lengths .: 32 32 32
PIN retry counter : 3 0 3
Signature counter : 0
Signature key ....: [none]
Encryption key....: [none]
Authentication key: [none]
General key info..: [none]

onde[1]:
Application ID – a identificação do fabricante, incluindo o tipo de cartão, a versão da implementação, o fabricante e o número serial. Este identificador é único para cada cartão.
Version – especificação OpenPGP usada.
Manufacturer – O fabricante do cartão.
Serial number – número único para todos os cartões deste fabricante.
Name of cardholder – o titular deste cartão. Somente caracteres ASCII são aceitos. gpg não usa este campo.
Language prefs – preferência de linguagem do titular do cartão. gpg ignora este valor.
Sex – Masculino ou feminino. gpg ignora este valor.
URL of public key – usado pelo comando fetch do gpg –edit-card. Pode conter uma URL que pode ser usada para recuperar a chave pública.
Login data – este campo pode ser usado para armazenar o nome da conta do titular. Pode ser usado para fins de identificação. gpg não aplica qualquer correspondência deste nome com um nome usado na chave. Veja a fonte (app-openpgp.c) para algumas características especiais do campo de login-name.
Signature PIN – quando configurado para “forced”, gpg solicita a entrada de um PIN para cada operação de assinatura. Quando configurado para “non forced”, gpg pode armazenar em cache o PIN pelo tempo em que o cartão não seja removido do leitor.
Key attributes – atributos das chaves.
Max. PIN lengths – este campo é imutável. Os valores são colocados no cartão logo após a personalização – este é o momento após o chip ser colado no cartão.
PIN retry counter – este campo salva quantas tentativas ainda restam para digitar o PIN correto. São diminuídas sempre que um PIN errado for inserido. Eles são repostos sempre que um AdminPIN correto for inserido. O primeiro e segundo PIN são para o PIN padrão. gpg garante que os dois números são sincronizados. O segundo PIN só é necessário devido às peculiaridades da norma ISO-7816; gpg tenta manter este PIN em sincronia com o primeiro PIN. O terceiro PIN representa o contador de repetição para o AdminPIN.
Signature counter – Este número mantém o controle das assinaturas realizadas com a chave armazenada. Ele só é reposto se uma nova chave de assinatura é criada ou importada para o cartão.
Signature key – esta chave é comumente usada como chave primária do OpenPGP.
Encryption key – esta chave é comumente usada como uma subchave para criptografar.
Authentication key – esta chave não é utilizada pelo gpg em tudo. Outras ferramentas como módulos PAM ou ssh usam esta chave para serviços de autenticação.
General key info – esse ID de usuário primário é mostrado se a chave pública OpenPGP correspondente está disponível.

Bom, por enquanto é só pessoal!🙂

[1] https://www.gnupg.org/howtos/card-howto/en/smartcard-howto-single.html#id2505566

Sobre Fábio Medeiros

Meu nome é Fábio Medeiros. Cearense de nascença e com muito orgulho (daí o nome do blog, uma referência à minha terra). Sou formado em Tecnologia em Telemática, pelo CEFET-CE. Escrevi alguns artigos sobre programação JavaME e dispositivos portáteis (PDA) para a revista WebMobile.
Esse post foi publicado em Criptografia e marcado , , . Guardar link permanente.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s