Я создал подпись файла, используя криптографическую библиотеку Python по этой ссылке [1]. Это фрагмент, который я использую (я пропустил часть, где я сериализую подпись в файл.
>>> from cryptography.hazmat.primitives import hashes
>>> from cryptography.hazmat.primitives.asymmetric import padding
>>> message = b"A message I want to sign"
>>> signature = private_key.sign(
... message,
... padding.PSS(
... mgf=padding.MGF1(hashes.SHA256()),
... salt_length=padding.PSS.MAX_LENGTH
... ),
... hashes.SHA256()
... )
Проблема в том, что когда я пытаюсь проверить файл подписи с помощью openssl
CLI, происходит сбой:
openssl dgst -sha256 \
> -signature sig.sha256 \
> -verify pubkey.pem \
> -sigopt rsa_padding_mode:pss \
> -sigopt rsa_pss_saltlen:-1 \
> -sigopt rsa_mgf1_md:sha256 \
> myfile
Verification Failure
Я не уверен, что еще проверить здесь. Предполагая, что все остальное я делаю правильно, единственное, в чем я не уверен на 100%, это правильность моих флагов openssl
. Возможно, они не соответствуют настройкам процесса подписи в криптографии?
[1] https://cryptography.io/en/latest/hazmat/primitives/asymmetric/rsa/#signing
РЕДАКТИРОВАТЬ: Исправление состоит в том, чтобы либо полностью удалить -sigopt rsa_pss_saltlen
, либо установить для него значение -sigopt rsa_pss_saltlen:-2
, что устанавливает длину соли на основе структуры блока PSS (согласно https://www.openssl.org/docs/man1.0.2/man1/pkeyutl.html).