Я пытаюсь использовать поставщика HSM при создании CngKey в vb.net для выполнения ECDH.
«провайдер» установлен правильно (я могу делать другие вещи, например, генерировать ключ AES и использовать его).
Если я предварительно сгенерирую ключ с помощью собственных инструментов HSM, Exists() вернет true, но когда я попытаюсь его использовать, HSM ответит, что эта операция не поддерживается. Это может быть либо то, что он не поддерживается (однако, документы говорят, что это так), либо он не поддерживается через CngKey, потому что он делает что-то неожиданное, но .net (.Net изначально не поддерживается/нет поставщика .NET), ИЛИ я не сгенерировал подходящий ключ.
Чтобы проверить, является ли это проблемой ключевых метаданных (использование и т. д.), я пытаюсь использовать CngKey.Create для создания ключа с помощью поставщика:
Dim key As CngKey = Nothing
Dim keyExists As Boolean = CngKey.Exists(keyName, provider)
If Not keyExists Then
Dim keyCreationParameters = New CngKeyCreationParameters()
keyCreationParameters.Provider = provider
keyCreationParameters.ExportPolicy = CngExportPolicies.AllowExport
keyCreationParameters.KeyUsage = CngKeyUsages.KeyAgreement
Try
CngKey.Create(New CngAlgorithm("ECDiffieHellmanP521"), keyName, keyCreationParameters)
Catch ex As Exception
Button1.Text = ex.Message
Return
End Try
End If
' open the key (I can open the pre-generated key and get a key handle
' but then it fails later when I try to use it):
Using alice As New ECDiffieHellmanCng(serverKeyPair) ' serverKeyPair is the handle
выдает System.ArgumentException Используемые ключи ... должны иметь группу алгоритмов ECDiffieHellman
и журнал провайдера просто говорит, что группа алгоритмов пуста.
Предположения:
- Последний раз Querent работал в VB, когда это была Windows 3.1. Это... пошло дальше.
Так что, если вышеизложенное является абсолютным, это не то, как вы это делаете», покажите, не говорите, потому что я, вероятно, не пойму рассказ.