Аномалия RSA в DER

#openssl

#openssl

Вопрос:

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

     0:d=0  hl=3 l= 159 cons: SEQUENCE
    3:d=1  hl=2 l=  13 cons: SEQUENCE
    5:d=2  hl=2 l=   9 prim: OBJECT            :rsaEncryption
   16:d=2  hl=2 l=   0 prim: NULL
   18:d=1  hl=3 l= 141 prim: BIT STRING
  

Однако, если я преобразовываю этот PEM в DER и снова выполняю openssl asn1parse, я теряю эту оболочку, и результирующий размер файла немного меньше.

Как я могу преобразовать RSA PEM в DER, сохранив вышеуказанную оболочку?

Комментарии:

1. Как вы его конвертируете сейчас?

2. openssl rsa — сообщить ключ pem -in.pem -вывести ключ der -out.der

3. Можете ли вы показать нам заголовок PEM для входного файла?

4. Вы имеете в виду в шестнадцатеричном формате? Потому что, если нет, не является ли вышеуказанный заголовок заголовком?

5. Нет. Файл PEM представляет собой текстовый файл, содержащий верхний колонтитул, данные DER в кодировке base64 и нижний колонтитул. Команда asn1parse просто декодирует base64. Меня интересует заголовок PEM. Это строка, которая начинается с «——BEGIN», за которой следует еще какой-то текст. В зависимости от того, что именно содержат данные DER, этот текст будет меняться.

Ответ №1:

-----BEGIN PRIVATE KEY----- Заголовок, который вы упоминаете в своем комментарии, указывает на то, что у вас есть закрытый ключ в формате PKCS8. Хотя мне это кажется немного странным. Я бы ожидал, что вывод asn1parse будет выглядеть примерно так:

     0:d=0  hl=4 l=1213 cons: SEQUENCE          
    4:d=1  hl=2 l=   1 prim: INTEGER           :00
    7:d=1  hl=2 l=  13 cons: SEQUENCE          
    9:d=2  hl=2 l=   9 prim: OBJECT            :rsaEncryption
   20:d=2  hl=2 l=   0 prim: NULL              
   22:d=1  hl=4 l=1191 prim: OCTET STRING
  

Обратите внимание, что в вашем выводе нет целочисленного поля.

Вы можете использовать утилиту openssl pkcs8 для преобразования файла PKCS8 из PEM в DER

 openssl pkcs8 -topk8 -in rsakey.pem -out rsakey.der -outform DER -nocrypt