Как распечатать оригинальный хеш с подписью, используя openssl - PullRequest
0 голосов
/ 27 мая 2019

Я хочу узнать о различных отступах и идентификаторе или формате при подписании файла.Поэтому я хочу знать, что происходит при использовании openssl

Например: openssl dgst -sha256 -sign xiaomi_rootca.key -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 -out sig.bin 1.txt

Конечно, это сгенерирует sig.bin.Однако я хочу знать, что openssl сделал с hash.bin до того, как он был преобразован в sig.bin

Итак, давайте разделим этот процесс на шаги:

  1. openssl dgst -binary -sha256 -out hash.bin 1.txt
  2. заполнить его
  3. возможно, добавить какой-нибудь идентификатор, например, rfc3447.txt, на странице 12 написано?и сгенерируйте окончательный файл final_hash.bin
  4. raw sign.openssl rsautl -sign -inkey private.key -in fianl_hash.bin -out sig.bin

Ну, я хочу знать, что именно произошло во время шагов 2 и 3. Так есть ли какая-нибудь команда, чтобы отменить шаг 4?

Прежде чем я смогу использовать openssl rsautl -verifyОднако он не поддерживает pss pading.

1 Ответ

0 голосов
/ 28 мая 2019

Я не думаю, что вы можете разделить это, как у вас.

Когда вы выполняете команду только для дайджеста, вы используете API EVP_DigestInit . Когда вы используете опцию -sign, он использует EVP_DigestSignInit API.

Так что я думаю это немного более сложно, чем то, что вы сломали. Чтобы по-настоящему ощутить разницу, вам нужно начать изучать код механизма, в частности реализацию типа закрытого ключа (например, RSA, EC и т. Д.).

Глядя на реализацию механизма RSA PSS, похоже, что заполнение реализовано в соответствии с самой операцией подписи.

например. в функции pkey_rsa_sign вы видите код вроде:

} else if (rctx->pad_mode == RSA_PKCS1_PSS_PADDING) {
    if (!setup_tbuf(rctx, ctx))
        return -1;
    if (!RSA_padding_add_PKCS1_PSS_mgf1(rsa,
                                        rctx->tbuf, tbs,
                                        rctx->md, rctx->mgf1md,
                                        rctx->saltlen))
        return -1;

Если вы хотите проверить дайджест, кажется, что вы действительно хотите использовать EVP_DigestVerifyInit API (так как это то, что использует команда dgst), так как я не уверен, что вы доберетесь куда-либо идти по пути, по которому ты хочешь пойти в своем вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...