多线程签名生成C#

2023-12-13

我正在使用符合 PKCS11 标准的加密设备来保护我的私钥。加密设备每秒能够生成 500 个 RSA-2048 位签名。我用 C#.NET 编写了一个与 PKCS11Interop Wrapper 交互的应用程序。这是我的代码:

#region Initialization 
Pkcs11 pkcs11 = new Pkcs11(pkcsLibraryPath, true);

Slot slot = pkcs11.GetSlotList(true)[slotIndex]; 

Session session = slot.OpenSession(false); 

session.Login(CKU.CKU_USER, hsmPIN); 

List<ObjectAttribute> searchObject = new List<ObjectAttribute>(2);

searchObject.Add(new ObjectAttribute(CKA.CKA_CLASS,(uint)CKO.CKO_PRIVATE_KEY));

searchObject.Add(new ObjectAttribute(CKA.CKA_LABEL, keyLabelName));

ObjectHandle privateKeyHandle = session.FindAllObjects(searchObject)[0];

byte[] dataToBeSigned = new byte[500];

byte[] signature = new byte[dataToBeSigned.Length];
#endregion Initialization 

#region SEQUENTIAL Signing Loop 
for(int i = 0; i<500;i++)
{

signature[i] = session.Sign(new Mechanism(CKM.CKM_SHA256_RSA_PKCS_PSS) , privateKeyHandle , dataToBeSigned[i]);

}
#endregion SEQUENTIAL Signing Loop 

#region UNMANAGED Parallel Loop 
Parallel.For(0, dataToBeSigned.Length, index =>
{

signature[index] = session.Sign(new Mechanism(CKM.CKM_SHA256_RSA_PKCS_PSS) , privateKeyHandle , dataToBeSigned[index]);

});
#endregion UNMANAGED Parallel Loop 

#region MANAGED Parallel Loop  
Parallel.For(0, dataToBeSigned.Length, index =>
{

lock(session)
{

signature[index] = session.Sign(new Mechanism(CKM.CKM_SHA256_RSA_PKCS_PSS) , privateKeyHandle , dataToBeSigned[index]);
}

});
#endregion MANAGED Parallel Loop  

