Сбой шифрования RSA OAEP с SHA-256, в то время как с SHA-1 все в порядке

#encryption #cryptography #pkcs#11 #pkcs11interop

#шифрование #криптография #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.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 исключение. Я некоторое время искал и отлаживал, но ничего не нашел.

Комментарии:

1. Вы действительно должны включить языковой тег.

2. Пытались ли вы сохранить SHA-1 для MGF1 и изменить алгоритм хэширования только на SHA-256, поскольку это не оказывает неблагоприятного воздействия на безопасность?

Ответ №1:

У меня была такая же проблема с Luna HSM (но была дана CKR_MECHANISM_PARAM_INVALID ).

Эта версия HSM просто не поддерживала OAEP с SHA-256, и потребовалось обновление прошивки. После обновления прошивки он работал без каких-либо проблем. Проверьте, поддерживает ли ваше устройство этот вариант.

Ваш код кажется нормальным, я использовал (на 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
);
  

Удачи!

Комментарии:

1. Я сам узнал об этом, прежде чем увидеть это, но вы правы, поэтому я принимаю это. Мой HSM не поддерживал OAEP с SHA256.

2. не могли бы вы сообщить нам, какая версия прошивки поддерживает это, пожалуйста

3. @menakshisundaram Мы обновили версию с 6.10.2 до 6.27.0 (это было в 2019 году).