Encryption 使用SHA-256的RSA OAEP加密失败,而使用SHA-1的RSA OAEP加密正常

Encryption 使用SHA-256的RSA OAEP加密失败,而使用SHA-1的RSA OAEP加密正常,encryption,cryptography,pkcs#11,pkcs11interop,Encryption,Cryptography,Pkcs#11,Pkcs11interop,我正在使用Pkcs11Interop库,并尝试使用RSA_PKCS_OAEP机制测试加密和解密 CK_RSA_PKCS_OAEP_PARAMS p = new CK_RSA_PKCS_OAEP_PARAMS(); p.HashAlg = (uint)CKM.CKM_SHA_1; p.Mgf = (uint)CKG.CKG_MGF1_SHA1; p.Source = (uint)CKZ.CKZ_DATA_SPECIFIED; p.SourceData = IntPtr.Zero; p.Source

我正在使用Pkcs11Interop库,并尝试使用RSA_PKCS_OAEP机制测试加密和解密

CK_RSA_PKCS_OAEP_PARAMS p = new CK_RSA_PKCS_OAEP_PARAMS();
p.HashAlg = (uint)CKM.CKM_SHA_1;
p.Mgf = (uint)CKG.CKG_MGF1_SHA1;
p.Source = (uint)CKZ.CKZ_DATA_SPECIFIED;
p.SourceData = IntPtr.Zero;
p.SourceDataLen = 0;

CK_MECHANISM mech = CkmUtils.CreateMechanism(CKM.CKM_RSA_PKCS_OAEP, p);
使用上述机制一切正常,但如果我将哈希算法更改为SHA-256,如下所示:

CK_RSA_PKCS_OAEP_PARAMS p = new CK_RSA_PKCS_OAEP_PARAMS();
p.HashAlg = (uint)CKM.CKM_SHA256;
p.Mgf = (uint)CKG.CKG_MGF1_SHA256;
p.Source = (uint)CKZ.CKZ_DATA_SPECIFIED;
p.SourceData = IntPtr.Zero;
p.SourceDataLen = 0;

CK_MECHANISM mech = CkmUtils.CreateMechanism(CKM.CKM_RSA_PKCS_OAEP, p);

然后我得到
CKR\u参数\u BAD
异常。我已经搜索和调试了一段时间,但什么也没找到。

我对Luna HSM也有同样的问题(但被赋予了
CKR\u机制\u参数无效

该版本的HSM根本不支持带有SHA-256的OAEP,需要进行固件升级。固件升级后,它的工作没有任何问题。检查您的设备是否支持此变体

您的代码似乎还可以,我使用了(java):


祝你好运

你真的应该包括语言标签。你是否尝试为MGF1保留SHA-1,并且只将哈希算法更改为SHA-256,因为这不会产生任何不利的安全影响?我在发布此标签之前已经发现了自己,但你是对的,所以我接受它。我的HSM不支持SHA256的OAEP。
CK_RSA_PKCS_OAEP_PARAMS mechanismParams = new CK_RSA_PKCS_OAEP_PARAMS(
    CKM.SHA_1,
    CKG.MGF1_SHA1,
    new CK_RSA_PKCS_OAEP_SOURCE_TYPE(CKZ.DATA_SPECIFIED.longValue())
    , null, 0
);
CK_RSA_PKCS_OAEP_PARAMS mechanismParams = new CK_RSA_PKCS_OAEP_PARAMS(
    CKM.SHA256,
    CKG.MGF1_SHA256,
    new CK_RSA_PKCS_OAEP_SOURCE_TYPE(CKZ.DATA_SPECIFIED.longValue())
    , null, 0
);