maskGenAlgorithm для подписи RSA с дополнением PKCS1-PSS - PullRequest
0 голосов
/ 03 января 2019

Я генерирую подпись RSA, используя RSA_PKCS1_PSS_PADDING. Я устанавливаю алгоритм дайджеста как SHA256, используя EVP_get_digestbyname () и EVP_DigestSignInit (). И параметр длины соли как -1, используя EVP_PKEY_CTX_set_rsa_pss_saltlen ().

У меня есть структуры EVP_MD_CTX, EVP_MD и EVP_PKEY_CTX, используемые для генерации подписи.

Как я могу получить имя алгоритма генерации маски, используемого OpenSSL по умолчанию? Есть ли API для его получения?

Редактировать: Используемая версия OpenSSL: 1.1.0g.

1 Ответ

0 голосов
/ 03 января 2019

RSASSA-PSS на практике всегда используется с MGF1 в качестве функции генерации маски.Единственный вариант - какой Message Digest используется внутри MGF1.

Иногда это тот же Message Digest, что и тот, который используется для хеширования сообщения и построения тега в PSS, потому что это имеет смысл.В других случаях это SHA-1, потому что раньше он был MD по умолчанию для ранних API-интерфейсов RSASSA-PSS, то есть для ассоциированного MGF1.

В идеальном мире какой-то атрибут (в сигнатуре или / и всертификат открытого ключа, используемый для проверки подписи) сообщит MGF1-with-such-MD, возможно, с помощью некоторого Object IDentifier, такого как мы должны указать PSS .Но API шифрования - это ад.


Чтобы контролировать, какой дайджест сообщений используется MGF1, нам нужно что-то похожее на то, что -sigopt rsa_mgf1_md:sha256 делает в команде openssl dgst.

Мое лучшее предположение - установить дайджест MGF1 с помощью

assert(EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, EVP_sha256)>=0);

или получить его с помощью EVP_PKEY_CTX_get_rsa_mgf1_md() как задокументировано :

EVP_PKEY_CTX_get_rsa_mgf1_md()макрос получает дайджест MGF1 для ctx.Если не указано иное, используется подписывающий дайджест.Режим заполнения должен быть установлен на RSA_PKCS1_OAEP_PADDING или RSA_PKCS1_PSS_PADDING.

...