【发布时间】:2017-10-16 00:58:20
【问题描述】:
我正在尝试使用 Pkcs11Interop .net 库签署 Pdf 文档。 我需要使用 ECDSA 加密 算法和 SHA256 哈希算法。 我正在使用 SoftHSM 2.2.0 来存储私钥。
我发现了一个 CKM 枚举,CKM_ECDSA_SHA256,我在创建用于调用 Session 的 Sign 方法的类机制对象时传递了它。
我从“Signdata”方法得到响应,但是,在打开签名后生成的 Pdf 文件时,会出现错误“Signature Invalid”。 这是 Signdata 方法调用的代码 sn-p。 我在代码中没有收到任何错误或异常,但是,我提到的 pdf 显示签名无效。
private Pkcs11 _pkcs11;
private Slot _slot;
private Session _session;
try
{
_pkcs11 = new Pkcs11(hsmCryptoApi, true);
}
catch (Pkcs11Exception ex)
{
if (ex.RV == CKR.CKR_CANT_LOCK)
_pkcs11 = new Pkcs11(hsmCryptoApi, false);
else
throw ex;
}
_slot = FindSlot(_pkcs11, _certificateInformation.TokenLabel);
_session = _slot.OpenSession(true);
using (Mechanism mechanism = new Mechanism(CKM.CKM_ECDSA_SHA256))
{
_session.Login(CKU.CKU_USER, passowrd);
byte[] signedHash = _session.Sign(mechanism, GetPrivateKeyHandle(), message);
_session.Logout();
return signedHash;
}
private ObjectHandle GetPrivateKeyHandle()
{
string keyLabel = _certificateInformation.KeyLabel;
List<ObjectAttribute> searchTemplate = new List<ObjectAttribute>();
searchTemplate.Add(new ObjectAttribute(CKA.CKA_CLASS, CKO.CKO_PRIVATE_KEY));
searchTemplate.Add(new ObjectAttribute(CKA.CKA_LABEL, keyLabel));
List<ObjectHandle> foundObjects = _session.FindAllObjects(searchTemplate);
return foundObjects[0];
}
- 请告诉我 SoftHSM 2.2.0 是否支持带有 SHA256 的 ECDSA_P256?
- 如果没有,有没有办法启用支持?
- 如果支持,请帮我解决这个问题??
- 看起来它想让我通过 ECDSA_Param,有没有人有任何代码 sn-p 用于传递 ECDSA_Param
【问题讨论】:
-
我在您发布的代码中没有发现明显问题,所以我猜测您的问题可能是由您的解决方案中的其他代码引起的,例如 PDF 处理、CMS 结构构建等。
标签: c# pkcs#11 ecdsa softhsm pkcs11interop