Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pivit — Gestionar certificados x509 en YubiKeys habilitadas para PIV, generar claves y solicitudes de certificados, y firmar o verificar commits de git y archivos. | Kitploit
Herramientas/GitHubGitHub/cashapp/pivit
CriptografíaSeguridad de HardwareAutenticación
GitHubcashapp/pivit

pivit

Gestionar certificados x509 en YubiKeys habilitadas para PIV, generar claves y solicitudes de certificados, y firmar o verificar commits de git y archivos.

Ver Repositorio
10096hace 2 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

codecov

Pivit

Pivit es una herramienta de línea de comandos para gestionar certificados x509 almacenados en tarjetas inteligentes con soporte de applet PIV (Yubikey), y usar esos certificados para firmar y verificar datos.

Es totalmente compatible con la forma en que la línea de comandos de git llama a programas externos para firmar y verificar commits y etiquetas.

Instalación

Brew

root@kitploit:~
brew install pivit

Instalación con Go

root@kitploit:~
go install github.com/cashapp/pivit/cmd/pivit@latest

Uso

Para configurar git para que use pivit para firmar y verificar firmas, ejecuta los siguientes comandos:

root@kitploit:~
git config --(local|global) gpg.format x509
git config --(local|global) gpg.x509.program pivit

Reiniciar e inicializar el PIV del Yubikey

root@kitploit:~
pivit --reset

Reinicia el applet PIV del Yubikey y crea un nuevo PIN para acceder a él.

Generar un certificado

root@kitploit:~
pivit --generate [--p256] [--self-sign | --no-csr] [--assume-yes] [--pin-policy] [--touch-policy]

Genera un nuevo par de claves en la ranura de autenticación de tarjeta del Yubikey.
Este comando también generará y almacenará un certificado x509 para la clave generada, firmado por Yubico.

Si se proporciona la opción --p256, el par de claves se genera utilizando la curva elíptica P-256. De lo contrario, se utiliza la curva P-384.

Añade la opción --self-sign para generar un certificado autofirmado; el certificado se firma con la clave recién generada.
Se te pedirá que confirmes que realmente deseas un certificado autofirmado, luego se te pedirá el PIN y, a continuación, se te pedirá que toques tu Yubikey.
La salida contendrá 3 bloques CERTIFICATE en lugar de un CERTIFICATE_REQUEST al final (ejemplo de salida abajo).
Esta opción es útil principalmente para fines de prueba. La opción --assume-yes se puede usar en combinación con la opción --self-sign para deshabilitar la solicitud de sí/no.

Añade la opción --no-csr para omitir la impresión de la solicitud de firma de certificado. En este caso, no se te pedirá que toques tu Yubikey.
Esta opción es útil si no necesitas que la clave generada forme parte de una PKI existente.
Puedes verificar el certificado de la clave usando el certificado de Yubico aquí.

La opción --pin-policy controla cuándo se solicita el PIN al acceder a la clave generada.
Establézcala en uno de never, once o always (el valor predeterminado es never).

La opción --touch-policy controla cuándo se solicita tocar físicamente el hardware al acceder a la clave generada.
Establézcala en uno de never, cached o always (el valor predeterminado es always).

La salida del comando se verá así:

root@kitploit:~
Printing Yubikey device attestation certificate:
----- BEGIN CERTIFICATE -----
...
----- END CERTIFICATE -----
Printing generated key certificate:
----- BEGIN CERTIFICATE -----
...
----- END CERTIFICATE -----
Printing certificate signing request:
----- BEGIN CERTIFICATE REQUEST -----
...
----- END CERTIFICATE REQUEST-----

El CERTIFICATE REQUEST al final está firmado por la nueva clave privada generada, y se puede usar para emitir un certificado firmado por una CA.

Si eliges emitir y usar tu propio certificado, también es importante verificar que:

  • El certificado de atestación del dispositivo está firmado por Yubico.
  • El certificado de la clave está firmado por el certificado de atestación del dispositivo.
  • La clave pública en la solicitud de firma de certificado es la misma que la clave pública en el certificado de la clave.

