标签: pkcs#11

HSM:打开与 HSM 的连接时出错

接收CKR_GENERAL_ERROR应用程序尝试打开与 H/W HSM 的连接的时间。

详细的错误是:

50004-Crypto API could not be open.
Caused by: xxx.xxx.xxx.cryptoapi.CryptoApiSysException: Error opening session!!
Caused by: iaik.pkcs.pkcs11.wrapper.PKCS11Exception: CKR_GENERAL_ERROR
        at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.C_Initialize(Native Method) ~[pkcs11Wrapper-1.2.18.jar:1.2.18]
        at iaik.pkcs.pkcs11.Module.initialize(Module.java:307) ~[pkcs11Wrapper-1.2.18.jar:1.2.18]
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这个错误的原因是什么?该应用程序可与软件 HSM 配合使用。

硬件 HSM 详细信息:

  • ProtectToolkit C 密钥管理实用程序:4.2.0(甚至尝试使用 4.3.0)
  • 制造商 : Eracom
  • 硬件版本:66.00
  • 固件版本:2.02

pkcs#11 hsm

6
推荐指数
1
解决办法
3356
查看次数

如何使用 pkcs11-tool 创建插槽?

我正在尝试在我的应用程序中使用 pkcs11 来访问智能卡。这是“list-slots”命令的输出 -

root@penguin:~/src/tools$ pkcs11-tool -L
Available slots:
Slot 0 (0xffffffffffffffff): Virtual hotplug slot
  (empty)
Run Code Online (Sandbox Code Playgroud)

我有 2 个问题

  1. 我如何模拟一张假卡,以便插槽 0 中有一个我可以访问的令牌/设备。

  2. 我可以创建额外的插槽并向其中添加令牌/设备吗?

如果没有,我该怎么做才能将令牌/设备添加到可用的插槽 0 中?

cryptography pkcs#11

6
推荐指数
1
解决办法
9859
查看次数

PKCS#11。在硬件中执行 Ecryption/Decryption 的可能性

干杯。这是我关于加密堆栈交换的问题的副本。

我正在通过PKCS#11 C/Python 接口处理HSM。我想知道是否可以在硬件中做一些/ 。通过说“在硬件中”,我的意思是加密/解密而不将结果暴露给调用者空间。这主要是关于解密,因为我想调用并将结果作为任意数据保留在 HSM 中,以便稍后对该数据进行一些其他转换,并说在其他一些密钥上重新加密它。先感谢您。C_EncryptC_DecryptC_Decrypt

hardware encryption cryptography pkcs#11

6
推荐指数
1
解决办法
390
查看次数

在android中打开sc

软件(如Mozilla Firefox、Thunderbird)可以加载opensc模块(linux上为opensc-pkcs11.so,windows上为opensc-pkcs11.dll)并使用OpenSC支持的所有智能卡进行身份验证、签名和解密。我的问题是我们如何在 android 中做同样的事情(在哪里存储 opensc 模块,如何访问外部令牌等)。例如,应用程序如何使用 opensc 模块通过 nfc 和/或蓝牙接口访问智能卡令牌。

我不喜欢像寻找 android 那样闪烁我的 android。我请求任何建议或示例。提前致谢。

android smartcard pkcs#11 android-bluetooth opensc

5
推荐指数
0
解决办法
1392
查看次数

与 pkcs11interop 一起使用的热门机制 CKM_ECDH1_DERIVE

我买了一个 NitroKey HSM,想用 EC 推导出一个秘密。 以前的问题

为此,我想使用这些CKM_ECDH1_DERIVE机制。此 HSM 支持哪个,请参阅:

参考PKCS#11 规范,必须考虑:

  1. 该机制CKM_ECDH1_DERIVE必须与功能一起使用Derive(页 188)
  2. 该机制CKM_ECDH1_DERIVE需要CK_ECDH1_DERIVE_PARAMS带有以下参数的参数(页 222):
    1. kdf:用于共享秘密值 (CKD) 的密钥派生函数
    2. sharedData : 双方共享的一些数据
    3. publicData : 对方的EC公钥值
  3. 该函数DeriveKey需要以下参数:
    1. 机制 CKM.CKM_ECDH1_DERIVE
    2. 对象句柄私钥
    3. 对象属性 (页 338)
      1. CKA.CKA_CLASS -> CKO.CKO_SECRET_KEY
      2. CKA.CKA_KEY_TYPE -> CKK.CKK_GENERIC_SECRET
      3. 但是“但是,由于这些事实都隐含在机制中,因此无需指定任何一个”,所以这些可以为空?

