我买了一个 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 节。
但我使用了必要的属性:
软件(如Mozilla Firefox、Thunderbird)可以加载opensc模块(linux上为opensc-pkcs11.so,windows上为opensc-pkcs11.dll)并使用OpenSC支持的所有智能卡进行身份验证、签名和解密。我的问题是我们如何在 android 中做同样的事情(在哪里存储 opensc 模块,如何访问外部令牌等)。例如,应用程序如何使用 opensc 模块通过 nfc 和/或蓝牙接口访问智能卡令牌。
我不喜欢像寻找 android 那样闪烁我的 android。我请求任何建议或示例。提前致谢。
我正在使用 Python 的 pkcs11 包来访问存储在 Yubikey 5 上的 X.509 证书。使用 pkcs11 对象访问证书、公钥和私钥工作正常,签名和签名验证也是如此。然而,对于我的一生,我无法弄清楚为什么使用公钥加密不起作用。这是我的代码:
import pkcs11
from pkcs11 import Attribute, ObjectClass, KeyType, util
lib = pkcs11.lib('/usr/lib/x86_64-linux-gnu/pkcs11/onepin-opensc-pkcs11.so')
token = lib.get_token(token_label='PIV Card Holder pin (PIV_II)'
session = token.open(user_pin=pin)
# Getting a private and a public key as pkcs11 Object
private = next(session.get_objects({
Attribute.CLASS: ObjectClass.PRIVATE_KEY,
}))
public = next(session.get_objects({
Attribute.CLASS: ObjectClass.PUBLIC_KEY,
}))
data = 'Hello, world!'
sig = private.sign(data) # Works!
sig_verif = public.verify(data, sig) # Works!
print("Signature is valid? "+str(sig_verif)) # True
# So …
Run Code Online (Sandbox Code Playgroud) 朋友们,我有一张智能卡,我想整合OpenSSL.计划通过OpenSSL中的"ENGINE"系统执行此操作.但是,我有一个理解的问题.有这样的事情这一事实engine_pkcs11
,opensc
,libp11
,pkcs11-helper
.有谁可以解释这种关系?首先是什么和什么编译?
写一个带有外部PKCS#11函数的库来将它连接到openssl是否足够?我必须获取库的源代码engine_pkcs11
并修改它以适合我的卡?我需要这个opensc
,libp11
,pkcs11-helper
?那么,为什么需要这些库呢?
另外,我应该注意到智能卡不支持RSA算法,它将是一个不同的算法!
真的很期待你的答案!