Cartões inteligentes OpenPGP
Esta página documenta como configurar e usar cartões inteligentes OpenPGP no Debian.
Contents
Introdução
O cartão inteligente (smartcard) OpenPGP foi concebido por g10 Code, o grupo principal por trás do desenvolvimento do ?[http://www.gnupg.. É distribuído mundo afora principalmente pela empresa alemã Floss Shop (antiga Kernel Concepts). A Free Software Foundation Europe (FSFE) doou uma versão personalizada do cartão inteligente OpenPGP para todos(as) os(as) novos(as) participantes, chamando-o de Fellowship crypto card. Em outubro de 2017, a FSFE parou de emitir ?SmartCards para novos(as) apoiadores(as).
Por favor, consulte a página de compras se você planeja comprar um cartão inteligente.
Em 2012, a implementação alternativa em software livre de Tokens USB foi lançada. É o Gnuk, que está em conformidade com a especificação OpenPGPcard 2.0. Ele suporta apenas as chaves RSA de 2048 bits, mas funciona muito bem. É preciso cerca de 1,5 segundos para fazer uma assinatura. Por favor, veja o wiki FST-01 para obter informações sobre os produtos de hardware.
Configurar o PGP e os cartões inteligentes requer muitos passos manuais. O ambiente de chave-mestra e cartão inteligente PGP podem ser gerenciados de forma conveniente e segura sem usar a linha de comando usando a ?imagem Clean Room Live CD.
Funcionalidades do cartão
O cartão inteligente OpenPGP suporta (a depender da versão):
- 3 chaves RSA independentes de 1024 bits (assinatura, criptografia, autenticação para SSH ou PAM) ou
- RSA com até 3072 bits com a versão 2.0 do cartão.
RSA com até 4096 bits com a versão 2.0 do cartão e GnuPG 2.0.18 1 2.
- Geração chave no cartão ou importação de chaves existentes.
- Comprimento do PIN entre 6 e 254 caracteres; não restrito a números.
- Protocolo T=1; compatível com a maioria dos leitores.
Especificação disponível gratuitamente e utilizável sem quaisquer restrições (version 1.1, preliminary versão 2).
- O cartão OpenPGP 2.0 não é compatível com GnuPGP 1.x, precisa do 2.x.
Por favor, consulte a página upstream para uma lista completa.
Hardware do leitor
Em teoria, qualquer leitor de cartões inteligentes desta lista devem funcionar.
HowTo
Instalação do software
O smartcard OpenPGP é suportado por gnupg junto com pcscd e scdaemon em qualquer distribuição Debian recente.
$ apt-get install gnupg pcscd scdaemon pcsc-tools
Verifique se o cartão e o leitor do cartão foram detectados
Usando o comando
$ pcsc_scan
você deve obter uma lista de leitores de cartões inteligentes conectados e o tipo de cartão inserido. No meu sistema usando um leitor de cartão Gemalto, as partes interessantes são
Scanning present readers... 0: Gemalto PC Twin Reader (38738FB6) 00 00
e
Possibly identified card (using /usr/share/pcsc/smartcard_list.txt): GnuPG card V2
no fim da saída do comando.
Geração de chaves
Existem muitos guias que explicam como gerar uma chave OpenPGP. Você pode se referir a esse guia que irá ajudá-lo(a) a criar uma chave que atenda aos critérios de segurança do chaveiro debian.
Inicialização do cartão inteligente
$ gpg --card-edit Reader ...........: Alcor Micro AU9560 00 00 Application ID ...: 0123456789ABCDEF0123456789ABCDEF Version ..........: 1.1 Manufacturer .....: PPC Card Systems Serial number ....: 00000001 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 ...: rsa1024 rsa1024 rsa1024 Max. PIN lengths .: 254 254 254 PIN retry counter : 3 3 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none] gpg/card> admin Admin commands are allowed gpg/card> help quit quit this menu admin show admin commands help show this help list list all available data name change card holder's name url change URL to retrieve key fetch fetch the key specified in the card URL login change the login name lang change the language preferences sex change card holder's sex cafpr change a CA fingerprint forcesig toggle the signature force PIN flag generate generate new keys passwd menu to change or unblock the PIN verify verify the PIN and list all data unblock unblock the PIN using a Reset Code factory-reset destroy all keys and data gpg/card> name Cardholder's surname: Bar Cardholder's given name: Foo gpg/card> lang Language preferences: en gpg/card> sex Sex ((M)ale, (F)emale or space): m gpg/card> url URL to retrieve public key: https://example.com/foobar.pub gpg/card> login Login data (account name): foobar gpg/card> passwd gpg: OpenPGP card no. 0123456789ABCDEF0123456789ABCDEF detected 1 - change PIN 2 - unblock PIN 3 - change Admin PIN 4 - set the Reset Code Q - quit Your selection? 2 PIN unblocked and new PIN set. 1 - change PIN 2 - unblock PIN 3 - change Admin PIN 4 - set the Reset Code Q - quit Your selection? q gpg/card> list Reader ...........: Alcor Micro AU9560 00 00 Application ID ...: 0123456789ABCDEF0123456789ABCDEF Version ..........: 1.1 Manufacturer .....: PPC Card Systems Serial number ....: 00000001 Name of cardholder: Foo Bar Language prefs ...: en Sex ..............: male URL of public key : https://example.com/foobar.pub Login data .......: foobar Signature PIN ....: forced Key attributes ...: rsa1024 rsa1024 rsa1024 Max. PIN lengths .: 254 254 254 PIN retry counter : 3 3 3 Signature counter : 0 Signature key ....: [none] Encryption key....: [none] Authentication key: [none] General key info..: [none] gpg/card> quit
3) adicione as subchaves do cartão de autenticação e de assinatura (na presente ordem, a chave de assinatura é apenas para a assinatura, portanto, não é necessário fazer backup, e a chave de autenticação pode, até onde sei, ser gerada apenas no cartão)
$ gpg --edit-key $KEYID
command> addcardkey [authentication]
command> addcardkey [signature]4) adicione a subchave de criptografia
$ gpg --edit-key $KEYID
command> addkey5) faça o backup de toda a chave!!!
6) mova a chave de criptografia acima para o cartão
$ gpg --edit-key $KEYID
command> key $NUMBER [select the encryption key above]
command> keytocard7) remova sua chave principal de criptografia
Solução de problemas
Erro ao acessar o leitor do cartão
Por vezes (parece especialmente comum com leitores de cartões USB) você recebe mensagens de erro como:
gpg: selecting openpgp failed: No such device gpg: OpenPGP card not available: No such device
gpg: selecting openpgp failed: ec=6.32848 gpg: OpenPGP card not available: general error
gpg: selecting openpgp failed: ec=6.32848 gpg: signing failed: general error
Geralmente é suficiente terminar scdaemon e tentar novamente:
$ killall scdaemon
$ pgrep scdaemon
$
Interação de softwares
Descreva aqui como configurar outros softwares para cartões inteligentes OpenPGP.
gnome-keyring
gnome-keyring-daemon quebra o acesso ao cartão inteligente. Para resolver esta situação na sessão atual, use
- $ killall gnome-keyring-daemon
Veja também essas instruções.
Para o ambiente de área de trabalho Mate no Jessie, gnome keyring tem que ser desabilitado usçando dconf-editor para alterar a chave org/mate/desktop/session/gnome-compat-startup para ['smproxy'].
SSH
Existem várias descrições mais antigas sobre como configurar o SSH com o cartão inteligente OpenPGP. Confira estas instruções e, por favor, informe aqui as configurações que funcionem com a versão recente do Debian:
1) Authenticating SSH logins with the Fellowship crypto card
3) SSH For Server Administration
PAM
Existem várias instruções mais antigas Login with GnuPG smartcard e OpenPGP smartcard local user authentication que nem sempre funcionam totalmente, porque poldi-ctrl não é mais mantido e não faz mais parte do pacote libpam-poldi, e gpg-connect-agent também dá erros. Portanto, essas etapas descritas para despejar a chave pública do banco de dados poldi não funcionam.
Usar o cartão inteligente OpenPGP com PAM agora requer algumas etapas adicionais manuais (após criar/importar as chaves no cartão inteligente):
$ sudo nano /etc/poldi/localdb/users
adicione a linha seguinte:
<YourApplicationID> <YourUsername>
e grave as alterações após editar o arquivo.e.
Instruções mais antigas descrevem para despejar a chave pública para o arquivo /etc/poldi/localdb/keys/<YourApplicationID> com poldi-ctrl, ou usar gpg-connect-agent. Ambos não funcionam (no Debian 12). Portanto, este arquivo tem que ser criado manualmente. O formato deste arquivo foi descrito nesta página:
$ cat /etc/poldi/localdb/keys/D27600012401030300050000864A0000 (public-key (rsa (n #00BC6CECC90DA5F329D215FDBF595C1A920374BD172271F394E138FE99C4E995A7ED536A8D79175C4C65D39071955779C181D85E5A86D9BCAE86BE11A742FD856FEB351 2C23911F932098165CDBD3FF0658C288FCC51BC9FF9BFD84E67AB83C3CAF508EC0B5CDC83179B2A781C0CA15A3BA9CF321F4ABD7E8DE234324536258D62D61AE0BF47C25BD776 02B4D0F107F653B706273C01856B885D27CD57F283BA75EC3AAE5BBB98BC393BCA7D605199070C339DCB4DD8D292160102841B9FCA4F26DED33E112B76BAA042BBD6F7E501E44 C020521E92BDD45B9BCC30A7FF840663C90E3C06C5EBA45BDF7A1046330A8ADF07CE8AFF141DD5B518F1915EEBF6527DEAD9F292FC16F6AE74E7CA275991487CAAF0575B594ED 00AF542B60892AA7A727AC77B566E454F6D19CA2D0614251ADB81685308104A297E7353F7489BC1CCADE673C04F1C344562B8514E395E06220595420EBFE5AD9EE11D92E29597 1A5D0D37E971A70828B8321914454B0890D824C1B69DA65CDF6CD15271E6143198E5816B3E22118854409B5898F5D0114CF4D58DA71F6630F87560042B1D863BA18EAAC2792A3 EA1CC696FDDB79F391ADFA3F04EAC97B851203C61898048CE1DEE1221CB1838358B98EE61FB84BB09AE8022C0AA618E95877FBE0EFD58F3E16BC25FCDDD799B089DC6785DCAF3 9B70F2C3EE1EAD7D1B5390F495D292EB25B32315B5C31#) (e #010001#) ) )
O "n" significa Modulus e o "e" significa Exponent. Eles podem ser extraídos de uma chave pública com o comando:
$ pgpdump -i PublicKey.asc | grep -E '(RSA n|RSA e)'
Verifique com muito cuidado para usar o Modulus e o Exponent da chave de autenticação, não das outras chaves, pois elas não funcionam. Os espaços dentro da saída do Modulus devem ser removidos e, em seguida, a saída pode ser adicionada:
(public-key (rsa (n #00<Modulus>#) (e #<Exponent>#) ) )
Depois disso, altere os módulos PAM requeridos cuidadosamente (primeiro use a opção "sufficient"):
$ sudo nano /etc/pam.d/common-auth (for graphical user login) $ sudo nano /etc/pam.d/gdm-password (for logins and unlocks) $ sudo nano /etc/pam.d/login (for console login) $ sudo nano /etc/pam.d/sudo (for sudo authentication)
Adicione aos arquivos: "auth sufficient pam_poldi.so" (se gmd-password, login e sudo já contiverem a linha "@include common-auth", esses arquivos de configuração não precisam de ajustes adicionais).
Ao desbloquear, o screensaver não detecta o cartão inteligente e só pode ser desbloqueado com senha em vez do pin - "pcscd" pode então ser reiniciado manualmente para corrigir esse problema
$ sudo service pcscd restart
Como isto não é possível antes do login, há múltiplas soluções para resolver de maneira mais estrutural, tais como:
1) Remover opensc
$ sudo apt remove opensc
2) Adicionar as seguintes linhas em ~/.gnupg/scdaemon.conf:
disable-ccid pcsc-shared
Bloqueio de tela automático após a remoção do cartão inteligente com GNOME 3: por favor, adicione as instruções aqui.
PKCS#11
Consulte http://www.scute.org/ se quiser usar seu cartão OpenPGP em uma aplicação PKCS#11 como o Firefox/Iceweasel ou Thunderbird/Icedove.
gnupg-pkcs11-scd
Verifique http://alon.barlev.googlepages.com/gnupg-pkcs11 se você quiser usar qualquer provedor PKCS#11 com GnuPG. Em seguida, você não usará o cartão OpenPGP, mas qualquer cartão suportado por um token PKCS#11, como o OpenSC.
Leituras adicionais
- Free Software Foundation Europe
- Mais links para discussões relevantes
Licença
Este documento está licenciado sob os termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolah) qualquer versão posterior.
