- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用这段代码在 C# 中使用 RSA(CSP 中的交换 key )加密对称 key (RSA key CSP50C8C7CD 不可导出,它在 HSM 中):
CspParameters csp_dnet = new CspParameters(1, "HSM especific CSP");
csp_dnet.Flags = CspProviderFlags.UseNonExportableKey;
csp_dnet.KeyContainerName = "test";
RSACryptoServiceProvider rsa_dnet = new RSACryptoServiceProvider(csp_dnet);
// Create 3DES key
TripleDES tripleDES = new TripleDESCryptoServiceProvider();
// Encrypt 3DES with RSA
byte[] encryptedSessionKey = rsa_dnet.Encrypt(tripleDES.Key, false);
查看 CSP 日志,我注意到 C# 正在尝试导出 key 以继续操作。下面的 CSP 日志仅显示有关 rsa_dnet.Encrypt 使用的部分:
LOG CSP
...
[12/12/2012 17:28:45] [3688] D [CryptExportKey] Blob type: PRIVATEKEYBLOB
...
[12/12/2012 17:28:45] [3688] E [CryptExportKey] Return: FALSE. An internal error occurred.
Windows SO 调用 CryptExportKey 传递 PRIVATEKEYBLOB 意味着导出私钥。
LOG HSM
...
2012/12/12 17:44:02 [4DD18140] new key 'test/CSP50C8C7CD', t: 6, a: 0
2012/12/12 17:44:14 [4DC2A1C0] 'test' auth ok, 10.0.87.19
2012/12/12 17:44:17 [4DC2A1C0] 'test/CSP50C8C7CD' not exportable, conn: 9 --- ERROR
在 HSM 中,此日志显示 Windows SO 正在尝试提取私钥(这意味着错误,因为该 key 不可导出)。
当我在 HSM 中使用可导出 key CSP50C8C7CE 时,日志显示一切正常:
LOG HSM
...
2012/12/12 17:47:46 [4DEF4040] 'test' auth ok, IP: 10.0.87.19
2012/12/12 17:47:46 [4DEF4040] export: 'test/CSP50C8C7CE', 1462
2012/12/12 17:47:46 [4DEF4040] export: 'test/CSP50C8C7CE', 1462
2012/12/12 17:47:46 [4DEF4040] delete 'test/CSP50C8C7CE'
2012/12/12 17:47:46 [4DEF4040] import obj 'test/CSP50C8C7CE', 00000004
2012/12/12 17:47:46 [4DEF4040] pk test/CSP50C8C7CE [1]
2012/12/12 17:47:46 [4DEF4040] import obj 'cf1c34c8be5d2fa8a4575c63dd903454', 00000003
2012/12/12 17:47:46 [4DEF4040] delete 'test/CSP50C8C7CE'
2012/12/12 17:47:46 [4DEF4040] import obj 'test/CSP50C8C7CE', 00000006
2012/12/12 17:47:47 [4DEF4040] export: 'cf1c34c8be5d2fa8a4575c63dd903454', 24
2012/12/12 17:47:47 [4DEF4040] delete 'cf1c34c8be5d2fa8a4575c63dd903454'
请注意,此日志显示大量 RSA key 导入/导出操作(引用:CSP50C8C7CE - 可导出 key )。
问题: System.Cryptography 库中的 Encrypt 函数是否需要 key 必须始终可导出?或者我在我的程序中犯了任何错误?是否遗漏了任何参数?
最佳答案
您不能使用 HSM 中的不可导出 key 在内存中进行加密或解密。由于您尝试在内存中进行加密,.NET 正在尝试将私钥提取到内存中,但 HSM 阻止了它。另一方面,您可以获得私钥的句柄并将您的“要加密/解密的数据”发送到 HSM。换句话说,您可以通过指定其句柄告诉 HSM 使用它包含的私钥对您的数据进行加密。
您的 HSM 应该为您提供一个实现 PKCS11 标准并且通常用 C 编写的 API。您可以从这个非托管库中提取方法并在 C# 中使用它们。 Here您可以找到用 C# 编写的 PKCS11 包装器库。
关于c# - 使用 C#/CSP 在 HSM 中使用不可导出 key 的 RSA 加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13958921/
我有一些私钥存储在 HSM 中,但没有公钥。我想通过PKCS11接口(interface)获取对应的公钥。 如果私钥是RSA key ,我可以从CKA_MODULUS中提取模数,从CKA_PUBLIC
收到CKR_GENERAL_ERROR当应用程序尝试打开与 H/W HSM 的连接时。 详细的错误是: 50004-Crypto API could not be open. Caused by: x
HSM 服务器和客户端设置已在我这边完成,我的问题是如何在没有 HSM 客户端的情况下与 HSM 服务器进行通信以通过 java 应用程序访问 Luna key 存储,是否有其他方法可以在没有客户端的
我想简要了解硬件/主机安全模块中的区域主 key 或区域控制主 key 。有人可以解释一下吗? 最佳答案 区域主 key (ZMK)只是另一个 Des key 。它用于在 HSM 之间传输 key 。
使用 HSM 命令 A0(生成 key ),我得到以下响应。 HEADA100U7D4213E0422F4E08E9455D9837E09FDDRA0072B1TX00S000073C35FF96F7
我在互联网上发现 HSM 是存储 key 的最佳位置,但我还有很多悬而未决的问题。服务器、HSM 和数据库之间如何进行交互?。是不是就像服务器从 HSM 检索 key 来解密数据库中的数据一样?如果我
我试图了解如何使用终端将 hsm 和 key 链接到交易。我应该开发一个身份验证服务器,它从终端接收交易并解析它们以获取不同的数据。但我不明白的是如何使用 hsm 来保护数据。 最佳答案 首先您必须了
我正在研究 HSM,我有一个问题。 在 HSM(对于所有系统)中,是否只有一种当前状态?例如; 在我的项目中,有两种用户类型:普通用户和技术人员用户。它们之间没有相同之处。普通用户可以随时登录系统和注
我正在尝试使用 python 代码向 HSM (Thales paysheild 9000) 发送命令。但我从代码中得到的响应并不符合预期。 Input: HEADJA12345678912306 #
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我引用以下文档: How to generate and transfer HSM-protected keys for Azure Key Vault 先决条件之一是: Thales HSM、智能卡
我工作并完成了一个 PKI 项目,该项目使用 HSM 来生成 - 存储 key 和执行加密功能。我使用 PKCS#11 与我们的应用程序交互以进行签名/验证和加密/解密。我们的平台是windows。
我引用以下文档: How to generate and transfer HSM-protected keys for Azure Key Vault 先决条件之一是: Thales HSM、智能卡
这正是我想知道的。基于云的 HSM 很昂贵,我需要确定要支付的费用。 最佳答案 主要是公钥加密。 HSM 包含 key 对,这些 key 对可以链接回受信任的公共(public)根,这与 SSL/TL
我正在连接一个 HSM,它正在生成并使用以太坊标准 (secp256k1) 进行签名。我正在使用一个名为 Graphene 的包与 HSM 连接。我使用其“pointEC”属性提取公钥:0xc87c1
此代码块正在加载 cryptoki.so 库并检索插槽信息。这是获取插槽编号中的对象列表。 0. 我不需要访问所有的键来执行一些功能,只需要一个特定的键对。有没有办法通过使用标签名称、对象 ID 或句
我有一个 Thales nShield HSM,其中创建了一个(CKA_SENSATIVE,假)AES key ,我想提取该 key ,但是我根本不知道如何在 java 中执行此操作。我的 key 创
AWS 似乎允许我们将 AWS Cloud HSM 作为提供商,请参阅 here和here Security.addProvider(new com.cavium.provider.CaviumPro
所以我正在编写一个需要使用客户端证书(相互身份验证)向服务器进行身份验证的应用程序。客户端证书 key 存储在 HSM(Gemalto 的)中。我将 OpenSSL 与 Luna 客户端集成,但请求模
我正在尝试从我的计算机访问 Safenet HSM,我将我的计算机添加到客户端并将 pem 文件发送到 HSM,就在这里。问题是当我输入“vtl verify”时,因为它启动了以下错误: SSL Co
我是一名优秀的程序员,十分优秀!