Настройка HSM (Hardware Security Module) для блокчейна

Представьте: вы запускаете Ethereum валидатор, и приватный ключ хранится в файле на сервере. Один эксплойт — и весь staked ETH под угрозой slashing. HSM (Hardware Security Module) решает эту проблему на уровне физической изоляции: ключ генерируется и используется внутри сертифицированного чипа, извл

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1004
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1270
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1011

Представьте: вы запускаете Ethereum валидатор, и приватный ключ хранится в файле на сервере. Один эксплойт — и весь staked ETH под угрозой slashing. HSM (Hardware Security Module) решает эту проблему на уровне физической изоляции: ключ генерируется и используется внутри сертифицированного чипа, извлечь его невозможно. По данным спецификации PKCS#11, ни один софт не может прочитать приватный ключ из HSM. Экономия от перехода на HSM достигает 40-60% относительно облачных KMS за два года — за счёт исключения лицензионных отчислений и снижения риска утечек. Для любого криптопроекта, работающего с крупными суммами, HSM — это не роскошь, а стандарт безопасности.

Свяжитесь с нами для консультации по выбору HSM под вашу инфраструктуру.

Почему HSM лучше программных альтернатив?

Характеристика Software (файл/env) AWS KMS Dedicated HSM
Ключ извлекаем? Да Нет (теоретически) Нет (физически)
Атака на память Уязвим Уязвим на клиенте Нет (операции внутри)
Физическая защита Нет Да (Amazon) Да (под вашим контролем)
Tamper evidence Нет Нет Да (self-destruct при вскрытии)
FIPS 140-2 Level Level 2 Level 3 или Level 4
Latency на операцию <1ms 10–50ms 5–100ms

FIPS 140-2 Level 3 — стандарт для финансового сектора. Требует физической защиты от вскрытия (tamper-evident), аутентификации на уровне устройства. Большинство enterprise HSM (Thales Luna, AWS CloudHSM, YubiHSM 2) сертифицированы по этому уровню. HSM в 10 раз безопаснее программного хранения, так как ключ физически недоступен.

Как выбрать HSM для блокчейна?

Устройство Поддержка secp256k1 Throughput Применение
Thales Luna Network HSM Да ~10 000 ECC/сек Биржи, custody
AWS CloudHSM Да ~1000 ECC/сек Облачные проекты
YubiHSM 2 Нет (нативно) ~10 ECC/сек Тестирование, небольшие валидаторы
Azure Dedicated HSM Да ~5000 ECC/сек Enterprise

Как интегрировать HSM с Ethereum через PKCS#11?

PKCS#11 — стандартный C API для работы с HSM. Большинство языков программирования имеют биндинги.

Генерация ключа внутри HSM

import pkcs11 from pkcs11 import Mechanism, KeyType, Attribute # Подключаемся к HSM через PKCS#11 библиотеку lib = pkcs11.lib('/usr/lib/libCryptoki2.so') # путь к вендорной библиотеке token = lib.get_token(token_label='MyHSMToken') session = token.open(user_pin='HSM_USER_PIN') # Генерируем secp256k1 ключевую пару (Ethereum/Bitcoin) # Ключи создаются и хранятся ВНУТРИ HSM, из него не выходят public_key, private_key = session.generate_keypair( KeyType.EC, public_template={ Attribute.TOKEN: True, # хранить в HSM (не только в сессии) Attribute.LABEL: 'eth-signing-key-1', Attribute.EC_PARAMS: encode_named_curve_parameters('secp256k1'), Attribute.VERIFY: True, }, private_template={ Attribute.TOKEN: True, Attribute.LABEL: 'eth-signing-key-1', Attribute.SIGN: True, Attribute.EXTRACTABLE: False, # **КРИТИЧНО**: запрет экспорта приватного ключа Attribute.SENSITIVE: True, } ) # Получаем публичный ключ (он exportable — это нормально) ec_point = public_key[Attribute.EC_POINT] # Преобразуем в Ethereum адрес eth_address = ec_point_to_eth_address(ec_point) print(f"Ethereum address: {eth_address}") 

Подписание транзакции через HSM

