Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом документе описываются спецификации импорта ключей, защищенных HSM, из локальных HSM клиентов в Key Vault.
Сценарий
Клиент Azure Key Vault хочет безопасно передать ключ из локального модуля HSM, находящегося вне Azure, в модуль HSM, обслуживающий Azure Key Vault. Этот процесс называется "bring your own key" (BYOK).
К нему предъявляются следующие требования.
- Ключ для передачи никогда не существует за пределами HSM в виде обычного текста.
- За пределами HSM ключ для передачи всегда защищен ключом, удерживаемым в Azure Key Vault HSM.
Терминология
| Имя ключа | Тип ключа | Происхождение | Описание |
|---|---|---|---|
| Ключ обмена ключами (KEK) | RSA | Хранилище ключей Azure HSM | Пара ключей RSA с поддержкой HSM, созданная в Azure Key Vault |
| Упаковочный ключ | окт. | HSM от поставщика | Эфемерный ключ окта, созданный локальным устройством HSM |
| Целевой ключ | RSA, EC, oct (только управляемый HSM) | HSM от поставщика | Ключ для перемещения в Azure Key Vault HSM |
Key Exchange Key: ключ с поддержкой HSM, который создается в хранилище ключей, где импортируется ключ BYOK. Этот KEK должен иметь следующие свойства:
- Это ключ RSA-HSM (4096-разрядная, 3072-разрядная или 2048-разрядная версия).
- Он имеет фиксированный
key_ops(ТОЛЬКОimport), который можно использовать только во время BYOK. - Он должен находиться в том же хранилище, где импортируется целевой ключ.
Порядок действий пользователя
Чтобы выполнить передачу ключей, пользователь выполняет следующие действия.
- Создайте KEK.
- Извлечь открытый ключ KEK.
- Используйте средство BYOK, которое предоставлено поставщиком HSM, для импорта ключа шифрования ключей (KEK) в целевой HSM и последующего экспорта целевого ключа, защищенного KEK.
- Импортируйте защищенный целевой ключ в Azure Key Vault.
Клиенты используют средство BYOK и документацию, предоставляемую поставщиком HSM, для выполнения шага 3. Он создает структуру передачи ключей (файл .byok).
Ограничения на HSM
Существующие HSM (аппаратные модули безопасности) могут применять ограничения для ключей, которыми они управляют, в том числе:
- Возможно, потребуется настроить HSM, чтобы разрешить экспорт с использованием техники обертки ключей.
- Возможно, вам потребуется пометить целевой ключ как CKA_EXTRACTABLE для HSM, чтобы разрешить контролируемый экспорт.
- В некоторых случаях может потребоваться пометить ключ KEK и ключ-оболочку как CKA_TRUSTED, что позволяет использовать его для упаковки ключей в HSM.
Конфигурация исходного HSM обычно выходит за рамки этой спецификации. Майкрософт ожидает, что поставщик HSM создает документацию, сопровождающую его инструмент BYOK, чтобы включить любые такие шаги настройки.
Замечание
Вы можете выполнить несколько этих действий с помощью других интерфейсов, таких как Azure PowerShell и портал Azure. Эти действия также можно выполнить программным способом с помощью эквивалентных функций в пакете SDK Key Vault.
Создайте KEK
Используйте команду az keyvault key create, чтобы создать KEK с установленными операциями ключа на импорт. Обратите внимание на идентификатор kid ключа, возвращенный этой командой.
az keyvault key create --kty RSA-HSM --size 4096 --name KEKforBYOK --ops import --vault-name <vault-name>
Замечание
Службы поддерживают разные длины ключа шифрования (KEK). Azure SQL, например, поддерживает только длину ключей 2048-разрядная или 3072-разрядная. Ознакомьтесь с документацией вашего сервиса для получения подробной информации.
Получение открытого ключа KEK
Скачайте часть KEK открытого ключа и сохраните ее в PEM-файле.
az keyvault key download --name KEKforBYOK --vault-name <vault-name> --file KEKforBYOK.publickey.pem
Создание BLOB-объекта передачи ключей с помощью средства BYOK, предоставленного поставщиком HSM.
Используйте предоставленный поставщиком HSM инструмент BYOK, чтобы создать контейнер передачи ключей (хранящийся как файл .byok). Средство принимает открытый .pem ключ KEK в качестве файла в качестве одного из входных данных.
BLOB-объект передачи ключей
Майкрософт планирует использовать механизм CKM_RSA_AES_KEY_WRAP PKCS#11 для передачи целевого ключа в Azure Key Vault. Этот механизм создает единичный двоичный объект, и, что более важно, два HSM обрабатывают промежуточный ключ AES и гарантируют, что он является эфемерным. Этот механизм в настоящее время недоступен в некоторых HSM, но сочетание защиты целевого ключа с помощью CKM_AES_KEY_WRAP_PAD через ключ AES и защита самого ключа AES с использованием CKM_RSA_PKCS_OAEP создаёт эквивалентный объект.
Открытый текст целевого ключа зависит от его типа:
- Для ключа RSA закрытый ключ использует кодировку ASN.1 DER [RFC3447], заключенную в PKCS#8 [RFC5208].
- Для ключа EC закрытый ключ использует кодировку ASN.1 DER [RFC5915], заключенную в PKCS#8 [RFC5208].
- Для ключа октета ключ использует необработанные байты.
Процесс преобразует байты для ключа в незашифрованном виде с помощью механизма CKM_RSA_AES_KEY_WRAP:
- Процесс создает временный октетный ключ и шифрует его с помощью обёртки RSA и RSA-OAEP с SHA1.
- Процесс шифрует закодированный открытый текстовый ключ с помощью клавиши oct и оболочки ключей AES с заполнением.
- Процесс объединяет зашифрованный ключ oct и зашифрованный ключ открытого текста для создания окончательного шифртекстового блока.
Формат blob-объекта передачи использует компактную сериализацию JSON Web Encryption (RFC7516) в первую очередь как средство доставки необходимых метаданных в службу для правильной расшифровки.
Если вы используете CKM_RSA_AES_KEY_WRAP_PAD, сериализация JSON большого двоичного объекта передачи выполняется следующим образом:
{
"schema_version": "1.0.0",
"header":
{
"kid": "<kek-key-id>",
"alg": "dir",
"enc": "CKM_RSA_AES_KEY_WRAP"
},
"ciphertext":"BASE64URL(<ciphertext>)",
"generator": "BYOK tool name and version; source HSM name and firmware version"
}
-
kid= идентификатор ключа KEK. Для ключей Key Vault выглядит следующим образом:https://<vault-name>.vault.azure.net/keys/mykek/<key-version> -
alg= алгоритм. -
dir= прямой режим. Ссылкаkidнепосредственно защищает зашифрованный текст, который является точным представлением CKM_RSA_AES_KEY_WRAP. -
generator= информационное поле, которое указывает имя и версию инструмента BYOK, а также изначального производителя и модель HSM. Используйте эти сведения для устранения неполадок и поддержки.
Сохраните большой двоичный объект JSON в файле с расширением .byok, чтобы клиент Azure PowerShell или CLI правильно обрабатывал его при использовании команд Add-AzKeyVaultKey (PowerShell) или az keyvault key import (CLI).
Загрузка BLOB передачи ключа для импорта ключа HSM
Чтобы импортировать ключ, передайте файл BLOB-объекта передачи ключей (".byok") на онлайн рабочую станцию, а затем выполните команду az keyvault key import. Эта команда импортирует блоб как новый ключ на основе HSM в Key Vault.
Чтобы импортировать ключ RSA, используйте следующую команду:
az keyvault key import --vault-name <vault-name> --name <key-name> --byok-file KeyTransferPackage-<key-name>.byok --ops encrypt decrypt
Чтобы импортировать ключ EC, укажите тип ключа и имя кривой.
az keyvault key import --vault-name <vault-name> --name <key-name> --kty EC-HSM --curve-name "P-256" --byok-file KeyTransferPackage-<key-name>.byok --ops sign verify
При выполнении этой команды он отправляет запрос REST API следующим образом:
PUT https://<vault-name>.vault.azure.net/keys/<key-name>?api-version=7.6
Текст запроса при импорте ключа RSA:
{
"key": {
"kty": "RSA-HSM",
"key_ops": [
"decrypt",
"encrypt"
],
"key_hsm": "<base64-encoded-byok-blob>"
},
"attributes": {
"enabled": true
}
}
Текст запроса при импорте ключа EC:
{
"key": {
"kty": "EC-HSM",
"crv": "P-256",
"key_ops": [
"sign",
"verify"
],
"key_hsm": "<base64-encoded-byok-blob>"
},
"attributes": {
"enabled": true
}
}
Значением key_hsm является все содержимое файла KeyTransferPackage-.<key-name>byok, закодированного в формате Base64.
Ссылки
- руководство разработчика Key Vault
Дальнейшие шаги
- Пошаговые инструкции BYOK: Импорт HSM-защищённых ключей в Key Vault (BYOK)