Parámetros de la solicitud de certificado

Pivit permite establecer diferentes atributos en la CSR mediante variables de entorno.

Las siguientes opciones de certificado se establecerán de la siguiente manera:

  • Subject.CommonName se establecerá con el valor de la variable de entorno PIVIT_EMAIL.
  • Subject.Organization se establecerá con el valor de la variable de entorno PIVIT_ORG.
  • Subject.OrganizationalUnit se establecerá con el valor de la variable de entorno PIVIT_ORG_UNIT.

Además, los siguientes Nombres Alternativos de Sujeto (SAN) se incluirán en la solicitud de certificado:

  • Direcciones de correo electrónico: incluirán PIVIT_EMAIL
  • URIs: incluirán todas las URL especificadas en la variable de entorno PIVIT_CERT_URIS (las URIs están separadas por un espacio)

Soporte de ranuras PIV

El módulo PIV soporta múltiples ranuras donde se pueden almacenar claves y certificados.
Ranuras disponibles: 9a, 9c, 9d y 9e.

  • 9e es la ranura de "Autenticación de tarjeta".
    Es la única ranura que no requiere PIN para acceder a la clave privada al firmar con ella, lo que resulta en menos fricción en el uso.
  • 9a es la ranura de "Autenticación". Se usa para acciones como el inicio de sesión en el sistema.
  • 9c es la ranura de "Firma digital". Se usa para firmar documentos, o firmar archivos y ejecutables.
  • 9d es la ranura de "Gestión de claves". Se usa para cosas como cifrar correos electrónicos o archivos con fines de confidencialidad.

Para más información

pivit permite elegir una ranura usando la opción -w.
Para cada comando, si no se especifica una ranura, se usa 9e por defecto.
Por ejemplo:

  • Generación de certificados

    root@kitploit:~
    pivit --generate [-w slot]
    
  • Firma

    root@kitploit:~
    pivit -s -u userid [-w slot]
    
  • Impresión de un certificado

    root@kitploit:~
    pivit --print [-w slot]
    

Especificar un Yubikey por número de serie

Por defecto, pivit espera que haya un solo Yubikey conectado. Si un sistema tiene varios lectores de tarjetas o Yubikeys, o para simplemente asegurarse de que pivit se está comunicando con el Yubikey deseado, especifique el número de serie mediante la variable de entorno PIVIT_YK_SERIAL.

Ejemplo:

root@kitploit:~
PIVIT_YK_SERIAL=13078292 pivit --print

Esto se puede usar con cualquier comando.

Importar certificado al Yubikey

root@kitploit:~
pivit --import [--first-pem] [file]

Importa un certificado desde file.
Se espera que el nombre de archivo dado contenga un certificado x509 serializado codificado como un bloque PEM.

Esta acción solicita el PIN del Yubikey.

Añade --first-pem para importar el primer bloque PEM de file, ignorando el resto. Esto es útil si se usa una CA que proporciona sus certificados emitidos como una cadena o paquete, con el certificado de entidad final primero (esta es la convención).

Imprimir información del certificado

root@kitploit:~
pivit --print

Imprime el certificado almacenado en la ranura de autenticación de tarjeta del Yubikey, junto con su huella digital.
Por ejemplo:

