Как сгенерировать ключ ECDH в VB.net с поставщиком HSM

Я пытаюсь использовать поставщика 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

и журнал провайдера просто говорит, что группа алгоритмов пуста.

Предположения:

  1. Последний раз Querent работал в VB, когда это была Windows 3.1. Это... пошло дальше.

Так что, если вышеизложенное является абсолютным, это не то, как вы это делаете», покажите, не говорите, потому что я, вероятно, не пойму рассказ.


person rip...    schedule 10.02.2021    source источник


Ответы (1)


Проблема именно в этой строке:

CngKey.Create(New CngAlgorithm("ECDiffieHellmanP521"), keyName, keyCreationParameters)

Я не знаю, связано ли это с Windows, с VB.net или с провайдером.

CngKey.Create(CngAlgorithm.ECDiffieHellmanP521, keyName, keyCreationParameters)

Может кто прокомментирует.

person rip...    schedule 10.02.2021