Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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
hsm — Biblioteca de Módulo de Seguridad de Hardware Zig para tokens PIV, CAC y YubiKey a través de PC/SC. Soporta certificados, gestión de PIN, firma y descifrado. | Kitploit
Herramientas/GitLabGitLab/devnw/zig/hsm
Herramientas de Cifrado/DescifradoCriptografíaSeguridad de HardwareAutenticación
GitLabdevnw/zig/hsm

hsm

Biblioteca de Módulo de Seguridad de Hardware Zig para tokens PIV, CAC y YubiKey a través de PC/SC. Soporta certificados, gestión de PIN, firma y descifrado.

Ver Repositorio
16hace 19 díasAún no revisado

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

zhsm

Una biblioteca Módulo de Seguridad de Hardware (HSM) para Zig que proporciona acceso PC/SC a tokens PIV, CAC y YubiKey.

Estado

AspectoInformación
Estabilidad de APIDesarrollo
Versión de Zig0.16.0
PlataformasLinux, macOS, Windows
LicenciaMIT

Características

  • Soporte PIV (NIST SP 800-73-4)

    • Obtención de certificados (slots 9A, 9C, 9D, 9E)
    • Verificación, cambio y desbloqueo de PIN
    • Firma ECDSA P-256/P-384
    • Firma RSA 2048/3072/4096
    • Descifrado RSA
  • Soporte CAC (Common Access Card)

    • CAC modernos compatibles con PIV (operaciones completas)
    • Detección de applet PKI de CAC heredado (solo selección de applet)
  • Soporte YubiKey

    • Operaciones del applet PIV
    • Detección basada en ATR
    • Comandos de gestión opcionales
  • Seguridad

    • Sin secretos en registros (modo de depuración censurado)
    • Ceroización de búferes sensibles
    • Análisis TLV estricto con límites de profundidad/longitud
    • Tipos de error ajustados (sin anyerror)
    • Verificación de PIN vinculada a sesión (detección de cambio de tarjeta basada en ATR)
  • Operaciones paralelas (mediante thread_pool)

    • Firma por lotes en múltiples slots
    • Descifrado por lotes en múltiples claves
    • Descubrimiento paralelo de tokens en todos los lectores
    • Obtención paralela de certificados en todos los slots
    • Retroceso secuencial automático por debajo del umbral (< 2 elementos)
    • Activado por defecto (-Denable_tp=true); desactivar con -Denable_tp=false

Requisitos

  • Zig 0.16.0 o compatible
  • Biblioteca PC/SC:
    • Linux: libpcsclite-dev (Debian/Ubuntu) o pcsc-lite-devel (Fedora)
    • macOS: PCSC.framework integrado
    • Windows: Winscard.dll integrado

Instalación de PC/SC en Linux

# Debian/Ubuntu
sudo apt-get install libpcsclite-dev pcscd

# Fedora/RHEL
sudo dnf install pcsc-lite-devel pcsc-lite

# Iniciar el daemon PC/SC
sudo systemctl start pcscd
sudo systemctl enable pcscd

Compilación

# Compilar y ejecutar pruebas unitarias
make

# O usando zig directamente
zig build test

# Ejecutar pruebas de integración con simulador
zig build test -Dintegration_sim=true

# Compilar ejemplos (requiere la biblioteca PC/SC instalada)
zig build examples -Dlink_pcsc=true

Opciones de compilación

OpciónValor por defectoDescripciónImpacto en seguridad
integration_simfalseEjecutar pruebas de integración con simuladorNinguno
hsm_hilfalseEjecutar pruebas con hardware real (requiere token real)Ninguno
link_pcscfalseEnlazar biblioteca PC/SC para ejemplosNinguno
include_simulatorDebug: true
Release: false
Incluir simulador PIV con claves de pruebaCWE-321: Claves de prueba en producción
allow_pcsc_env_overridefalseRIESGO DE SEGURIDAD: Permitir variable de entorno HSM_PCSC_LIB_PATHCWE-427: Carga de bibliotecas no confiables
fipsfalseEnrutar criptografía de seguridad a través del proveedor FIPS-140-3 enlazado (sin sobrecarga cuando está desactivado)Ninguno cuando está desactivado
openssl_path(sin establecer)Prefijo de instalación de OpenSSL para instalaciones no estándar (ej. /usr/local/ssl)Ninguno

Modo FIPS-140-3 / PQC

