Я хочу «вручную» сравнить дайджест/хэш сообщения с расшифрованным значением подписи в этом дайджесте.
Для этого я хочу расшифровать значение подписи (подписанный дайджест) сообщения с помощью открытого ключа, который принадлежит закрытому ключу, которым дайджест был подписан в первую очередь.
У меня есть следующие предметы:
- Дайджест-значение сообщения в base64 (рассчитывается с помощью SHA256)
- Значение подписи в дайджесте в base64, подписанном закрытым ключом (с использованием SHA256 с шифрованием RSA).
- Открытый ключ в формате .pem, принадлежащий закрытому ключу
- У меня есть фактическое сообщение (оно в формате XML, содержащем несколько подписей в разных разделах документа). Я уже проверил подписи с помощью библиотеки безопасности XML. Меня интересует только расшифровка значения подписи с помощью открытого ключа.
Я как бы застрял в том, как я могу добиться этого с помощью openssl.
Я пробую варианты команд, описанных здесь и здесь, однако я немного растерялся.
Я полагаю, мне следует преобразовать подпись из значения base64 в октет, используя:
base64 --d sigfile > sigfile_octet
?
Затем я использую команду:
openssl rsautl -inkey pubkey.pem -pubin -in sigfile_octet
Дает ли это мне расшифрованное значение подписи в октете? Какие следующие шаги мне нужно выполнить, чтобы сравнить его с дайджестом base64?
p.s. Я уже проверил подпись с помощью библиотеки безопасности XML Алексея, поэтому я знаю, что дайджест должен соответствовать расшифрованной подписи. ценность.
Ваша помощь будет очень признательна!!
С уважением,
Дидерик
Используйте команду
dgst
, а неrsautl
:Здесь
message.txt
— это сообщение, которое вы пытаетесь проверить.Вы можете использовать
rsautl
для «расшифровки» подписи, получая доступ к необработанным данным проверки:Это даст структуру ASN.1 подписи в кодировке DER. Это последовательность, содержащая идентификатор используемого хеш-алгоритма, за которым следует сам хэш. Если вы хотите, чтобы OpenSSL печатал удобочитаемое представление этой структуры, вы можете добавить параметр
-asn1parse
к командеrsautl
. Это выглядит примерно так:Если вы хотите извлечь только хэш, вместо использования параметра
-asn1parse
вы можете передать его командеasn1parse
, которая дает вам возможность извлекать элементы из структуры.Когда вы говорите, что у вас есть «значение подписи в дайджесте», я предполагаю, что у вас есть реальная подпись с этой структурой, а не просто необработанный хеш, который был подписан закрытым ключом. Если это не так, вы можете опубликовать пример вывода.
Мне неясно, действительно ли сообщение доступно, во всяком случае, в вопросе об этом не говорится. Дидерик, не могли бы вы указать, так ли это (в вопросе, пожалуйста). — person Diederik; 24.02.2016
Привет Эриксон, спасибо за ваш ответ, однако я не ищу истинный/ложный ответ относительно действительности подписи. Есть ли дополнительная информация, которую я могу получить с помощью команды dgst? Я действительно хочу увидеть расшифрованное значение значения подписи. @MaartenBodewes, да, у меня есть настоящее сообщение, однако я уже смог проверить подписи (у него несколько подписей в разных частях сообщения). — person Diederik; 24.02.2016
@Diederik Сообщение также является техническим термином для ввода алгоритма дайджеста / подписи. Как вы анализируете свои конкретные (XML) сообщения, зависит от вас. Но хорошо, вы указали, что хотите выполнить расшифровку RSA по учебнику (или, на самом деле, просто модульное возведение в степень и распаковку PKCS#1) с помощью открытого ключа. Правильно. — person Diederik; 24.02.2016
@MaartenBodewes Хорошо, спасибо за разработку. После нескольких шагов я могу успешно вычислить дайджест вручную для необработанного сообщения xml («используя сообщение openssl dgst -sha256»). Но да! На самом деле я ищу расшифровку учебника RSA — person Diederik; 24.02.2016
@Diederik Пожалуйста, ознакомьтесь с моим обновлением и дайте мне знать, если оно отвечает на ваш вопрос. — person Diederik; 24.02.2016