Использование Hardware Security Module (HSM, аппаратный модуль безопасности)

Совершаемые на узлах криптографические операции могут быть делегированы HSM. HSM защищает ваши приватные ключи и берет на себя выполнение всех криптографических операций, позволяя вашим узлам и orderer“ам подписывать и подтверждать (endorse) транзакции без риска раскрытия их приватных ключей. Если вам необходимо соблюдать государственные стандарты, например FIPS 140-2, то вы можете выбрать из нескольких сертифицированных HSM.

В настоящее время Fabric использует стандарт PKCS11 для взаимодействия с HSM.

Настройка HSM

Чтобы использовать HSM с вашим Fabric-узлом, вам необходимо обновить секцию bccsp(Crypto Service Provider, поставщик криптографических сервисов) файла конфигурации узла, например, core.yaml или orderer.yaml. В секции bccsp вам необходимо выбрать PKCS11 как провайдера и указать путь к библиотеке PKCS11, которую вы желаете использовать. Также необходимо казать Label и PIN токена, который вы создали для криптографических операций. Можно использовать один токен для генерации и хранения нескольких ключей.

Заранее собранные Hyperledger Fabric docker images не способны использовать PKCS11. Если вы развертываете Fabric через docker, вам необходимо собрать свои собственные images и включить PKCS11 следующей командой:

make docker GO_TAGS=pkcs11

Вам также нужно удостовериться, что библиотека PKCS11 доступна для использования нодой, установив библиотеку или смонтировав ее внутрь контейнера.

Пример

Следующий пример демонстрирует то, как настроить узел на использование HSM.

Для начала вам необходимо установить реализацию интерфейса PKCS11. Этот пример использует реализацию softhsm с открытым исходным кодом. После установки softhsm вам необходимо будет установить переменную окружения SOFTHSM2_CONF на путь к конфигурационному файлу softhsm2.

Далее вы можете использовать softhsm для создания токена, который возьмет на себя криптографические операции вашего узла внутри слота HSM. В этом примере мы создадим токен с именем «fabric» и установим pin-код «71811222». После создания токена, обновите конфигурационный файл, чтобы использовать PKCS11 вкупе с вашим токеном как crypto service provider.

Пример:

#############################################################################
# BCCSP (BlockChain Crypto Service Provider) section is used to select which
# crypto library implementation to use
#############################################################################
bccsp:
  default: PKCS11
  pkcs11:
    Library: /etc/hyperledger/fabric/libsofthsm2.so
    Pin: "71811222"
    Label: fabric
    hash: SHA2
    security: 256
    Immutable: false

По умолчанию, при генерации приватных ключей с использованием HSM приватные ключи создаются изменяемыми (mutable), то есть атрибуты приватного ключа PKCS11 могут быть изменены после генерации ключа. Если присвоить полю Immutable (неизменяемый) значение true, то атрибуты приватного ключа не могут быть изменены после генерации. Если вы хотите включить неизменяемость, то убедитесь, что PKSC11 object copy поддерживается вашим HSM.

Вы можете использовать переменные окружения, чтобы переопределить поля конфигурационного файла.

Для использования softhsm2 на сервере Fabric CA, вы можете установить следующие значения окружения (или напрямую установить соответствующие значения в конфигурации сервера CA):

FABRIC_CA_SERVER_BCCSP_DEFAULT=PKCS11
FABRIC_CA_SERVER_BCCSP_PKCS11_LIBRARY=/etc/hyperledger/fabric/libsofthsm2.so
FABRIC_CA_SERVER_BCCSP_PKCS11_PIN=71811222
FABRIC_CA_SERVER_BCCSP_PKCS11_LABEL=fabric

Для использования softhsm2 на пире, вы можете установить следующие значения окружения (или напрямую установить соответствующие значения в конфигурации пира):

CORE_PEER_BCCSP_DEFAULT=PKCS11
CORE_PEER_BCCSP_PKCS11_LIBRARY=/etc/hyperledger/fabric/libsofthsm2.so
CORE_PEER_BCCSP_PKCS11_PIN=71811222
CORE_PEER_BCCSP_PKCS11_LABEL=fabric

Для использования softhsm2 на orderer“е, вы можете установить следующие значения окружения (или напрямую установить соответствующие значения в конфигурации orderer“а):

ORDERER_GENERAL_BCCSP_DEFAULT=PKCS11
ORDERER_GENERAL_BCCSP_PKCS11_LIBRARY=/etc/hyperledger/fabric/libsofthsm2.so
ORDERER_GENERAL_BCCSP_PKCS11_PIN=71811222
ORDERER_GENERAL_BCCSP_PKCS11_LABEL=fabric