问题

因此,根据这些信息,我尝试实现一种方法。

但我收到此错误:

Net.Pkcs11Interop.Common.Pkcs11Exception:方法 C_DeriveKey 返回 CKR_TEMPLATE_INCOMPLETE

Session.DeriveKey

说明CKR_TEMPLATE_INCOMPLETE(第 64 页):

如果提供的模板中的属性值,连同任何默认属性值和对象创建函数本身贡献给对象的任何属性值,都不足以完全指定要创建的对象,则尝试应该失败并显示错误代码CKR_TEMPLATE_INCOMPLETE。

和这里(第 98 页)

CKR_TEMPLATE_INCOMPLETE:为创建对象指定的模板不完整,缺少一些必要的属性。有关更多信息,请参阅第 10.1 节。

但我使用了必要的属性:

  1. CKA.CKA_CLASS -> CKO.CKO_SECRET_KEY
  2. CKA.CKA_KEY_TYPE …

elliptic-curve pkcs#11 opensc nitrokey pkcs11interop

5
推荐指数
1
解决办法
1594
查看次数

使用来自 Thales nShield HSM 的 PKCS11interop c# 包装库导出/导入 RSA 密钥对?

我使用 PKCS11Interop 生成密钥 API 在 HSM 中生成了一个 RSA 公私密钥对。我想导出密钥对。我使用 Findobject API 来获取密钥,该 API 返回一个 ObjectHandle ,而使用 GetAttributeValue API 读取属性时,我无法读取密钥的值。当我将密钥的属性设置为 CKA_EXTRACTABLE 为 true 时,我无法完全生成密钥。

我还需要在 HSM 中导入外部提供的密钥对。

任何帮助都受到高度赞赏。

c# cryptography pkcs#11 hsm pkcs11interop

5
推荐指数
1
解决办法
2685
查看次数

使用 keytool 找不到 SunPKCS11 提供程序

我正在使用 java 9 运行以下命令:

keytool -keystore NONE -storetype PKCS11 -providerClass
     sun.security.pkcs11.SunPKCS11 -providerArg pkcs11conf -list
Run Code Online (Sandbox Code Playgroud)

并得到流动的错误:

keytool 错误:java.lang.Exception:未找到提供程序“sun.security.pkcs11.SunPKCS11”

在 Java 8 中它可以工作。

如何将 keytool 与 SunPKCS11 提供程序一起使用?

java keytool pkcs#11 java-9 java-security

5
推荐指数
1
解决办法
6803
查看次数

错误:在 Tomcat 中实施 SSL 期间,别名 [null] 无法识别密钥条目

我第一次尝试在 tomcat 8 中实现 SSL。

我有 .pem 文件形式的第三方签名 X.509 证书。

但是配置完成后,当我尝试启动 tomcat 时,出现以下错误:

2017 年 11 月 22 日 18:48:01.735 信息 [主要] org.apache.coyote.AbstractProtocol.init 初始化 ProtocolHandler ["https-jsse-nio-8443"] 2017 年 11 月 22 日 18:48:01.897 严重 [主要] org.apache.coyote.AbstractProtocol.init 无法初始化与 ProtocolHandler ["https-jsse-nio-8443"] java.lang.IllegalArgumentException 关联的端点:java.io.IOException:别名 [null] 不标识密钥条目 于...

以下是我遵循的步骤:

  1. 将certificate.pem 重命名为certificate.p7b。
  2. 应用以下命令将证书导入密钥库:

D:\keytest2>keytool -import -alias tomcat -trustcacerts -文件证书.p7b -keystore keystore.kdb

输入密钥库密码:test
重新输入新密码:test

...
...
证书已添加到密钥库

  1. 检查导入的证书:

D:\keytest2>keytool -list -v -keystore keystore.kd

这给了我以下输出:

密钥库类型:JKS 密钥库提供商:SUN

您的密钥库包含 1 个条目

别名:tomcat 创建日期:2017 年 11 月 22 日 …