from eth_account._utils.signing import sign_transaction_dict import rlp def sign_eth_transaction_hsm(session, private_key_label, tx_dict): """ Подписываем Ethereum транзакцию ключом внутри HSM. Приватный ключ никогда не покидает HSM. """ # Кодируем транзакцию по EIP-155 (с chain_id для replay protection) chain_id = tx_dict['chainId'] unsigned_tx = encode_unsigned_tx(tx_dict) # Вычисляем хэш для подписи tx_hash = keccak256(unsigned_tx) # Получаем объект приватного ключа из HSM (не сам ключ!) private_key = session.get_key( label=private_key_label, key_type=KeyType.EC ) # Подписываем ВНУТРИ HSM — tx_hash уходит в HSM, подпись приходит обратно # Механизм ECDSA (raw) — для Ethereum нужен именно raw без хэширования внутри HSM der_signature = private_key.sign(tx_hash, mechanism=Mechanism.ECDSA) # DER -> (r, s) -> v, r, s для Ethereum r, s = decode_der_signature(der_signature) v = recover_v(tx_hash, r, s, chain_id, eth_address) signed_tx = encode_signed_tx(tx_dict, v, r, s) return signed_tx.hex() 

Важная деталь: Ethereum использует secp256k1 с recoverable signature (компонент v нужен для восстановления публичного ключа). PKCS#11 возвращает ECDSA подпись без v. v (recovery id) вычисляется эмпирически — пробуем 0 и 1, проверяем какой восстанавливает правильный адрес.

Что такое slashing и как HSM защищает валидатора?

Для Ethereum PoS валидаторов ключ подписывает аттестации и блоки. Компрометация ключа ведёт к slashing. EIP-3030 (Ethereum Remote Signing) и Web3Signer от Consensys решают задачу удалённого подписания с HSM. Конфигурация Web3Signer с HSM через PKCS#11:

# web3signer конфигурация с HSM (PKCS11) type: "pkcs11-signer" pkcs11LibraryPath: "/usr/lib/softhsm/libsofthsm2.so" slashingProtectionDbUrl: "jdbc:postgresql://localhost/web3signer" keystoreFile: "/etc/web3signer/keystore.yaml" 

Web3Signer дополнительно использует slashing protection database — если запрос на подпись придётся дважды, второй будет отклонён. Это критично для избежания slashing.

Аудит и управление доступом

HSM логирует каждую операцию: кто запросил подпись, с каким ключом, в какое время. Это криминалистически значимые логи — они должны выгружаться в SIEM систему и храниться с integrity гарантиями (append-only, подписанные).

Схема управления доступом:

  • Security Officer (SO) — управляет самим HSM, создаёт/удаляет ключи, меняет политики
  • Operator — может использовать ключи для подписания, но не может их удалить или экспортировать
  • Auditor — только чтение логов

Разделение ролей + m-of-n authentication для SO операций (например, 2 из 3 смарт-карт) — стандарт для custodial операций.

Резервное копирование ключей

Ключи из HSM можно скопировать только в другой HSM того же типа, используя key wrapping. Процедура требует присутствия Security Officer и физического доступа. Мы настраиваем регулярный backup с шифрованием на уровне HSM.

Как настроить HSM: пошаговая инструкция

  1. Выбор HSM в зависимости от требований к throughput, поддерживаемым кривым и типу установки (on-premise или облачный).
  2. Физическая установка и инициализация HSM (для on-premise). Подключение к сети и настройка управления.
  3. Генерация ключевых пар внутри HSM с параметрами !EXTRACTABLE=False и !SENSITIVE=True.
  4. Интеграция PKCS#11 с приложением: настройка библиотеки, тестовое подписание.
  5. Настройка ролей и m-of-n аутентификации для Security Officer операций.
  6. Интеграция с Web3Signer для использования в Ethereum валидаторе, включая настройку slashing protection.
  7. Резервное копирование ключевого материала (key wrapping) и тестирование disaster recovery сценариев.

Для получения индивидуального плана внедрения свяжитесь с нашими инженерами.

Что входит в работу

  • Выбор HSM под конкретные требования (on-premise vs cloud, throughput, кривые)
  • Физическая установка и инициализация HSM (для on-premise)
  • PKCS#11 интеграция с приложением: генерация ключей, операции подписания
  • Настройка ролей и m-of-n аутентификации
  • Интеграция с Web3Signer для validator use case
  • Настройка аудит-логирования с выгрузкой в SIEM
  • Процедуры backup ключевого материала (key wrapping под другой HSM)
  • Тестирование disaster recovery сценариев

Получите консультацию по настройке HSM для вашего проекта. Закажите внедрение под ключ — мы оценим сроки и стоимость индивидуально.