我买了一个 NitroKey HSM,想用 EC 推导出一个秘密。 以前的问题
为此,我想使用这些CKM_ECDH1_DERIVE
机制。此 HSM 支持哪个,请参阅:
参考PKCS#11 规范,必须考虑:
CKM_ECDH1_DERIVE
必须与功能一起使用Derive
(页 188)CKM_ECDH1_DERIVE
需要CK_ECDH1_DERIVE_PARAMS
带有以下参数的参数(页 222):
DeriveKey
需要以下参数:
因此,根据这些信息,我尝试实现一种方法。
但我收到此错误:
Net.Pkcs11Interop.Common.Pkcs11Exception:方法 C_DeriveKey 返回 CKR_TEMPLATE_INCOMPLETE
在Session.DeriveKey
。
说明CKR_TEMPLATE_INCOMPLETE
(第 64 页):
如果提供的模板中的属性值,连同任何默认属性值和对象创建函数本身贡献给对象的任何属性值,都不足以完全指定要创建的对象,则尝试应该失败并显示错误代码CKR_TEMPLATE_INCOMPLETE。
和这里(第 98 页)
CKR_TEMPLATE_INCOMPLETE:为创建对象指定的模板不完整,缺少一些必要的属性。有关更多信息,请参阅第 10.1 节。
但我使用了必要的属性:
我在 nitro key hsm 上创建了一个 Brainpool EC,并希望将其用于 .NET Framework 的加密操作,例如System.Security.Cryptography.ECDiffieHellman
.
我用pkcs11-tool --list-objects
公钥提取但只得到一个值,即 EC_POINT。
那么,如何得到这个点的坐标呢?
Public Key Object; EC EC_POINT 320 bits
EC_POINT: 0451040defed7988b095679e5aca422382d949c2e7fd937646def25cf7eb5140d41f12d077ac615773952da53efad266c8642c6877b8b215d091ba687acafd3c33f35ffb5ca6aadaf248ef1a126cd55e0d0598
EC_PARAMS: 06092b2403030208010109
label: Brainpool #1
ID: 10
Usage: verify
Run Code Online (Sandbox Code Playgroud)
这个 EC_POINT 是 DER 编码的,我用它来提取EC_POINT的真实值。
040defed7988b095679e5aca422382d949c2e7fd937646def25cf7
eb5140d41f12d077ac615773952da53efad266c8642c6877b8b215
d091ba687acafd3c33f35ffb5ca6aadaf248ef1a126cd55e0d0598
Run Code Online (Sandbox Code Playgroud)