root@kitploit:~
> pivit --print
bad126c47dc90e90e0c7ec90ec682b1717e52757
-----BEGIN CERTIFICATE-----
MIICczCCAVugAwIBAgIRANATKTxzlHOJgMdV30XRz5kwDQYJKoZIhvcNAQELBQAw
ITEfMB0GA1UEAwwWWXViaWNvIFBJViBBdHRlc3RhdGlvbjAgFw0xNjAzMTQwMDAw
MDBaGA8yMDUyMDQxNzAwMDAwMFowJTEjMCEGA1UEAwwaWXViaUtleSBQSVYgQXR0
ZXN0YXRpb24gOWUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAT1l76Mvo6dJ4CwX2QQ
HImYRWbxLqt1kCVsn0PUn20DYtSKLuq8kCnMAn+kdneqjtaaBmWuPJH+g7LMyI18
QDQp2w+qSOf9ZWrOupMAGM8EpWXNTSNKoE50JhKXFbudBByjTjBMMBEGCisGAQQB
gsQKAwMEAwUBAjAUBgorBgEEAYLECgMHBAYCBACDq1IwEAYKKwYBBAGCxAoDCAQC
AQIwDwYKKwYBBAGCxAoDCQQBBDANBgkqhkiG9w0BAQsFAAOCAQEAGSmu0PUMDfEb
PkmkJ/rKYvpOKhbmpryjXuZ7ENJ3jGq3foyLSN+aBbd3M1im2ejC6/upthcp1N5M
Mg2SN6MBRS4crtt43DVHepBPt2W07vW8h4uFosJX29HdhK0dP+RnBGDdWYo0nq7y
7q1Y1c0BI7oGnaORL0DzSDtdxAJAphjspWsWNCIP2DTWQPhLTg4DqmYd/ahygVsZ
IE64QvJDQC72Dfyad6tIajmtPncqPt857H0hEJv2X58iOoJA/wAeuId4or859cJU
GTDbN7Ke4LWXRbs7StJTgefmNgWmKjm1Q2qs80WGShyQ6OrxALejd8jivtcTwsDz
WvzdmHCOmg==
-----END CERTIFICATE-----

La huella digital del certificado se calcula realizando una suma de comprobación SHA1 sobre los bytes brutos del certificado y luego codificando la suma de comprobación como una cadena hexadecimal.

Usa la huella digital del certificado para que git sepa qué certificado usar al firmar commits y etiquetas:

root@kitploit:~
FINGERPRINT=`pivit --print | head -1`
git config --(local|global) user.signingkey $FINGERPRINT

Firmar

root@kitploit:~
pivit -s [-a] [-b] [-u userid] [--status-fd=[num]] [-t url] [file]
  • -a (--armor) - si se debe envolver la firma en armadura ASCII para hacerla imprimible.
  • -b (--detach-sign) - hacer una firma separada.
  • -u (--local-user) - ya sea una dirección de correo electrónico o una huella digital de clave codificada como cadena hexadecimal.
    Este identificador determina qué certificado usar. Si se proporciona una dirección de correo electrónico, busca un certificado que contenga la dirección dada.
    Si se proporciona una huella digital de clave, busca un certificado cuya suma de comprobación SHA1 coincida con la cadena hexadecimal dada.
  • --status-fd - descriptor de archivo al que emitir mensajes de estado. 1 es stdout, 2 es stderr.
    Cualquier valor 0 o inferior significa que no se escribirán mensajes de estado.
  • -t (--timestamp-authority) - URL de una autoridad de sellado de tiempo RFC3161 para usar en el sellado de tiempo.

Este comando hará que el Yubikey parpadee y bloqueará hasta que se toque.

Cuando git está configurado para firmar commits y etiquetas, usará los siguientes parámetros fijos -sbau [user.signingkey] --status-fd=1.
user.signingkey se toma de la configuración local/global de git.

Nota: Pivit fue diseñado para soportar la firma de commits de git.
Pero, si la clave que se usa fue creada con --pin-policy=always, puede que no sea totalmente compatible.
Ahora mismo, Pivit solicita el PIN solo a través de la línea de comandos. Si usas clientes git basados en GUI como GitKraken o SourceTree, probablemente te perderás ese aviso.

Verificar firma

root@kitploit:~
pivit --verify [file ...]

Verifica los datos firmados especificados en el/los argumento(s) de archivo.

Si no se especificaron archivos, lee desde stdin.
Si se especificó una o ninguna ruta de archivo, asume que la firma está adjunta a los datos firmados.

De lo contrario, asume que el primer archivo contiene la firma y el segundo contiene los datos firmados.
Especifica - para indicar que los datos firmados deben leerse desde stdin.

Descargar herramienta
  • file - ruta al archivo que se firmará. Si no se especifica ningún nombre de archivo, usa stdin.