问题标签 [pkcs11interop]

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.

0 投票
2 回答
333 浏览

c# - 找到对象后如何更新特定属性。收到错误方法 C_SetAttributeValue 返回 CKR_ATTRIBUTE_READ_ONLY

我试图在找到对象后更新属性。尝试过不同的案例。

我的创建代码:

我的修改代码是:

0 投票
2 回答
2222 浏览

c# - 如何修复方法 C_GenerateKeyPair 返回 CKR_FUNCTION_FAILED

当我生成公钥/私钥时,我正在尝试使用 Pkcs11Interop 库从 HSM(Safenet inc)获取我自己的证书,但出现错误“方法 C_GenerateKeyPair 返回 CKR_FUNCTION_FAILED”

我的代码

这是一些日志

0x00002478 : 0x00001af8 : Attribute 7
0x00002478 : 0x00001af8 : Attribute: 265 (CKA_SIGN_RECOVER)
0x00002478 : 0x00001af8 : pValue: 0597E850
0x00002478 : 0x00001af8 : ulValueLen: 1
0x00002478 : 0x00001af8 : *pValue: HEX(01)
0x00002478 : 0x00001af8 : Attribute 8
0x00002478 : 0x00001af8 :属性:263(CKA_UNWRAP)
0x00002478:0x00001af8:pValue:0597E830
0x00002478:0x00001af8:ulValueLen:1
0x00002478:0x00001af8: pValue:HEX(01)
0x000:0x008:
End attribute template *
0x00002478 : 0x00001af8 : phPublicKey: 0643EA74
0x00002478 : 0x00001af8 : *phPublicKey: 0
0x00002478 : 0x00001af8 : phPrivateKey: 0643EA70
0x00002478 : 0x00001af8 : *phPrivateKey: 0
0x00002478 : 0x00001af8 : Returning 6 (CKR_FUNCTION_FAILED)
0x00002478 : 0x00001af8 : *** ****************************** 2019-03-22 16:37:32 *
0x00002478:0x00001af8:调用 C_CloseSession
0x00002478:0x00001af8:输入
0x00002478 : 0x00001af8 : hSession: 2490369
0x00002478 : 0x00001af8 : 返回 0 (CKR_OK)
0x00002478 : 0x00001af8 : ****************************** 2019 -03-22 16:37:32 *

0x00002478:0x00001af8:调用 C_Finalize
0x00002478:0x00001af8:输入
0x00002478:0x00001af8:预保留:00000000
0x00002478:0x00001af8:返回 0 (CKR_OK)

0 投票
1 回答
677 浏览

pkcs#11 - PKCS11 将私有 RSA 密钥解包到 eToken HSM

我正在尝试通过 PKCS#11 互操作将 RSA 私钥传输到我的 HSM(SafeNet eToken),然后在 HSM 上解包。

这是我的代码(更新):

但它不起作用 - 失败Net.Pkcs11Interop.Common.Pkcs11Exception: Method C_UnwrapKey returned CKR_TEMPLATE_INCONSISTENT

(更新)现在它导致 CKR_WRAPPED_KEY_INVALID。但是,如果我使用 SafeNet 手动导入相同的 PFX 文件,则不会发生错误 - 一切似乎都很好。

有任何想法吗?也许有些参数我用错了?

0 投票
1 回答
704 浏览

.net-core - DotNet Core:如何跨平台客户端证书 TLS 身份验证?

我正在尝试开发一个跨平台应用程序(windows/mac os x),该应用程序需要签署 XML 文件并使用 ClientCertificate 身份验证在服务器上发出 Web 请求......

主要限制是我需要在智能卡上使用证书......

我目前正在使用 dotnet core 2.1。

首先,我确实尝试使用 dotnet core X509Store,但在 MacOs 上我无论如何都无法访问 PrivateKey 对象(XML 签名所必需的),然后我放弃了这条线索。

然后我使用 pkcs11interop 和特定于供应商的 dll 来访问智能卡,它适用于 XML 签名(我将 pkcs11interop 调用包装在 RSA 对象中,然后我将此对象用作 SignedXml 中的 SigningKey),但它不适用于 ClientCertificate联系。

通常我使用这种方法连接到服务器(dotnet framework 4.6.1,仅限 windows):

并生成证书:

当我尝试连接我的经典方法时,我有几个例外:

我认为在 TLS 握手期间所需的私钥进行的加密操作丢失了,它只是失败了......

我确实尝试在私钥属性中添加用于 XML 签名的 RSA 对象,但使用 dotnet core 它以 PlatformNotSupportedException 结尾...

我想知道是否可以在不使用第三方库的情况下做到这一点......

注意:法语错误消息“消息意外或格式不正确”的翻译。

谢谢。

(编辑:更好的格式)

0 投票
1 回答
720 浏览

c# - System.IO.FileLoadException:无法加载文件或程序集'Pkcs11Interop,版本 = 3.3.0.0

我想开发可以读取令牌并执行 PDF 签名的应用程序。仅供参考,我成功签署了 pdf 文档,但是在我将 Pkcs11Interop 版本从 3.3.0.0 更新到 4.1.1.0 之后,签名变成了失败。我尝试启用 AutoGenerateBindingRedirects 但我仍然无法签署 PDF

期望 PDF 已成功签名,但我收到此错误

System.IO.FileLoadException:无法加载文件或程序集“Pkcs11Interop,Version=3.3.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。(来自 HRESULT 的异常:0x80131040)

截图错误

我的理解是,这个应用程序试图调用 Pkcs11interop version=3.3.0.0

然而,它已经在 Nuget Repo 中提到了它的依赖关系。所以应该没问题吧?

