如何使用 HSM 提供程序在 VB.net 中生成 ECDH 密钥

问题描述

在 vb.net 中生成 CngKey 时,我尝试使用 HSM 提供程序来执行 ECDH。

'provider' 设置正确(我可以做其他事情,即生成一个 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 时。它......继续前进。

因此,如果上述内容完全是“这不是你做的方式”,请展示,不要告诉,因为我可能无法理解。

解决方法

问题出在这一行:

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

我不知道这是 Windows 的东西,VB.net 的东西,还是提供程序的东西。

CngKey.Create(CngAlgorithm.ECDiffieHellmanP521,keyCreationParameters)

也许有人可以评论。