Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
hsm — Библиотека аппаратного модуля безопасности на Zig для токенов PIV, CAC и YubiKey через PC/SC. Поддерживает сертификаты, управление PIN-кодом, подпись и расшифровку. | Kitploit
Инструменты/GitLabGitLab/devnw/zig/hsm
Инструменты шифрования/дешифрованияКриптографияАппаратная БезопасностьАутентификация
GitLabdevnw/zig/hsm

hsm

Библиотека аппаратного модуля безопасности на Zig для токенов PIV, CAC и YubiKey через PC/SC. Поддерживает сертификаты, управление PIN-кодом, подпись и расшифровку.

Репозиторий
1619 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

zhsm

Библиотека модуля аппаратной безопасности (HSM) для Zig, обеспечивающая доступ через PC/SC к токенам PIV, CAC и YubiKey.

Статус

АспектИнформация
Стабильность APIРазработка
Версия Zig0.16.0
ПлатформыLinux, macOS, Windows
ЛицензияMIT

Возможности

  • Поддержка PIV (NIST SP 800-73-4)

    • Получение сертификатов (слоты 9A, 9C, 9D, 9E)
    • Проверка, изменение и разблокировка PIN
    • Подпись ECDSA P-256/P-384
    • Подпись RSA 2048/3072/4096
    • Расшифровка RSA
  • Поддержка CAC (Common Access Card)

    • Современные PIV-совместимые карты CAC (полный набор операций)
    • Обнаружение устаревшего PKI-апплета CAC (только выбор апплета)
  • Поддержка YubiKey

    • Операции PIV-апплета
    • Обнаружение на основе ATR
    • Дополнительные команды управления
  • Безопасность

    • Секреты не попадают в журналы (режим отладки с маскированием)
    • Обнуление чувствительных буферов
    • Строгий разбор TLV с ограничениями по глубине/длине
    • Строгие типы ошибок (без anyerror)
    • Проверка PIN, привязанная к сессии (обнаружение замены карты на основе ATR)
  • Параллельные операции (через thread_pool)

    • Пакетная подпись на нескольких слотах
    • Пакетная расшифровка на нескольких ключах
    • Параллельное обнаружение токенов на нескольких считывателях
    • Параллельное получение сертификатов на нескольких слотах
    • Автоматический последовательный резерв при количестве менее 2
    • Включено по умолчанию (-Denable_tp=true); отключить с помощью -Denable_tp=false

Требования

  • Zig 0.16.0 или совместимый
  • Библиотека PC/SC:
    • Linux: libpcsclite-dev (Debian/Ubuntu) или pcsc-lite-devel (Fedora)
    • macOS: Встроенная PCSC.framework
    • Windows: Встроенная Winscard.dll

Установка PC/SC в Linux

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

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

# Запуск демона PC/SC
sudo systemctl start pcscd
sudo systemctl enable pcscd

Сборка

# Сборка и запуск модульных тестов
make

# Или напрямую через zig
zig build test

# Запуск интеграционных тестов с симулятором
zig build test -Dintegration_sim=true

# Сборка примеров (требуется установленная библиотека PC/SC)
zig build examples -Dlink_pcsc=true

Параметры сборки

ОпцияПо умолчаниюОписаниеВлияние на безопасность
integration_simfalseЗапуск интеграционных тестов с симуляторомНет
hsm_hilfalseЗапуск тестов с реальным оборудованием (требуется настоящий токен)Нет
link_pcscfalseЛинковка библиотеки PC/SC для примеровНет
include_simulatorDebug: true
Release: false
Включение симулятора PIV с тестовыми ключамиCWE-321: Тестовые ключи в продакшене
allow_pcsc_env_overridefalseОПАСНО: Разрешить переменную окружения HSM_PCSC_LIB_PATHCWE-427: Загрузка ненадёжной библиотеки
fipsfalseНаправлять криптографию безопасности через связанный FIPS-140-3 провайдер (нулевые накладные расходы при выключении)Нет при выключении
openssl_path(не задано)Префикс установки OpenSSL для нестандартных путей (например, /usr/local/ssl)Нет

Режим FIPS-140-3 / PQC

