Использование 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, вы должны были выполнить следующие шаги:
- Создать раздел на вашем HSM сервере и записать
Label
иPIN
раздела. - Следовать инструкциям поставщика вашего HSM для настройки HSM клиента, который будет взаимодействовать с HSM сервером.
Использование HSM вместе с Fabric CA¶
Вы можете настроить Fabric CA на использование HSM редактируя конфигурацию CA сервера так же, как бы вы редактировали конфигурацию пира или ordering-узла. Так как вы можете использовать Fabric CA для генерации ключей внутри HSM, процесс создания локальной директории MSP прямолинеен. Выполните следующие шаги:
- Настройте секцию
bccsp
конфигурационного файла сервера Fabric CA и укажитеLabel
иPIN
. При старте сервера Fabric CA генерируется приватный ключ и сохраняется в HSM. Если вам безразлично раскрытие сертификата подписи (signing certificate) вашего CA, вы можете пропустить этот шаг и только настроить HSM для пиров или orderer“ов. - Используйте Fabric CA client, чтобы зарегистрировать (enroll) identity пиров или orderer“ов с вашим CA.
- Перед тем, как вы развернете пир или 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
продолжает быть пустой.
- Чтобы настроить узел на использование HSM, таким же образом обновите секцию
bccsp
конфига узла на использование PKCS11 и укажитеLabel
иPIN
. Также обновите значениеmspConfigPath (для пира) или
LocalMSPDir` (для orderer“а), оно должно указывать на директорию MSP, сгенерированную при помощи Fabric CA client. Теперь, когда узел настроены на использование HSM, после запуска узел сможет подписывать и подтверждать транзакции с приватным ключом, защищенным HSM.
Использование HSM с собственным CA¶
Если вы используете собственно CA для развертывания компонентов Fabric, вы можете настроить HSM при помощи следующих шагов:
- Настроить ваш CA на взаимодействие с HSM с использованием PKCS11 и создать
Label
иPIN
. Далее используйте ваш CA для генерации приватного ключа и сертификата подписи (signing certificate) для каждого узла. - Используйте ваш CA для создания директории MSP на узле. Поместите сертификаты, сгенерированные шагом 1 внутрь директории
signcerts
. Вы можете оставить директориюkeystore
пустой. - Чтобы настроить узел на использование HSM, таким же образом обновите секцию
bccsp
конфига узла на использование PKCS11 и укажитеLabel
иPIN
. Также обновите значениеmspConfigPath (для пира) или
LocalMSPDir` (для orderer“а), оно должно указывать на директорию MSP, сгенерированную при помощи Fabric CA client. Теперь, когда узел настроены на использование HSM, после запуска узел сможет подписывать и подтверждать транзакции с приватным ключом, защищенным HSM.