Я создал подпись файла, используя библиотеку криптографии 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).