Как проверить токен метки времени RFC3161, который использует RSASSA-PSS

Мой провайдер меток времени недавно изменил использование rsaEncryption для подписи токена метки времени в rsassaPss ( см. Различие asn1parse здесь).

Перед изменением я использовал следующую команду в OpenSSL (v1.1.1a) для проверки токена метки времени:

$ openssl ts -verify -partial_chain -in token-rsaencryption.der -token_in \
> -digest bcbfcee484a9b243bafad6b8a43e0ddc1bf091837463e7c717495395eefbc2a6 \
> -CAfile cert.pem -untrusted cert.pem
Verification: OK
Using configuration from C:/Program Files/Git/mingw64/ssl/openssl.cnf

Однако команда больше не работает.

$ openssl ts -verify -partial_chain -in token-rsassapss.der -token_in \
> -digest 00017f0b41ce9649602a0218cd02ed0b0a3d93130329451cc782b7dfda79ce71 \
> -CAfile cert.pem -untrusted cert.pem
Verification: FAILED
Using configuration from C:/Program Files/Git/mingw64/ssl/openssl.cnf 
14548:error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding:../openssl-1.1.1a/crypto/rsa/rsa_pk1.c:67:
14548:error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed:../openssl-1.1.1a/crypto/rsa/rsa_ossl.c:582:
14548:error:21071069:PKCS7 routines:PKCS7_signatureVerify:signature failure:../openssl-1.1.1a/crypto/pkcs7/pk7_doit.c:1037:
14548:error:2F06A06D:time stamp routines:TS_RESP_verify_signature:signature failure:../openssl-1.1.1a/crypto/ts/ts_rsp_verify.c:143:

Возможно, это связано с тем, что RSASSA-PSS пока не поддерживается при проверке меток времени с использованием OpenSSL.

Существуют ли другие варианты проверки токена RFC3161 с помощью rsassaPss?

Если вы хотите просмотреть файлы, в этом zip- файле содержатся как токены меток времени (rsaEncryption и rsassaPss), так и сертификат подписи.

1 ответ

Прошло некоторое время, но проблема осталась.

Суть в том, что RSASSA-PSS был реализован для функций API CMS_*, но не для PKCS7_*. Вы также можете увидеть это в командной строке. Поскольку токен временной метки в основном представляет собой подписанные данные PKCS#7/CMS для TSTInfo, вы можете проверить подпись исключительно:

      $> openssl smime -verify -noverify -inform der -content foo -in foo.tst -out foo.tst.smime_verify
Verification failure
16432:error:21071065:PKCS7 routines:PKCS7_signatureVerify:digest failure:.\crypto\pkcs7\pk7_doit.c:1114:
16432:error:21075069:PKCS7 routines:PKCS7_verify:signature failure:.\crypto\pkcs7\pk7_smime.c:400:

$> openssl cms -verify -inform der -in foo.tst -noverify -out foo.tst.cms_verify
Verification successful

И проверка временных меток в конечном итоге сводится к...

Вы спрашивали об OpenSSL CLI, для которого, насколько мне известно, нет решения. Поскольку мы все равно используем API (и даже 1.0.2u до сих пор!^^), вот что я придумал:

я скопировал поверх ts/ts_rsp_verify.c. Вы заметите, что существует 8 различных проверок для проверки маркера временной метки, причем проверка подписи является первой. Призыв к этому в основном сводится к . затем я заменил с (требуется некоторая подготовка) и, таким образом, получил проверку маркера временной метки с поддержкой RSASSA-PSS.

Другие вопросы по тегам