干得好!!

  1. 使用顺序签名循环区域,我只能实现 250-280 次签名,但永远无法达到我的加密 OEM 指定的 500 次签名的速度。至少我每秒需要440~480个签名。我怎样才能使用顺序'来实现这一点for' loop?

  2. 为什么我的 UNMANAGED Parallel 循环总是抛出异常?即使我处理了这些异常,40% 的签名也会失败(session.Sign() 函数返回 null)。为什么会这样呢?

  3. 使用“MANAGED Parallel Loop”代码,我可以达到 280 的最大速度,就像我使用顺序签名循环一样。为什么我的 MANAGED Parallel 循环很慢?难道是因为‘lock'?如果我删除lock,它变成非托管并行循环。我该如何处理这个问题?

  4. 如果您觉得我的多线程编码(以及整个 PKCS11 编程和操作)是错误的,请建议我一些方法来实现最大速度。

  5. 如果您觉得 PCKS11Interop Wrapper 可能存在问题,导致我无法达到速度,请建议其他一些包装器。我使用了 NCryptoki、Pkcs11.Net Wrappers,但无法达到最大速度。

  6. 我 100% 确信我的 PKCS11 兼容设备能够生成 500 个签名。我与我的 OEM 确认了这一点。只是,当我通过编程方式(C# 或 Java)操作设备时,速度会下降。

以上六点,请论坛专家予以澄清。

非常感谢。

Karthick


您需要创建新的Session对于每个签名操作。

请阅读“第 6 章 - 概述” of PKCS#11 v2.20规格。那里解释了 PKCS#11 API 的所有基本概念(包括会话提供的线程/操作隔离)。

完成本必读内容后,您可以查看Pkcs11RsaSignature班级在Pkcs11Interop.PDF工作代码示例项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程签名生成C# 的相关文章

  • 工作笔记:TrueCrypt编译记录

    工作笔记 TrueCrypt编译记录 TrueCrypt的最新版本6 2可以从官方网站上下载 我从这里下载了一个6 1的 http freedos pri ee truecrypt 在TrueCrypt官方网站上很多旧版本都没了 这里却很全
  • 在 64 位计算机上访问硬件 PKCS11 令牌

    这就是我正在尝试做的事情 我有一个带有一些证书的硬件令牌 我正在编写一个 Java 应用程序来尝试访问这些证书 我在 Windows 32 位机器上使用了 jre6 中的 SunPKCS11 库 这是我如何访问证书的一个小示例 String
  • Java 访问令牌 PKCS11 未找到提供程序

    您好 我正在尝试使用 Java 从我的智能卡访问密钥库 我正在使用以下代码 我正在使用 OpenSc 的 Pkcs11 实现http www opensc project org opensc 文件 windows cnf name dni
  • HSM 和自定义模块

    我们正在实施安全关键系统 其中FIPS 140 2需要兼容的 HSM 硬件安全模块 来生成和存储密钥材料 执行加密 解密以及运行自定义代码 并为自定义模块设置以下要求 模块可通过 RPC 访问 模块可以访问所有 HSM 密钥和服务 模块具有
  • 如何将 HSM 中存储的私钥转换为 C# 中的 SignedXml.SigningKey

    我正在尝试使用存储在 HSM 中的证书来实现一些 XML 签名演示 我从此链接中找到了一些有趣的示例 使用 X509Certificate2 签署 XML 文档并将其修改为使用带有 PKCS11Interop 包装器的 HSM 内的证书和密
  • javafx 上的 sun.security.pkcs11

    我尝试开发一个访问智能卡的 javafx 应用程序 我有一个简单的概念证明 如下所示 package javafxapplication7 import java net URL import java util ResourceBundl
  • 多线程签名生成C#

    我正在使用符合 PKCS11 标准的加密设备来保护我的私钥 加密设备每秒能够生成 500 个 RSA 2048 位签名 我用 C NET 编写了一个与 PKCS11Interop Wrapper 交互的应用程序 这是我的代码 region
  • 如何在 PHP 中与 PKCS#11 兼容的 HSM 设备交互

    如何在 Linux 服务器上运行的 PHP 应用程序中使用来自 PKCS 11 兼容 HSM 例如 SafeNet iKey 2032 USB 或 Aladdin eToken PRO USB 的密钥材料 我还没有看到 粗略搜索也没有找到
  • 如何检查智能卡在Linux上是否正常工作?

    我有支持 PKCS 11 的智能卡吗 我只是想检查我的智能卡是否工作正常 如何在 Ubuntu 上检查它 请指导我 我可以使用什么软件 我应该遵循什么步骤 重要的是要明白PKCS 11标准只是定义了C语言API访问智能卡和其他类型的加密硬件
  • SunPkcs11 实现的 64 位替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们使用中间件来构建通过 JDK 1 6 30 64 位安装程序安装的软件应用程序 我们最近收到使用 U
  • 通过浏览器访问ePass2003 Auto令牌

    我已经加载了带有自签名证书的 ePass2003 Auto 令牌 我将 lib so 文件加载到 Firefox 中 现在 Firefox 可以在令牌中列出证书 我的要求是访问密钥库以进行签名 加密和解密 即用于对其进行加密操作的公钥和私钥
  • PKCS 11 中的 CKA_SENSITIVE 属性意味着什么?

    我正在阅读 PKCS 11 文档 但我无法清楚地理解密钥的 CKA SENSITIVE 属性意味着什么 更常见的是 我在哪里可以阅读属性描述 引用自PKCS 11 规范 v2 20 ftp ftp rsasecurity com pub p
  • 升级Java后找不到Sun.security

    我有一个使用 Play 2 0 创建的应用程序 我实现了 scribe java 库来使用一些 OAuth 服务 直到今天一切都很好 但是当我升级 jdk 并重新启动服务器时 我无法使用 scribe java 库 似乎它使用了一些类 例如
  • openSSL 的 PKCS#11 引擎

    我正在尝试在 Windows 7 下设置 openSSL 以使用供应商特定的安全模块 我从供应商那里得到了一个 PKCS 11 API dll 比如说vendor dll PKCS 11 引擎是根据https github com Open
  • 如何使用智能卡和 python 发出 TLS 请求?

    我尝试使用 python 库 请求 与受智能卡保护的网站进行通信 这意味着 SSL 中的强身份验证 您必须提供客户端证书 证书和私钥 由于我使用的是智能卡 因此我无法读取普通保护的私钥 只能读取模数 我可以使用 python 库 PyKCS
  • 使用令牌 URI 获取证书 URI

    我正在尝试在 Ubuntu 上使用 USB 令牌来访问 VPN 此访问必须使用 openconnect 来完成 并在连接字符串中使用证书的 URI 但问题是 我不知道如何获取我的证书的 URI 我已经能够让 Ubuntu 识别该令牌 并且通
  • 如何使用 PKCS11Interop 管理网络故障并避免错误

    在 Safenet HSM 上使用 PKCS11Interop 时 出现此错误 方法 C OpenSession 返回 2147484548 在我的文档中 错误是 CKR SMS ERROR 安全消息系统的一般错误 可能由 HSM 故障或网
  • Pkcs11Interop 从 HSM 读取密钥值

    我正在尝试使用 Pkcs11Interop 从 HSM 中提取密钥的值 我知道 密钥必须留在 HSM 中 但我需要它 所以 我已经用 NCryptoki 做到了 我也想用 Pkcs11Interop 做到这一点 我尝试了这段代码 Prepa
  • 从 Java 访问 Firefox 的证书信任存储

    我对这个几乎失去希望了 我正在尝试使用 Firefox 安装附带的 NSS 库通过 PKCS 11 从 Java 7 访问 Firefox 信任存储 这是代码 import java security KeyStore import jav
  • C# 中 PKCS11Interop 库的线程安全使用 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 PKCS11Interop 在 HSM 内执行密钥管理操作 我使用的 HSM 是 Thales PCI Express 下面是

随机推荐

  • 如何通过 jquery POST 单选按钮值

    我有这个示例代码 while row mysql fetch object result1 echo
  • SQL SERVER 2008 在创建表时触发

    在 SQL SERVER 2008 的数据库中创建表时 有没有办法运行一些函数 例如触发器 是的 这就是所谓的 DDL 触发器 的文档CREATE TRIGGER有一个样本DROP SYNONYM 对于一个例子来说 这是一个非常值得怀疑的选
  • 客户端未经授权使用此方法检索访问令牌 Gmail API C#

    当我尝试使用服务帐户授权 gmail api 时 出现以下错误 客户端无权使用此方法检索访问令牌 static async Task MainAsync sstageEntities db new sstageEntities UserCr
  • 使用 PyE 的 Elasticsearch 批量索引

    我有一个简单的 python 脚本 用于索引包含 100 万行的 CSV 文件 import csv from pyes import reader csv reader open data csv rb conn ES 127 0 0 1
  • 经典 ASP - 从本地主机上的网页运行 .exe

    我正在尝试执行 bat 以使用以下代码在我的本地主机 服务器端 上启动 notepad exe 索引 asp file bat notepad exe 当我打开 ASP 页面时 没有任何反应 由于变量 return 返回值 0 所以我尝试设
  • 为什么React在将state设置为相同值后会第二次渲染组件?

    我有一个简单的 React 组件 每次单击按钮时我都会设置相同的值 import React useState from react import style css let data title ABC export default fu
  • 这些角色有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 r 和 n 有什么区别 我真的很想知道两者之间有什么区别 n r t chr 13 它们如何在 Web 应用程序中使用 在哪个操作系统中使用 等等 例如 您能否确认Windows使用 n r对于换行符
  • 您无权调用 openById

    问题 当我运行脚本时 Google 告诉我 您无权调用 openById 我从我的另一个 Google 电子表格中复制了一个脚本 并更改 了目标密钥变量的单元格引用并在源电子表格和目标电子表格中创建适当大小的命名范围 Google Apps
  • 同一 Android 项目中的多个 API 密钥

    是否可以在同一代码库中为 Google Maps Android API 指定多个键 看来每次更改密钥库时我都必须更改清单文件中的密钥 恕我直言 如果您需要测试使用调试和发布密钥库中的密钥签名的应用程序 这不是很方便 I added bot
  • R:具有子集的 T 统计量

    我想要一个表作为输出 其中包含某些变量均值差异之间的 t 统计量并基于数据的两个特定子集 我有以下数据 structure list Name c A A A A B B B B C C C C D D D D Date c 20 10 2
  • 如何在Opencv中访问单通道IplImage的元素

    我怎样才能访问Elements of an IplImage 单通道和 IPL DEPTH 8U 深度 我想更改图像特定 x y 位置的像素值 opencv提供CV IMAGE ELEM方法来访问IplImage的元素 它是一个宏 defi
  • DialogFragment 不关闭

    我已经四处寻找解决方案 但似乎这不是一个常见问题 我希望在我的应用程序连接到服务器时有一个不确定的对话框微调器 然后清除该对话框并在请求完成时显示不同的对话框 我正在使用Fragment兼容包 问题是在显示第二个对话框之前没有删除微调器 这
  • C# RSA 加密 -> PHP RSA 解密

    我正在尝试在 C 中使用 RSA 加密 AES 密钥和 IV 并使用 phpseclib 使用 PHP 解密它们 我花了大约 4 个小时尝试解决这个问题 但总是收到 第 2495 行解密错误 PKCS 似乎有问题 临时私钥
  • Hibernate 映射包

    我正在使用 Hibernate 注释 在我的所有模型类中 我都这样注释 Entity Table public class SomeModelClass 我的 hibernate cfg xml 是
  • SQL CLR 拆分 UDF 中的标识列

    如何使用标准 SQL CLR Split UDF 返回标识列 例如下面的代码将返回一个表 其中字符串值按分隔符分隔 我还需要以某种方式返回标识列
  • 禁用传单绘制“删除”按钮

    如何禁用 删除删除按钮传单抽奖编辑工具栏 编辑 按钮应保持启用状态 关于章节中的文档禁用工具栏项您可以执行以下操作 map addControl new L Control Draw edit featureGroup drawnItems
  • HTML5 将画布保存为 PNG

    我按照这个示例将画布保存到 PNG 文件 http greenethumb com article 1429 user friend image saving from the canvas 我的问题 下载的文件已损坏 当我在记事本中打开它
  • 为什么调试器不会将 win32 计时器回调中引发的未处理异常视为未处理异常?

    我一直在追踪工作中一个非常阴险的错误 似乎导致我一直在追踪的非常奇怪的行为的事件似乎是在处理计时器回调时引发的异常 我的任何代码都没有处理该异常 因此我希望调试器能够收到未处理异常的通知 并通过一个令人讨厌的弹出窗口提醒我 不 相反 第一次
  • 有没有办法访问向量中的索引

    我需要访问向量内的索引 单个值 我认为它会类似于 v1 lt c a b c d e v1 3 h 但这似乎根本不起作用 其他人知道该怎么做吗 编辑 好吧 回答你的一些问题 这是我想要实现的总体目标的大图 MyDataR1 lt scan
  • 多线程签名生成C#

    我正在使用符合 PKCS11 标准的加密设备来保护我的私钥 加密设备每秒能够生成 500 个 RSA 2048 位签名 我用 C NET 编写了一个与 PKCS11Interop Wrapper 交互的应用程序 这是我的代码 region