Pkcs11Interop.PDF

我必须做些什么来解决这个依赖错误?

0 投票
1 回答
142 浏览

pkcs#11 - 有没有办法在 pkcs11Interop 创建的签名中获取签名创建日期?

我使用X509Chain.Build(X509Certificate2)方法验证证书。如果证书有效,我使用Pkcs11Interop库签署数据。有兴趣的用户可以下载此签名自行验证。但他们也应该能够检查证书的有效性。

我现在正在编写一些测试工具来获取所有这些文件并检查其有效性。但为了验证证书,我需要一个签名创建日期。 是否可以从签名中获取此日期?

现在我将签名创建日期存储在表中的单独字段中。但我真的认为签名包含创建日期。至少我希望如此。

我正在验证证书,然后如果可以,我使用下一个代码来签署一些数据。

然后我将此签名与签名数据一起存储在数据库中

在我的测试签名检查器应用程序中,我使用 X509Chain 来检查证书是否有效。

0 投票
1 回答
98 浏览

pkcs#11 - 为什么sign方法只返回四个字节?

我正在尝试使用 pkcs11interop 实现 pkcs 11 标准

我有一些 des2 键(16 字节),我想使用符号方法

我的问题是 sign 方法只返回四个字节。但我想要 8 字节符号。

我应该怎么办?

PS 1:四字节结果是正确的。这是我预期结果的第一个字节。

PS 2:我知道签名方法与加密方法相同。所以我的一个解决方案是加密输入并获得前 8 个字节的结果(这就是我已经在做的)。但我对此感到难过,我认为最好使用 Sign 方法本身。

PS 3:有一个“ICkMacGeneralParams”接口可以用来选择MAC大小。但似乎根本没有影响!我将它设置为 UInt32.MaxValue 和 0,结果没有什么不同。

PS 4:我知道 Sign 方法通常与公钥和私钥一起使用。但我需要一键使用

0 投票
0 回答
73 浏览

sha1 - 连接数据和基础无法按预期工作

我在 HSM 中有一把钥匙

我想从中派生另一个密钥并将其用于 SHA1 HMAC 一些数据

我的问题是该CKM_CONCATENATE_DATA_AND_BASE机制无法按预期工作。

我认为它的工作原理如下:

如果我的密钥(BASE)“11 22 33 44 55 66 77 88”并且我想在它的开头添加“00” (DATA)我想新的密钥是“00 11 22 33 44 55 66 77 88”但生成(并保存)键是“00 11 22 33 44 55 66 77”

派生密钥长度不会改变,原始密钥末尾的一个字节会下降!

我应该怎么办?

我尝试添加ObjectAttribute VALUE_LEN. 但派生密钥长度不会改变。

这是我使用的结果System.Security.Cryptography.HMACSHA1

我的结果使用PKCS1122334455667788112233445566778899”作为original key

更新 1:

Derive with Concatenate 机制后的密钥大小始终与原始密钥相同。我尝试使用任何大小的数据添加数据 AFTER 键(使用 CKM_CONCATENATE_BASE_AND_DATA),但什么也没发生。派生密钥和原始密钥相同。因为 HSM 将 n 字节添加到原始密钥并再次删除(因此密钥大小保持不变,我不想这样做)

如果有人有使用 CKM_CONCATENATE_BASE_AND_DATA 派生密钥的示例,请告诉我

0 投票
1 回答
733 浏览

cryptography - 如何使用通过 Pkcs11Interop 或 CNG 由用户密码保护的 HSM 上存储的私钥?

概括

使用 CNG 或 Pkcs11Interop 或任何其他替代方法登录 HSM,搜索私钥,然后将其传递给第 3 方应用程序以供使用。密钥无法从 HSM 中提取或存储在内存中。

第三方应用程序需要使用存储在硬件安全模块 (HSM) 上的私钥。我研究了 CNG 和 Pkcs11Interop 两种方法。

代码需要完成以下工作:

1-验证并与 HSM 建立会话

2-搜索密钥

3-使用 RSACryptoServiceProvider 或其他方法将私钥传递给第 3 方。

重要提示:无法从 HSM 中提取或直接访问密钥(出于安全目的而设计)。

下面是我为 CNG 和 PKCS11Interop 准备的两个示例

问题:

1-CNG 我正在努力进行身份验证(如果可能的话)

2-PKCS11Interop 我已经能够登录,搜索密钥但难以使用密钥。

很高兴使用这两种方法,我欢迎任何帮助、替代解决方案或建议。

CNG 代码:此代码在 HSM 上禁用身份验证时有效

:有没有办法使用密码进行身份验证,在使用密钥之前打开会话?

PKCS11Interop,我设法进行身份验证,搜索密钥并将其分配给句柄..

:如何将私钥传递给标准的 .Net Framework 类型的 AsymmetricAlgorithm?同时记住它不可出口?它可以传递给 RSACryptoServiceProvider 吗?然后进入非对称算法?

0 投票
1 回答
298 浏览

pkcs#11 - 对称密钥的解包抛出 Pkcs11Exception / CKR_GENERAL_ERROR

我正在尝试将Wrap / Unwrap 示例从 RSA 密钥对转换为单个 AES 密钥:

但是该行IObjectHandle unwrappedKey = session.UnwrapKey(mechanism, secretKey, wrappedKey, objectAttributes);总是抛出Net.Pkcs11Interop.Common.Pkcs11Exception: 'Method C_UnwrapKey returned CKR_GENERAL_ERROR'异常。

作为“HSM”,我在 Windows 上使用 SoftHSM2

我究竟做错了什么?

披露:我也在GitHub中交叉发布这个问题