Расшифровать с помощью открытого ключа, используя openssl в командной строке

Я хочу «вручную» сравнить дайджест/хэш сообщения с расшифрованным значением подписи в этом дайджесте.

Для этого я хочу расшифровать значение подписи (подписанный дайджест) сообщения с помощью открытого ключа, который принадлежит закрытому ключу, которым дайджест был подписан в первую очередь.

У меня есть следующие предметы:

  • Дайджест-значение сообщения в 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 Алексея, поэтому я знаю, что дайджест должен соответствовать расшифрованной подписи. ценность.

Ваша помощь будет очень признательна!!

С уважением,

Дидерик

См. также:  Как вы вызываете несколько файлов из командной строки в свое приложение?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Diederik

    Используйте команду dgst, а не rsautl:

    openssl dgst -verify pubkey.pem -signature sigfile_octet message.txt
    

    Здесь message.txt — это сообщение, которое вы пытаетесь проверить.


    Вы можете использовать rsautl для «расшифровки» подписи, получая доступ к необработанным данным проверки:

    openssl rsautl -verify -inkey pubkey.pem -pubin -in sigfile_octet
    

    Это даст структуру ASN.1 подписи в кодировке DER. Это последовательность, содержащая идентификатор используемого хеш-алгоритма, за которым следует сам хэш. Если вы хотите, чтобы OpenSSL печатал удобочитаемое представление этой структуры, вы можете добавить параметр -asn1parse к команде rsautl. Это выглядит примерно так:

        0:d=0  hl=2 l=  49 cons: SEQUENCE          
        2:d=1  hl=2 l=  13 cons:  SEQUENCE          
        4:d=2  hl=2 l=   9 prim:   OBJECT            :sha256
       15:d=2  hl=2 l=   0 prim:   NULL              
       17:d=1  hl=2 l=  32 prim:  OCTET STRING      
          0000 - c9 8c 24 b6 77 ef f4 48-60 af ea 6f 49 3b ba ec   ..$.w..H`..oI;..
          0010 - 5b b1 c4 cb b2 09 c6 fc-2b bb 47 f6 6f f2 ad 31   [.......+.G.o..1
    

    Если вы хотите извлечь только хэш, вместо использования параметра -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

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: