问题标签 [nitrokey]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pkcs#11 - 带有 pkcs11interop 的热门使用机制 CKM_ECDH1_DERIVE
我买了一个 NitroKey HSM,想用 EC 导出一个秘密。 以前的问题
为此,我想使用这些CKM_ECDH1_DERIVE
机制。此 HSM 支持,请参阅:
参考PKCS#11 规范,这必须考虑:
- 机构
CKM_ECDH1_DERIVE
必须与功能一起使用Derive
(页 188) - 该机制
CKM_ECDH1_DERIVE
需要CK_ECDH1_DERIVE_PARAMS
具有以下参数的参数(第 222 页):- kdf : 用于共享秘密值 (CKD) 的密钥派生函数
- sharedData : 双方共享的一些数据
- publicData : 对方EC公钥值
- 该函数
DeriveKey
需要这些参数:- 机制 CKM.CKM_ECDH1_DERIVE
- 对象句柄私钥
- 对象属性(第 338 页)
- CKA.CKA_CLASS -> CKO.CKO_SECRET_KEY
- CKA.CKA_KEY_TYPE -> CKK.CKK_GENERIC_SECRET
- 但是“但是,由于这些事实都隐含在机制中,因此无需指定其中任何一个”,因此这些可以为空吗?
问题
所以有了这些信息,我尝试实现一个方法。
但我得到这个错误:
Net.Pkcs11Interop.Common.Pkcs11Exception:方法 C_DeriveKey 返回 CKR_TEMPLATE_INCOMPLETE
在Session.DeriveKey
.
CKR_TEMPLATE_INCOMPLETE
(第 64 页)的解释:
如果提供的模板中的属性值以及任何默认属性值和由对象创建函数本身贡献给对象的任何属性值都不足以完全指定要创建的对象,则尝试应该失败并返回错误代码CKR_TEMPLATE_INCOMPLETE。
在这里(第 98 页)
CKR_TEMPLATE_INCOMPLETE:为创建对象指定的模板不完整,缺少一些必要的属性。有关详细信息,请参阅第 10.1 节。
但我使用了必要的属性:
- CKA.CKA_CLASS -> CKO.CKO_SECRET_KEY
- CKA.CKA_KEY_TYPE -> CKK.CKK_GENERIC_SECRET
想法?
代码
另请参阅要点(相同代码)https://gist.github.com/dhcgn/4ea235cdb20155ec5ea9dc9bbf3c9887
更新
现在使用更新的 ObjectAttributes 列表(感谢答案)我得到了异常Net.Pkcs11Interop.Common.Pkcs11Exception : Method C_DeriveKey returned CKR_DATA_LEN_RANGE
。
CKR_DATA_LEN_RANGE:加密操作的明文输入数据长度错误。根据操作的机制,这可能意味着明文数据太短、太长,或者不是某些特定块大小的倍数。此返回值的优先级高于 CKR_DATA_INVALID。
因为CKA.CKA_VALUE_LEN
我尝试了不同的值但没有成功:
我偶然发现了公钥,我不确定我是否以正确的方式提取公钥。因为它的长度为664 Bit
。
CKA.CKA_VALUE
( CKO.CKO_PUBLIC_KEY
) 664 Bit
:
pkcs15-tool
用( 864 Bit
)提取
pkcs15-tool
为什么和之间的公钥不同CKO.CKO_PUBLIC_KEY
?CkEcdh1DeriveParams
期望哪种格式publicData
?- 我是否
publicData
以正确的方式提取?或者什么是正确的方法? - 的值必须
CKA.CKA_VALUE_LEN
等于我的 EC (320 Bit
) 的长度吗?
pkcs#11 - 如何从 DER 编码的 EC_POINT 中获取 Qx 和 Qy
我在 nitro key hsm 上创建了一个 Brainpool EC,并希望将其用于 .NET Framework 的加密操作,例如System.Security.Cryptography.ECDiffieHellman
.
我用pkcs11-tool --list-objects
公钥提取,但只得到一个值,即 EC_POINT。
那么,如何获得该点的坐标呢?
DER 编码 EC_POINT
解码的 EC_POINT
这个 EC_POINT 是 DER 编码的,我用它来提取 EC_POINT 的真实值。
python - PKCS11_MODULE 文件路径
我正在使用 Nitrokey HSM 开发一个测试程序:
问题:pkcs11 库文件名可以是什么?我猜到opensc-hsm.so
了,并将 PKCS11_MODULE 定义到该路径,但没有成功。那么,要加载的 pkcs11 库的名称可以是什么?谢谢