Если вы развертываете узлы через docker compose, после сборки ваших images вы можете обновить docker compose файлы, чтобы монтировать библиотеку softhsm и конфигурационный файл внутри контейнера с использованием томов (volumes). Как пример, вы можете добавить следующее в ваш docker compose файл:

  environment:
     - SOFTHSM2_CONF=/etc/hyperledger/fabric/config.file
  volumes:
     - /home/softhsm/config.file:/etc/hyperledger/fabric/config.file
     - /usr/local/Cellar/softhsm/2.1.0/lib/softhsm/libsofthsm2.so:/etc/hyperledger/fabric/libsofthsm2.so

Настройка сети с HSM

Если вы развертываете узлы с помощью HSM, ваш приватный ключ должен быть сгенерирован в HSM и там же после этого храниться, он не должен быть в локальной директории MSP keystore. Директория keystore будет пустой. Узел использует subject key identifier сертификата подписи (signing certificate) из директории signcerts, чтобы извлечь приватный ключ из HSM. Процесс создания MSP директории узла зависит от того, используете ли вы Fabric Certificate Authority (CA) или же свой CA.

До начала настройки

Перед началом настройки узла для использования HSM, вы должны были выполнить следующие шаги:

  1. Создать раздел на вашем HSM сервере и записать Label и PIN раздела.
  2. Следовать инструкциям поставщика вашего HSM для настройки HSM клиента, который будет взаимодействовать с HSM сервером.

Использование HSM вместе с Fabric CA

Вы можете настроить Fabric CA на использование HSM редактируя конфигурацию CA сервера так же, как бы вы редактировали конфигурацию пира или ordering-узла. Так как вы можете использовать Fabric CA для генерации ключей внутри HSM, процесс создания локальной директории MSP прямолинеен. Выполните следующие шаги:

  1. Настройте секцию bccsp конфигурационного файла сервера Fabric CA и укажите Label и PIN. При старте сервера Fabric CA генерируется приватный ключ и сохраняется в HSM. Если вам безразлично раскрытие сертификата подписи (signing certificate) вашего CA, вы можете пропустить этот шаг и только настроить HSM для пиров или orderer“ов.
  2. Используйте Fabric CA client, чтобы зарегистрировать (enroll) identity пиров или orderer“ов с вашим CA.
  3. Перед тем, как вы развернете пир или orderer с HSM, вам нужно записать приватный ключ узла в HSM, чтобы зарегистрировать identity узла. Отредактируйте секцию bccsp конфига Fabric CA client или используйте соответствующие переменные окружения для того, чтобы указать узлу на конфигурацию HSM. В конфиге Fabric CA client замените стандартную SW конфигурацию на PKCS11 конфигурацию и укажите значения вашего HSM:
bccsp:
  default: PKCS11
  pkcs11:
    Library: /etc/hyperledger/fabric/libsofthsm2.so
    Pin: "71811222"
    Label: fabric
    hash: SHA2
    security: 256
    Immutable: false

Тогда для каждого узла используйте Fabric CA client, чтобы сгенерировать MSP директорию узла. Вместо того, чтобы хранить приватный ключ в директории MSP keystore, команда enroll использует HSM узла для генерации и хранения приватного ключа. Директория keystore продолжает быть пустой.

  1. Чтобы настроить узел на использование HSM, таким же образом обновите секцию bccsp конфига узла на использование PKCS11 и укажите Label и PIN. Также обновите значение mspConfigPath (для пира) или LocalMSPDir` (для orderer“а), оно должно указывать на директорию MSP, сгенерированную при помощи Fabric CA client. Теперь, когда узел настроены на использование HSM, после запуска узел сможет подписывать и подтверждать транзакции с приватным ключом, защищенным HSM.

Использование HSM с собственным CA

Если вы используете собственно CA для развертывания компонентов Fabric, вы можете настроить HSM при помощи следующих шагов:

  1. Настроить ваш CA на взаимодействие с HSM с использованием PKCS11 и создать Label и PIN. Далее используйте ваш CA для генерации приватного ключа и сертификата подписи (signing certificate) для каждого узла.
  2. Используйте ваш CA для создания директории MSP на узле. Поместите сертификаты, сгенерированные шагом 1 внутрь директории signcerts. Вы можете оставить директорию keystore пустой.
  3. Чтобы настроить узел на использование HSM, таким же образом обновите секцию bccsp конфига узла на использование PKCS11 и укажите Label и PIN. Также обновите значение mspConfigPath (для пира) или LocalMSPDir` (для orderer“а), оно должно указывать на директорию MSP, сгенерированную при помощи Fabric CA client. Теперь, когда узел настроены на использование HSM, после запуска узел сможет подписывать и подтверждать транзакции с приватным ключом, защищенным HSM.