Экспорт / импорт пары ключей RSA с использованием библиотеки оболочки PKCS11interop C# из Thales nShield HSM?
Я сгенерировал пару открытых и закрытых ключей RSA в HSM с помощью API генерации ключа PKCS11Interop. Я хочу экспортировать пару ключей. Я использовал Findobject API для получения ключей, API возвращает ObjectHandle, при чтении атрибутов с использованием API GetAttributeValue я не могу прочитать значение ключа. И когда для атрибута ключа установлено значение CKA_EXTRACTABLE, равное true, я не могу сгенерировать ключ вообще.
Также мне нужно импортировать внешнюю пару ключей в HSM.
Любая помощь высоко ценится.
3 ответа
То, что вы пытаетесь сделать, считается insecure
в мире HSM. Это побеждает цель иметь HSM.
Но можно ли это сделать? Да. При условии, что поставщик HSM должен его поддержать.
Поставщик HSM решает, можно ли извлечь ключи, сгенерированные на HSM, или можно импортировать какой-либо Ключ, сгенерированный любым программным обеспечением (за пределами HSM) в аппаратное обеспечение. PKCS#11 - это просто интерфейс, через который вы взаимодействуете с HSM. Если HSM не поддерживает операцию, он генерирует исключение, которое в конечном итоге выдается API PKCS11.
Это то, что происходит в вашем случае для операций извлечения и импорта. Модуль HSM, на котором вы пытаетесь выполнить эти операции, может не поддерживать его. Поэтому вам необходимо уточнить у поставщика HSM, как вы можете выполнять эти операции с их продуктом.
PS: Thales nShield должен / может иметь файл конфигурации, через который вы можете запускать HSM в небезопасном режиме.
Примечание: извлечение Key/Key Pair
сгенерированный на HSM (или) импортирующий любую пару ключ / ключ, сгенерированную за пределами HSM, не считается небезопасной операцией в реальном мире.
Я думаю, что вы используете Safenet HSM, потому что Thales HSM не имеет таких функций, как GetAttributeValue, ObjectHandle и т. Д.
CKA_EXTRACTABLE означает, что вы можете извлечь свой ключ под другим ключом, и это не значит, что вы можете прочитать данные ключа. Должно быть совершенно небезопасно, если вы можете получить ключевые данные, просто используя дескриптор ключа.
Чтение ключевых данных с использованием ObjectHandle невозможно даже в Функциональном модуле (FM). FM является проприетарным программным обеспечением, которое работает только в самом Safenet HSM, это встроенное программное обеспечение, которое работает на оборудовании HSM. Вы можете использовать ObjectHandle для вызова определенных функций HSM, таких как шифрование, дешифрование в FM. Извлечение ключа возможно только под другим ключом.
Вы можете импортировать свои ключи с помощью вызовов функций Safenet HSM.
Закрытый ключ RSA можно экспортировать с правильными настройками атрибутов (конечно, этот сценарий должен поддерживаться неуправляемой библиотекой PKCS#11, предоставляемой поставщиком HSM), но вам необходимо прочитать несколько атрибутов (см. Главу 12.1.3 в PKCS#11 v2)..20 спецификация), чтобы извлечь его части, а затем самостоятельно создать структуру ключа ASN.1.
Конкретный тип структуры ASN.1, который вам нужен, зависит от типа ключа, который вы используете (в вашем случае это RSA) и от возможностей целевой системы, которая будет использовать ключи, т.е. приложения шифрования обычно используют другие форматы, чем агенты электронной почты и т. Д. Я считаю, что вы можете начать с RSAPrivateKey
структура определена в PKCS # 1.