С параметром -Dfips=true все критически важные криптографические примитивы направляются через связанный валидированный FIPS-провайдер OpenSSL 3.x через прослойку crypto_backend, а симулятор получает пост-квантовые операции PIV-токена (подпись ML-DSA-65, инкапсуляция/декапсуляция ML-KEM-768), доступные только в режиме FIPS. Флаг выключен по умолчанию с нулевыми накладными расходами; зависимость fips подключается только при -Dfips=true.

# Стандартная сборка — бэкенд std.crypto, без линковки OpenSSL
zig build test

# Сборка FIPS — провайдер OpenSSL FIPS (сначала выполните `make deps` из fips)
OPENSSL_CONF=/usr/local/ssl/ssl/openssl.cnf \
  zig build test -Dfips=true -Dopenssl_path=/usr/local/ssl

# Оба режима за один проход
make test-dual

См. docs/FIPS.md — описание прослойки, политика исключений из FIPS и операции PQC-токена.

Примечание по безопасности: Параметр allow_pcsc_env_override отключён по умолчанию для предотвращения атак внедрения вредоносных библиотек (CWE-427). Включайте только для разработки/тестирования:

# Продакшн-сборка (безопасно, переменная окружения игнорируется)
zig build

# Сборка для разработки (разрешает HSM_PCSC_LIB_PATH)
zig build -Dallow_pcsc_env_override=true

При включении библиотеки проверяются перед загрузкой:

  • Должны быть абсолютными путями
  • Не должны быть доступны для записи всем пользователям
  • Выводится предупреждение о групповой записи

Быстрый старт

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

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

    // Получение списка доступных токенов
    const tokens = try hsm.listTokens(allocator, false);
    defer {
        for (tokens) |*t| t.deinit();
        allocator.free(tokens);
    }

    if (tokens.len == 0) {
        std.debug.print("Токены не найдены\n", .{});
        return;
    }

    // Открытие первого токена
    var token = try hsm.openToken(allocator, tokens[0].id, .{});
    defer token.close();

    // Проверка PIN
    try token.verifyPin("123456");

    // Чтение сертификата
    const cert = try token.getCertificate(.authentication);
    defer allocator.free(cert);
    std.debug.print("Сертификат: {} байт\n", .{cert.len});

    // Подпись дайджеста
    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("Подпись: {} байт\n", .{signature.len});
}

Обзор API

Типы

ТипОписание
TokenKindТип токена: .piv, .cac, .yubikey, .unknown
TokenInfoМетаданные обнаруженного токена
TokenДескриптор открытого токена для операций
SlotКлючевой слот: .authentication (9A), .signature (9C), .key_management (9D), .card_auth (9E)
AlgorithmКриптографический алгоритм: .ecdsa_p256, .ecdsa_p384, .rsa2048_pkcs1v15 и др.
CapabilitiesФлаги возможностей токена
PcscScopeОбласть контекста PC/SC: .user (по умолчанию), .system

Функции

ФункцияОписание
listTokens(allocator, use_sim)Получение списка доступных токенов
openToken(allocator, id, opts)Открытие токена по идентификатору
token.reconnect()Переподключение к токену и сброс состояния аутентификации
token.verifyPin(pin)Проверка PIN
token.changePin(old, new)Изменение PIN
token.unblockPin(puk, new_pin)Разблокировка PIN с помощью PUK
token.getCertificate(slot)Получение сертификата в DER-кодировке
token.sign(slot, alg, digest)Подпись дайджеста
token.decrypt(slot, alg, ciphertext)Расшифровка данных
token.capabilities()Получение возможностей токена
token.close()Закрытие соединения с токеном

Ошибки

Все операции возвращают ошибки из HsmError:

  • PC/SC: PcscUnavailable, ReaderGone, CardRemoved, Timeout
  • PIN: PinIncorrect, PinLocked, PinLengthInvalid
  • Возможности: NotSupported, SlotNotFound, AlgorithmNotSupported
  • Данные: InvalidTlv, CertificateNotFound, InvalidDigestLength
  • Безопасность: SecurityConditionNotSatisfied, AuthenticationFailed

Модуль параллельных операций

Скачать инструмент