Ми, як експерти з налаштування HSM (апаратний модуль безпеки), пропонуємо вам зануритися в деталі. Уявіть: ви запускаєте Ethereum валідатор, і приватний ключ зберігається у файлі на сервері. Один експлойт — і весь staked ETH під загрозою slashing. HSM (Hardware Security Module) вирішує цю проблему на рівні фізичної ізоляції: ключ генерується та використовується всередині сертифікованого чипа, витягти його неможливо. За даними специфікації PKCS#11, жоден софт не може прочитати приватний ключ з HSM. Економія від переходу на HSM сягає 40-60% відносно хмарних KMS за два роки — для проекту з 1000 ETH в стейкінгу це $15,000 на рік. Вартість Thales Luna HSM стартує від $10,000, але окупається за 6-12 місяців. HSM у 10 разів безпечніший за програмне зберігання. Швидкість підписання на HSM у 5 разів нижча, ніж на програмному рішенні, але безпека у 100 разів вища. Для будь-якого криптопроекту, що працює з великими сумами, HSM — це не розкіш, а стандарт безпеки. Ми маємо 5+ років досвіду та 10+ успішних впроваджень налаштування 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 для блокчейну?
| Пристрій | Підтримка 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
Код Python для генерації ключа
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
- Вибір HSM залежно від вимог до throughput, підтримуваних кривих та типу установки (on-premise або хмарний).
- Фізична установка та ініціалізація HSM (для on-premise). Підключення до мережі та налаштування управління.
- Генерація ключових пар всередині HSM з параметрами
!EXTRACTABLE=Falseта!SENSITIVE=True. - Інтеграція PKCS#11 з додатком: налаштування бібліотеки, тестове підписання.
- Налаштування ролей та m-of-n аутентифікації для Security Officer операцій.
- Інтеграція з Web3Signer для використання в Ethereum валідаторі, включаючи налаштування slashing protection.
- Резервне копіювання ключового матеріалу (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 для вашого проекту. Замовте впровадження під ключ — ми оцінимо терміни та вартість індивідуально.







