0

在 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

throws System.ArgumentException "使用的键......必须有一个 ECDiffieHellman 算法组"

并且提供者日志只是说“算法组”是空的。

假设:

  1. Querent 上次在 VB 中工作时是 Windows 3.1。它……继续前进。

因此,如果上述内容完全是“这不是你这样做的方式”,请展示,不要说出来,因为我可能不会明白这个说法。

4

1 回答 1

0

问题出在这一行:

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

我不知道这是 Windows 的事情、VB.net 的事情还是 Provider 的事情。

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

也许有人可以发表评论。

于 2021-02-10T18:21:12.687 回答