java ssl tomcat pkcs#11 x509

5
推荐指数
1
解决办法
2万
查看次数

如何通过模板获取 PKCS11 公钥

我有一个 GO 应用程序,它通过软件令牌中的 opencryptoki (pkcs11) 将它的证书存储到 HSM。但这不是一个围棋问题,我认为更像是一个通用的 pkcs11 问题。

我像这样设置我的证书和私钥:

    certTemplate := []*pkcs11.Attribute{
        pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_CERTIFICATE),
        pkcs11.NewAttribute(pkcs11.CKA_CERTIFICATE_TYPE, pkcs11.CKC_X_509),
        pkcs11.NewAttribute(pkcs11.CKA_TOKEN, true),
        pkcs11.NewAttribute(pkcs11.CKA_VALUE, certBytes),
        pkcs11.NewAttribute(pkcs11.CKA_SUBJECT, template.SubjectKeyId),
        pkcs11.NewAttribute(pkcs11.CKA_ID, pkcs11KeyID),
    }

    privateKeyTemplate := []*pkcs11.Attribute{
        pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_PRIVATE_KEY),
        pkcs11.NewAttribute(pkcs11.CKA_KEY_TYPE, pkcs11.CKK_ECDSA),
        pkcs11.NewAttribute(pkcs11.CKA_TOKEN, true), 
        pkcs11.NewAttribute(pkcs11.CKA_ID, pkcs11KeyID),
        pkcs11.NewAttribute(pkcs11.CKA_EC_PARAMS, []byte{0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07}),
        pkcs11.NewAttribute(pkcs11.CKA_VALUE, ecdsaPrivKeyD),
    }

ctx.CreateObject(session, certTemplate)
ctx.CreateObject(session, privateKeyTemplate)
Run Code Online (Sandbox Code Playgroud)

这完美地工作。我也可以通过以下方式获得证书

findTemplate := []*pkcs11.Attribute{
    pkcs11.NewAttribute(pkcs11.CKA_TOKEN, true),
    pkcs11.NewAttribute(pkcs11.CKA_CLASS, pkcs11.CKO_CERTIFICATE),
    pkcs11.NewAttribute(pkcs11.CKA_CERTIFICATE_TYPE, pkcs11.CKC_X_509),
}

ctx.FindObjectsInit(session, findTemplate); 
objs, b, err := ctx.FindObjects(session, numSlots)
Run Code Online (Sandbox Code Playgroud)

但正如我所料,我无法获得我的公钥

findTemplate := []*pkcs11.Attribute{
        pkcs11.NewAttribute(pkcs11.CKA_TOKEN, true), …
Run Code Online (Sandbox Code Playgroud)

cryptography go elliptic-curve pkcs#11 hsm

5
推荐指数
1
解决办法
1553
查看次数

通过 NFC 访问 Yubikey API

设备与环境

使用的安全元件(当前):Yubikey 5 NFC

(当前)使用的操作系统:Linux(未来目标将是Win和Android)

使用的读卡器:ACS ACR122U、REINER SCT cyberJack RFID、SCM SCL011

目标

通过 NFC 连接到 Yubikey 并实现/运行以下方法:

  • 创建密钥对
  • 导出公钥
  • 符号
  • 加密
  • 解密

当前状态

基于 Yubico 的 PKCS#11 包装器库,我实现了上面的 5 个方法。通过USB连接 Yubikey,它们工作得很好。

问题

1) 文档/支持

我在 Yubico 的网站上找不到任何有关通过 NFC 的 API 的相关文档。似乎没有邮件列表,但有一个提示:

询问技术问题:对于技术问题,请尝试 Stack Exchange 网站。Stack Exchange 是一个问答网站网络,供开发人员学习和分享他们的知识,其中包括 Stack Overflow。

我在这里。;-)

根据 Alexander 的更新(谢谢):一些来源由 Yubico 在github.com/Yubico上发布

2) CLI 工具错误

Yubikey 由pcsc_scan上述每个读者展示。

但使用常见工具(如gp、 )时opensc-tool,大多数情况pkcs11-tool下会在尝试使用常见 APDU 访问时显示pkcs15-tool …

linux pkcs#11 hardware-security-module yubico yubikey

5
推荐指数
1
解决办法
651
查看次数