Tabla de Contenidos
- ¿Qué es GPG?
- Llaves GPG de YubiKey
- Configuración
- Usar YubiKey en Sistemas Nuevos
- Probar Operaciones GPG de YubiKey
- Solución de Problemas
- ¿Qué Sigue?

Parte 3 - Uso de YubiKeys con GPG.
Nota: Toda la configuración a continuación se realizó en Fedora con GNOME DE (aplicable 1-a-1 en distros relacionadas) y YubiKey 5C / USB (no la versión Biometric).
¿Qué es GPG?
Según el sitio web oficial:
GnuPG es una implementación completa y gratuita del estándar OpenPGP tal como lo define RFC 4880. GnuPG te permite cifrar y firmar tus datos y comunicaciones; cuenta con un sistema versátil de gestión de llaves, junto con módulos de acceso para todo tipo de directorios de llaves públicas. GnuPG, también conocido como GPG, es una herramienta de línea de comandos con funciones para facilitar la integración con otras aplicaciones. Hay disponible una gran cantidad de aplicaciones frontend y bibliotecas. GnuPG también proporciona soporte para S/MIME y Secure Shell (ssh).
Llaves GPG de YubiKey
Al trabajar con llaves GPG, YubiKey utiliza su aplicación OpenPGP para almacenar llaves privadas GPG en su elemento seguro, lo que evita que sean extraídas bajo cualquier circunstancia.
Elemento Seguro: Chip resistente a manipulaciones dentro de YubiKey que almacena material criptográfico. Los datos almacenados aquí no pueden ser extraídos, incluso con acceso físico al hardware.
Todas las operaciones criptográficas (como firmar, descifrar, autenticar) se ejecutan dentro de este elemento seguro y solo exponen los resultados.
# Mostrar información de YubiKey, como las aplicaciones habilitadas
ykman info
# Salida del comando:
Device type: YubiKey 5C
...
Applications
...
FIDO2 Enabled
OpenPGP Enabled # Esta es la aplicación utilizada
Ranuras de Llaves
La aplicación OpenPGP de YubiKey tiene 3 ranuras dedicadas, cada una con una función específica.
- Ranura de Firma: Utilizada para crear firmas digitales
- Ranura de Cifrado: Utilizada para descifrar datos
- Ranura de Autenticación: Utilizada para operaciones de autenticación (p. ej., SSH)
Cada ranura puede contener un par de llaves RSA, ECC o Ed25519/Cv25519.
Agregar Llaves GPG a YubiKey
La aplicación OpenPGP de YubiKey admite 2 formas de aprovisionar llaves GPG:
Generación de Llaves GPG en el Dispositivo
- Las llaves se generan en el elemento seguro y nunca existen fuera de YubiKey.
- Debido a esto, son muy seguras pero no se pueden respaldar. Si se pierde o daña YubiKey, las llaves se pierden permanentemente.
Generar Llaves GPG Externamente y Luego Importar a YubiKey
- Las llaves se generan en tu computadora y luego se importan a YubiKey.
- Esto te permite respaldar la llave, importar la misma llave a múltiples YubiKeys y mantener una llave maestra para la rotación de subllaves (más sobre esto más adelante).
- Enfoque recomendado para la mayoría de los usuarios.
- Nota: Una vez importadas a YubiKey, las llaves privadas no pueden ser extraídas o exportadas del elemento seguro. El dispositivo realizará todas las operaciones criptográficas internamente, exponiendo solo los resultados.
¿Por Qué Usar GPG con YubiKey?
¿Por qué no? Como muchas cosas, YubiKey mejora la seguridad en muchos niveles.
Incluso si tu computadora está comprometida, las llaves privadas permanecerán inaccesibles para el atacante. Las operaciones de firma/descifrado requieren acceso a YubiKey.
La Topología de Llaves OpenPGP
OpenPGP utiliza un modelo de confianza jerárquico donde una única Llave Maestra puede crear Subllaves especializadas.
Esta arquitectura permite que las Subllaves se usen, almacenen en YubiKey y roten sin perder tu identidad criptográfica (almacenada en la Llave Maestra, que debe mantenerse en una ubicación segura sin conexión).
| Tipo de Llave GPG | Capacidad | Ubicación de Almacenamiento | Descripción |
|---|---|---|---|
| Llave Maestra | Certificar | Almacenamiento Seguro Offline | Esta es tu identidad. Utilizada para: crear y revocar subllaves, firmar las llaves de otras personas (red de confianza), actualizar fechas de vencimiento de llaves. Nunca la almacenes en YubiKey. Mantenla offline en una ubicación segura, para que si tu YubiKey es robada o dañada, puedas usar la Llave Maestra para revocar las subllaves antiguas de YubiKey, generar nuevas subllaves y firmarlas, manteniendo tu identidad y red de confianza. |
| Subllave de Firma | Firmar | Ranura de YubiKey | Utilizada para firmar datos (p. ej., commits de Git, correos electrónicos). Requiere toque de YubiKey y PIN para cada operación de firma. |
| Subllave de Cifrado | Cifrar | Ranura de YubiKey | Utilizada para descifrar archivos y mensajes que fueron cifrados con tu llave pública. Requiere toque de YubiKey y PIN para cada operación de descifrado. |
| Subllave de Autenticación | Autenticar | Ranura de YubiKey | Utilizada para autenticación SSH a través del Agente GPG y autenticación PAM. Algunas personas prefieren esto sobre FIDO2 para gestionar el acceso SSH. |
Configuración
Instalar Paquetes Requeridos
¿Qué Hace Cada Paquete?
gnupg2: Implementación de GPG.pinentry-gnome3: Diálogo de entrada de PIN integrado con GNOME.pcsc-lite: Middleware de tarjetas inteligentes PC/SC.pcsc-lite-ccid: Controlador genérico de lector de tarjetas inteligentes USB CCID.yubikey-manager: Herramienta CLI oficial de Yubico (ykman) para gestionar YubiKey.
# Instalar GPG y herramientas de tarjetas inteligentes
sudo dnf install gnupg2 pinentry-gnome3 pcsc-lite pcsc-lite-ccid
# Instalar herramientas de gestión de YubiKey (si no están ya instaladas)
sudo dnf install yubikey-manager
# Habilitar e iniciar el daemon de Tarjetas Inteligentes PC/SC
sudo systemctl enable --now pcscd
Generar Llaves GPG (Generación Externa)
La mejor práctica es generar llaves GPG externamente (no en YubiKey) para permitir respaldos y luego mover las Subllaves a YubiKey.
Si ya tienes tus llaves GPG generadas, salta esta sección.
Generar Llaves Maestras
- Mi recomendación es generar llaves Ed25519/Cv25519.
# Generar llave maestra y subllaves
gpg --expert --full-generate-key
# Prácticamente todas las opciones predeterminadas son las más seguras
Agregar Subllaves
# Obtén tu ID de llave maestra GPG con gpg --list-keys
# o simplemente pon el correo electrónico especificado al generar la llave maestra
# Editar la llave maestra para agregar subllaves
# Sintaxis: gpg --expert --edit-key KEY_ID_OR_EMAIL
gpg --expert --edit-key [email protected]
# En el prompt gpg>, agrega 3 subllaves:
# 1. Subllave de firma [S]
gpg> addkey
# Elegir: (10) ECC (sign only)
# Elegir: (1) Curve 25519 *predeterminado*
# Vencimiento: 1y
# 2. Subllave de cifrado [E]
gpg> addkey
# Elegir: (12) ECC (encrypt only)
# Elegir: (1) Curve 25519 *predeterminado*
# Vencimiento: 1y
# 3. Subllave de autenticación [A]
gpg> addkey
# Elegir: (11) ECC (set your own capabilities)
# Elegir: S (desactivar capacidad de firma)
# Elegir: A (activar capacidad de autenticación)
# Elegir: Q (finalizar)
# Elegir: (1) Curve 25519 *predeterminado*
# Vencimiento: 1y
# Guardar y salir - si no se guarda, los cambios se revierten
gpg> save
Listar Llaves Generadas
Mostrar las llaves maestras y subllaves GPG generadas. Al listar estas llaves, verás banderas de capacidad de una sola letra, lo que facilita reconocer su función:
[C]- Certificación (Llave Maestra).[S]- Firma.[E]- Cifrado.[A]- Autenticación.
# Mostrar llaves GPG generadas (maestra y subllaves)
gpg --list-secret-keys --keyid-format LONG [email protected]
# Salida del comando
# sec ed25519/XXXXXXXX 2025-11-15 [C]
# created: 2025-11-15 expires: never usage: C
# trust: ultimate validity: ultimate
# ssb ed25519/XXXXXXXX 2025-11-15 [S] [expires: 2026-11-15]
# ssb cv25519/XXXXXXXX 2025-11-15 [E] [expires: 2026-11-15]
# ssb ed25519/XXXXXXXX 2025-11-15 [A] [expires: 2026-11-15]
Respaldar Tus Llaves GPG (IMPORTANTE)
Recuerda que una vez que las subllaves se agregan a YubiKey, no pueden ser extraídas de YubiKey Y las subllaves privadas también se eliminan del llavero de la máquina local, así que siempre haz un respaldo antes de transferir.
# Exportar llaves privadas (haz esto ANTES de mover a YubiKey)
gpg --export-secret-keys --armor KEY_ID_OR_EMAIL > gpg_master_key.asc
gpg --export-secret-subkeys --armor KEY_ID_OR_EMAIL > gpg_subkeys.asc
# Exportar llave pública
gpg --export --armor KEY_ID_OR_EMAIL > gpg_public_key.asc
# Exportar base de datos de confianza
gpg --export-ownertrust > gpg_trust.txt
# Almacena estos archivos en un respaldo cifrado seguro (preferiblemente offline)
Trabajar Con YubiKey
Verificar Estado de OpenPGP de YubiKey
Antes de hacer cualquier cambio, verifica el estado actual de la aplicación OpenPGP de tu YubiKey:
# Ver información de la aplicación OpenPGP
ykman openpgp info
# Salida del comando:
# OpenPGP version: 3.4
# Application version: 5.7.2
# PIN tries remaining: 3
# Reset code tries: 0
# Admin PIN tries: 3
# Require PIN for signature: Once
# Ver estado detallado de la tarjeta usando GPG
gpg --card-status
# Salida del comando:
# Reader ...........: Yubico YubiKey OTP FIDO CCID 00 00
# Application ID ...: XXXXXXXXXXXXXXXXXXXXXXXXXXXX
# Application type .: OpenPGP
# Version ..........: 3.4
# Manufacturer .....: Yubico
# Serial number ....: 12345678
# Name of cardholder: [not set]
# ...
Nota: Si no se puede leer la tarjeta inteligente de YubiKey, consulta la sección de Solución de Problemas al final.
Cambiar PINs Predeterminados (IMPORTANTE)
YubiKey viene con PINs predeterminados de fábrica que deben cambiarse.
- PINs de Aplicación OpenPGP: Estos son diferentes de los PINs de la aplicación FIDO2.
- Bloqueo de PIN de Usuario: 3 intentos fallidos bloquean el PIN de Usuario (solo se puede desbloquear con PIN de Admin)
- Bloqueo de PIN de Admin: 3 intentos fallidos bloquean permanentemente la aplicación OpenPGP (requiere restablecimiento de fábrica)
| Tipo de PIN | Propósito | Valor Predeterminado | Consideraciones de Seguridad |
|---|---|---|---|
| PIN de Usuario | Operaciones diarias (firmar, descifrar, autenticar) | 123456 | Lo escribirás frecuentemente, así que equilibra seguridad con usabilidad. |
| PIN de Admin | Tareas de administración (importación de llaves, cambios de configuración) | 12345678 | Debe ser complejo y almacenarse en una ubicación segura. |
# Cambiar PIN de Usuario
ykman openpgp access change-pin
# Enter PIN: (si es la primera vez, escribe el valor predeterminado: 123456)
# New PIN:
# Repeat for confirmation:
# Cambiar PIN de Admin
ykman openpgp access change-admin-pin
# Enter PIN: (si es la primera vez, escribe el valor predeterminado: 12345678)
# New PIN:
# Repeat for confirmation:
Mover Subllaves a YubiKey
La operación keytocard mueve permanentemente tu subllave privada GPG a YubiKey y la elimina de tu llavero GPG. La llave maestra permanece en tu computadora para la gestión futura de subllaves.
Antes de Mover tus Subllaves a YubiKey Asegúrate de Que:
- La Llave Maestra y las Subllaves estén respaldadas.
- Los PINs predeterminados se hayan cambiado a valores fuertes.
# Editar la llave
gpg --edit-key KEY_ID_OR_EMAIL
# Listar llaves para ver números de subllaves
gpg> list
# Mover subllave de firma
gpg> key 1 # Seleccionar 1ra subllave (firma) - la selección muestra ssb*
gpg> keytocard
# Elegir ranura: 1 (Signature key)
# Ingresar contraseña y PIN de Admin cuando se solicite
gpg> key 1 # Deseleccionar llave 1
gpg> key 2 # Seleccionar 2da subllave (cifrado) - la selección muestra ssb*
gpg> keytocard
# Elegir ranura: 2 (Encryption key)
# Ingresar contraseña y PIN de Admin cuando se solicite
gpg> key 2 # Deseleccionar llave 2
gpg> key 3 # Seleccionar 3ra subllave (autenticación) - la selección muestra ssb*
gpg> keytocard
# Elegir ranura: 3 (Authentication key)
# Ingresar contraseña y PIN de Admin cuando se solicite
gpg> key 3 # Deseleccionar llave 3
# Guardar y salir
gpg> save
Verificar que las Llaves Estén en YubiKey
Verificar Estado de la Tarjeta
- La salida debe mostrar las subllaves GPG.
# Verificar estado de la tarjeta
gpg --card-status
# Deberías ver tus 3 subllaves listadas:
# Signature key ....: [fingerprint]
# Encryption key....: [fingerprint]
# Authentication key: [fingerprint]
# sec ed25519/XXXXXXXX 2025-11-15 [C]
# created: 2025-11-15 expires: never usage: C
# trust: ultimate validity: ultimate
# ssb> ed25519/XXXXXXXX 2025-11-15 [S] [expires: 2026-11-15]
# ssb> cv25519/XXXXXXXX 2025-11-15 [E] [expires: 2026-11-15]
# ssb> ed25519/XXXXXXXX 2025-11-15 [A] [expires: 2026-11-15]
Listar Llaves Secretas
- En la salida, nota el símbolo
>después dessb- esto confirma que las subllaves ahora están almacenadas en YubiKey, no en tu llavero GPG.
# Listar llaves secretas (debe mostrar "ssb>" indicando que las llaves están en la tarjeta)
gpg --list-secret-keys
# Salida del comando
# sec ed25519/XXXXXXXX 2025-11-15 [C]
# created: 2025-11-15 expires: never usage: C
# trust: ultimate validity: ultimate
# ssb> ed25519/XXXXXXXX 2025-11-15 [S] [expires: 2026-11-15]
# ssb> cv25519/XXXXXXXX 2025-11-15 [E] [expires: 2026-11-15]
# ssb> ed25519/XXXXXXXX 2025-11-15 [A] [expires: 2026-11-15]
Configurar Requisito de Toque (IMPORTANTE)
Requerir un toque físico para cada operación GPG evita que el malware use tus llaves sin contacto físico explícito (incluso si captura tu PIN).
# Requerir toque para todas las operaciones
ykman openpgp keys set-touch sig on # Firma
ykman openpgp keys set-touch enc on # Cifrado
ykman openpgp keys set-touch aut on # Autenticación
# Opciones:
# on - Toque requerido, pero almacenado en caché por 15 segundos
# off - No se requiere toque
# fixed - Toque requerido cada vez, sin caché (más seguro)
# cached - Toque requerido, almacenado en caché hasta que se retire YubiKey
Gestión de PIN (OPCIONAL)
- Establecer límites de reintentos.
ykman openpgp access set-retries 5 5 5
Eliminar Llave Maestra del Llavero Local (OPCIONAL)
Exportar Llave Maestra Privada
- Exporta la llave maestra privada y respáldala en una ubicación segura offline.
- Para máxima seguridad, esta llave maestra debe mantenerse offline, no en tu computadora. Estarás trabajando con las subllaves.
gpg --export-secret-keys -a [email protected] > gpg_master_key.asc
# Luego guárdala en una unidad USB cifrada o algo seguro
Eliminar Llave Maestra de la Computadora
# Eliminar llave secreta maestra del llavero GPG
# ¡Asegúrate de tener respaldos offline antes de hacer esto!
gpg --delete-secret-keys [email protected]
# Re-importar solo tus llaves públicas y stubs de tarjeta (de secciones anteriores)
gpg --import gpg_public_key.asc
Verificar que la Llave Maestra Está Eliminada
- El símbolo
#junto a la llave privada significa que la llave maestra no está disponible.
# Verificar: la llave maestra debe mostrar 'sec#'
gpg --list-secret-keys
# Salida del comando
# sec# ed25519/XXXXXXXX 2025-11-15 [C] # La llave maestra está offline
# created: 2025-11-15 expires: never usage: C
# trust: ultimate validity: ultimate
# ssb> ed25519/XXXXXXXX 2025-11-15 [S] [expires: 2026-11-15]
# ssb> cv25519/XXXXXXXX 2025-11-15 [E] [expires: 2026-11-15]
# ssb> ed25519/XXXXXXXX 2025-11-15 [A] [expires: 2026-11-15]
Configurar el Agente GPG
Configura el agente GPG para gestionar el almacenamiento en caché de PIN, soporte SSH y diálogos de entrada de PIN.
Editar ~/.gnupg/gpg-agent.conf
# Editar ~/.gnupg/gpg-agent.conf
vim ~/.gnupg/gpg-agent.conf
# ===================================================================
# Programa de Entrada de PIN
# ===================================================================
pinentry-program /usr/bin/pinentry-gnome3
# Alternativas:
# pinentry-program /usr/bin/pinentry # Valor original
# pinentry-program /usr/bin/pinentry-curses # Solo terminal
# pinentry-program /usr/bin/pinentry-qt # Entornos KDE/Qt
# ===================================================================
# Soporte SSH
# ===================================================================
enable-ssh-support
# ===================================================================
# Almacenamiento en Caché de Contraseña de Llave GPG (llaves basadas en disco)
# ===================================================================
default-cache-ttl 3600 # 1 hora de tiempo de inactividad
max-cache-ttl 7200 # 2 horas máximo absoluto
# ===================================================================
# Almacenamiento en Caché de Contraseña de Llave SSH
# ===================================================================
default-cache-ttl-ssh 3600 # 1 hora de tiempo de inactividad
max-cache-ttl-ssh 7200 # 2 horas máximo absoluto
# ===================================================================
# Configuraciones de Seguridad
# ===================================================================
no-allow-external-cache
no-allow-mark-trusted
# ===================================================================
# Configuraciones de Pantalla
# ===================================================================
keep-display
keep-tty
Establecer Permisos Seguros
chmod 600 ~/.gnupg/gpg-agent.conf
Reiniciar el Agente GPG para Implementar Cambios
# Matar agente existente
gpgconf --kill gpg-agent
# Iniciar nuevo agente (ocurre automáticamente en la próxima operación GPG)
gpg-agent --daemon
# Verificar que el agente está en ejecución
gpgconf --list-dirs agent-socket
Habilitar Soporte SSH (Opcional)
Si planeas usar la subllave de Autenticación para inicio de sesión SSH, apunta la variable de entorno SSH_AUTH_SOCK al agente GPG.
Crear Definición de Variable
- Agrega la exportación de la variable a un script en ~/.bashrc.d/ para hacerla persistente.
- Asegúrate de que tu archivo ~/.bashrc lea este directorio de complementos - lo cual hacen la mayoría de las distros.
# Asegurar que el .bashrc del usuario regular obtenga ~/.bashrc.d (opcional)
grep -q "bashrc.d" ~/.bashrc || echo '
# Obtener scripts personalizados de .bashrc.d/
if [ -d ~/.bashrc.d ]; then
for i in ~/.bashrc.d/*.sh; do
[ -r "$i" ] && source "$i"
done
fi' >> ~/.bashrc
# Crear directorio de complementos bashrc.d/ (si no existe)
mkdir -p ~/.bashrc.d/
# Crear script con definición de exportación en directorio de complementos
cat << 'EOF' > ~/.bashrc.d/variables.sh
#!/bin/bash
# Usar Agente GPG como agente SSH
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
EOF
# Recargar configuración del shell para implementar cambios
source ~/.bashrc
Verificar que el Soporte SSH Está Activo
# Verificar que el soporte SSH está activo
ssh-add -L
# Debería mostrar: ssh-ed25519 XXXX... cardno:0000000000
Configurar SSH para Usar Llave GPG
- Ahora, solo exporta la llave pública SSH desde tu llave privada GPG y agrégala al archivo authorized_keys del servidor SSH remoto de destino para conectarte.
# Exportar la llave pública SSH desde GPG
gpg --export-ssh-key [email protected] > ~/.ssh/yubikey.pub
# Agregar la llave pública SSH al authorized_keys de servidores remotos
cat ~/.ssh/yubikey.pub | ssh user@server 'cat >> ~/.ssh/authorized_keys'
Conectar Usando SSH
- Al conectarte, se te pedirá que ingreses el PIN de Usuario y que toques la placa de metal de YubiKey inmediatamente para iniciar sesión.
- Si solo ingresas el PIN y no lo tocas, obtendrás un error similar a:
sign_and_send_pubkey: signing failed for ED25519 "cardno:32_740_587" from agent: agent refused operation.
# Iniciar sesión como de costumbre vía SSH
ssh user@server
Usar YubiKey en Sistemas Nuevos
Cuando usas una computadora nueva o necesitas restaurar el acceso, solo necesitas tu llave pública y YubiKey.
Instalar Paquetes Requeridos
# Instalar GPG y herramientas de tarjetas inteligentes
sudo dnf install gnupg2 pinentry-gnome3 pcsc-lite pcsc-lite-ccid
# Instalar herramientas de gestión de YubiKey (si no están ya instaladas)
sudo dnf install yubikey-manager
# Habilitar e iniciar el daemon de Tarjetas Inteligentes PC/SC
sudo systemctl enable --now pcscd
Importar Llave Pública
- Primero importa tu llave pública GPG desde el respaldo o desde un servidor de llaves (si la subiste - recomiendo https://keys.openpgp.org/).
# Importar tu llave pública desde un archivo
gpg --import gpg_public_key.asc
# O obtenerla del servidor de llaves (si la subiste)
gpg --keyserver hkps://keys.openpgp.org --recv-keys KEY_ID_OR_EMAIL
# Confiar en la llave (establecer confianza máxima porque es tu propia llave)
gpg --edit-key KEY_ID_OR_EMAIL
gpg> trust
# Elegir: 5 = I trust ultimately
gpg> quit
Probar Operaciones GPG de YubiKey
Verificar que YubiKey es Detectada
- Si falla, consulta la sección de solución de problemas.
# Verificar que YubiKey es detectada
gpg --card-status
Probar Operación de Firma
# Probar firma
echo "test" | gpg --clearsign
# Se te debe solicitar:
# 1. PIN de Usuario
# 2. Toque en YubiKey (si está habilitado)
Probar Operaciones de Cifrado y Descifrado
# Probar cifrado y descifrado (a ti mismo)
echo "secret" | gpg --encrypt -a --recipient [email protected] > test.asc
# Descifrar el nuevo archivo cifrado
gpg --decrypt test.asc
# Eliminar el archivo de prueba
rm test.asc
Probar SSH (si está configurado)
# Listar llaves SSH gestionadas por el agente GPG
ssh-add -L
# Salida esperada:
# ssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXX... cardno:000000
# Probar conexión SSH a un servidor (el servidor remoto necesita la llave pública)
ssh -v user@remote-server
# Se te debe solicitar:
# 1. PIN de Usuario (solo primer uso, luego se almacena en caché)
# 2. Toque en YubiKey (si está habilitado)
Solución de Problemas
Durante mi primera configuración, encontré un problema donde no se encontraba la tarjeta GPG y el comando gpg --card-status devolvía el error a continuación.
gpg --card-status
# Salida del comando:
# gpg: selecting card failed: No such device
# gpg: OpenPGP card not available: No such device
Primero, verifica el estado del servicio pcscd. Si muestra un problema de permisos, tienes que actualizar polkit para permitir al usuario actual el acceso.
# Verificar el estado del servicio pcscd
systemctl status pcscd
# Salida del comando:
# ... systemd[1]: Started pcscd.service - PC/SC Smart Card Daemon.
# ... pcscd[2224]: 00000000 ../src/auth.c:166:IsClientAuthorized() Process 2162 (user: 60578) is NOT authorized for>
# ... pcscd[2224]: 00000224 ../src/winscard_svc.c:357:ContextThread() Rejected unauthorized PC/SC client
# ... pcscd[2224]: 00022773 ../src/auth.c:166:IsClientAuthorized() Process 2162 (user: 60578) is NOT authorized for>
# ... pcscd[2224]: 00000384 ../src/winscard_svc.c:357:ContextThread() Rejected unauthorized PC/SC client
# Crear una regla polkit para permitir el acceso de tu usuario a pcscd
sudo vim /etc/polkit-1/rules.d/99-pcscd.rules
# Agregar lo siguiente al archivo 99-pcscd.rules
polkit.addRule(function(action, subject) {
if (action.id == "org.debian.pcsc-lite.access_pcsc" ||
action.id == "org.debian.pcsc-lite.access_card") {
return polkit.Result.YES;
}
});
# Establecer permisos más seguros al archivo
sudo chmod 644 /etc/polkit-1/rules.d/99-pcscd.rules
# Reiniciar polkit y pcscd para implementar los cambios
sudo systemctl restart polkit.service
sudo systemctl restart pcscd.service
# Probar de nuevo (debería funcionar ahora)
gpg --card-status
Por defecto, el pcscd.service se activa a través de un socket systemd. Asegúrate de iniciar el socket automáticamente al arrancar.
# Habilitar e iniciar el socket pcscd
sudo systemctl enable --now pcscd.socket
¿Qué Sigue?
Las YubiKeys son realmente útiles y muy simples de configurar. La única preocupación es perder la llave, así que mi recomendación es siempre tener un respaldo en una ubicación segura y usar PINs para cada operación.
Las inmersiones profundas en llaves GPG podrían venir en el futuro, pero también es bastante simple. Los próximos temas podrían ser proxychains, temas relacionados con contenedores Docker/Podman, o auto-alojamiento.