Con -Dfips=true, cada primitiva criptográfica relevante para la seguridad se enruta a través de un proveedor FIPS de OpenSSL 3.x enlazado y validado mediante la interfaz crypto_backend, y el simulador obtiene operaciones de token PIV postcuánticas (firma ML-DSA-65, encapsulamiento/desencapsulamiento ML-KEM-768) que están disponibles solo en modo FIPS. La bandera está desactivada por defecto con cero sobrecarga; la dependencia fips se resuelve solo con -Dfips=true.

# Compilación por defecto — backend std.crypto, sin enlace OpenSSL
zig build test

# Compilación FIPS — proveedor FIPS de OpenSSL (ejecutar `make deps` desde fips primero)
OPENSSL_CONF=/usr/local/ssl/ssl/openssl.cnf \
  zig build test -Dfips=true -Dopenssl_path=/usr/local/ssl

# Ambos modos en un solo comando
make test-dual

Consulte docs/FIPS.md para el diseño de la interfaz, la política de exención FIPS y las operaciones de token PQC.

Nota de seguridad: La opción allow_pcsc_env_override está desactivada por defecto para evitar ataques de inyección de bibliotecas maliciosas (CWE-427). Actívela solo para desarrollo/pruebas:

# Compilación de producción (segura, la variable de entorno se ignora)
zig build

# Compilación de desarrollo (permite HSM_PCSC_LIB_PATH)
zig build -Dallow_pcsc_env_override=true

Cuando está activada, las bibliotecas se validan antes de cargarse:

  • Deben ser rutas absolutas
  • No pueden tener permisos de escritura mundial
  • Advierte sobre archivos con permisos de escritura grupal

Inicio rápido

const std = @import("std");
const hsm = @import("hsm");

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    // Listar tokens disponibles
    const tokens = try hsm.listTokens(allocator, false);
    defer {
        for (tokens) |*t| t.deinit();
        allocator.free(tokens);
    }

    if (tokens.len == 0) {
        std.debug.print("No se encontraron tokens\n", .{});
        return;
    }

    // Abrir el primer token
    var token = try hsm.openToken(allocator, tokens[0].id, .{});
    defer token.close();

    // Verificar PIN
    try token.verifyPin("123456");

    // Leer certificado
    const cert = try token.getCertificate(.authentication);
    defer allocator.free(cert);
    std.debug.print("Certificado: {} bytes\n", .{cert.len});

    // Firmar un digest
    var digest: [32]u8 = undefined;
    std.crypto.hash.sha2.Sha256.hash("Hello, PIV!", &digest, .{});

    const signature = try token.sign(.authentication, .ecdsa_p256, &digest);
    defer allocator.free(signature);
    std.debug.print("Firma: {} bytes\n", .{signature.len});
}

Resumen de la API

Tipos

TipoDescripción
TokenKindTipo de token: .piv, .cac, .yubikey, .unknown
TokenInfoMetadatos del token descubierto
TokenManejador de token abierto para operaciones
SlotSlot de clave: .authentication (9A), .signature (9C), .key_management (9D), .card_auth (9E)
AlgorithmAlgoritmo criptográfico: .ecdsa_p256, .ecdsa_p384, .rsa2048_pkcs1v15, etc.
CapabilitiesBanderas de capacidades del token
PcscScopeÁmbito del contexto PC/SC: .user (por defecto), .system

Funciones

FunciónDescripción
listTokens(allocator, use_sim)Listar tokens disponibles
openToken(allocator, id, opts)Abrir un token por ID
token.reconnect()Reconectar al token y restablecer estado de autenticación
token.verifyPin(pin)Verificar PIN
token.changePin(old, new)Cambiar PIN
token.unblockPin(puk, new_pin)Desbloquear PIN con PUK
token.getCertificate(slot)Obtener certificado codificado en DER
token.sign(slot, alg, digest)Firmar un digest
token.decrypt(slot, alg, ciphertext)Descifrar datos
token.capabilities()Obtener capacidades del token
token.close()Cerrar conexión del token

Errores

Todas las operaciones devuelven errores de HsmError:

  • PC/SC: PcscUnavailable, ReaderGone, CardRemoved, Timeout
  • PIN: PinIncorrect, PinLocked, PinLengthInvalid
  • Capacidad: NotSupported, SlotNotFound, AlgorithmNotSupported
  • Datos: InvalidTlv, CertificateNotFound, InvalidDigestLength
  • Seguridad: SecurityConditionNotSatisfied, AuthenticationFailed
Descargar herramienta