【问题标题】:RSA OAEP Encryption with SHA-256 fails while with SHA-1 is OK使用 SHA-256 的 RSA OAEP 加密失败,而使用 SHA-1 则正常
【发布时间】:2020-11-18 07:26:34
【问题描述】:

我正在使用 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_ARGUMENTS_BAD 异常。我已经搜索和调试了一段时间,但一无所获。

【问题讨论】:

  • 你真的应该包含语言标签。
  • 您是否尝试过为 MGF1 保留 SHA-1 并且仅将哈希算法更改为 SHA-256,因为这不会产生任何不利的安全影响?

标签: encryption cryptography pkcs#11 pkcs11interop


【解决方案1】:

我在 Luna HSM 上遇到了同样的问题(但得到了CKR_MECHANISM_PARAM_INVALID)。

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

你的代码看起来不错,我用过(在 java 中):

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
);

祝你好运!

【讨论】:

  • 我在看到这个之前已经发现了自己,但你是对的,所以我接受它。我的 HSM 不支持使用 SHA256 的 OAEP。
猜你喜欢
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 2021-04-03
  • 2015-06-19
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 2017-02-13
相关资源
最近更新 更多