Как заменить подпись sig на der
В мире компьютерной безопасности подпись sig является одним из наиболее распространенных форматов, используемых для подписи электронных документов. Однако, существуют ситуации, когда необходимо заменить формат sig на более удобный и современный формат der. Формат der является стандартом для кодирования и передачи подписей в цифровых сертификатах. В данной статье мы расскажем подробную инструкцию о том, как выполнить данную замену.
Прежде чем начать процесс замены, вам потребуется программное обеспечение, способное работать с форматом der. Одним из таких программных решений является OpenSSL – свободная реализация протоколов SSL и TLS.
Первым шагом будет установка OpenSSL на ваш компьютер. Вы можете скачать последнюю версию OpenSSL с официального сайта и установить ее, следуя инструкциям на экране. После завершения установки, проверьте доступность команды OpenSSL в командной строке, введя команду `openssl` и нажав Enter. Если команда успешно выполнилась, это означает, что OpenSSL был установлен корректно.
Что такое подпись sig
Подпись sig (Signature) представляет собой особый формат, который используется для обозначения подписанной информации в различных контекстах, в том числе в криптографии и электронных документах.
В области криптографии, подпись sig представляет собой цифровую подпись, добавляемую к определенному сообщению или документу с целью обеспечения его подлинности и целостности. Для создания подписи sig используется специальный алгоритм, который использует приватный ключ для шифрования хэш-суммы сообщения. Другие пользователи могут использовать публичный ключ, чтобы проверить подпись и убедиться в ее подлинности.
Подписи sig широко применяются в электронных документах и электронной почте. Они позволяют получателю проверить авторство документа и проверить, не было ли внесено каких-либо изменений с момента создания подписи.
Чтобы заменить подпись sig на формат der (Distinguished Encoding Rules), необходимо применить специальный алгоритм, который конвертирует подпись в стандартный формат для хранения и передачи данных в криптографии.
Преимущества подписи sig:
- Обеспечивает подлинность и целостность информации.
- Позволяет проверить авторство документа.
- Помогает предотвратить поддельные документы и манипуляции с данными.
- Широко применяется в криптографии и электронных документах.
Выводы:
Подпись sig является важным элементом в области криптографии и электронных документов. Она обеспечивает подлинность и целостность информации, предоставляет возможность проверить авторство документа и помогает предотвратить манипуляции с данными. Понимание работы и применения подписи sig является важным аспектом для обеспечения безопасности информации в современном цифровом мире.
Почему нужно заменить sig на формат der
Формат DER (Distinguished Encoding Rules) — это стандартный формат, используемый для представления данных в криптографии. Он отличается от формата sig (signature) тем, что обеспечивает более эффективное и компактное представление цифровой подписи.
Вот несколько причин, почему рекомендуется заменить формат sig на формат der:
Эффективность передачи данных. Формат DER позволяет сократить размер цифровой подписи, что увеличивает скорость передачи данных и снижает нагрузку на сеть. Это особенно важно при работе с большими объемами информации или в условиях ограниченной пропускной способности сети.
Универсальность. Формат DER является стандартным форматом для представления цифровой подписи. Он поддерживается большинством современных криптографических библиотек и программных реализаций. Это означает, что подпись в формате DER может быть легко использована в различных системах и средах.
Безопасность. Формат DER обеспечивает дополнительную защиту от возможных атак и изменений данных. Он включает в себя проверку целостности и цифровую подпись самой подписи. Таким образом, формат DER обеспечивает более надежную и безопасную передачу информации.
Удобство использования. Так как формат DER является стандартным и широко поддерживается, его использование значительно облегчает работу с цифровыми подписями. Он позволяет легко преобразовывать и анализировать подписи с помощью программ и инструментов для работы с криптографией.
В целом, замена формата sig на формат DER – это оптимальное решение для эффективной, безопасной и удобной работы с цифровыми подписями. Этот формат предлагает множество преимуществ, которые облегчают процессы передачи и обработки информации, а также обеспечивают дополнительный уровень защиты и безопасности данных.
Шаг 1: Скачать необходимые инструменты
Прежде чем приступить к замене подписи sig на формат der, вам потребуется скачать несколько инструментов, которые помогут вам выполнить эту задачу. Вот список необходимых инструментов:
- OpenSSL: Это свободное программное обеспечение, которое позволяет работать с шифрованием и сертификатами. Вы можете скачать его с официального сайта OpenSSL.
- Компилятор C: Для компиляции исходного кода, вам понадобится компилятор С. Вы можете использовать GCC, MinGW или другой совместимый компилятор C.
Кроме того, вы также можете воспользоваться утилитами для работы с PEM и DER форматами, такими как:
- openssl: Утилита командной строки OpenSSL, которая может генерировать, преобразовывать и проверять сертификаты и ключи.
- openssl-cp: Утилита OpenSSL для копирования файлов с помощью сертификатов.
- openssl-pkey: Утилита OpenSSL для работы с приватными ключами.
Вы можете найти их вместе с OpenSSL или на отдельных ресурсах и скачать их соответствующим образом. Убедитесь, что все необходимые инструменты установлены корректно и готовы к использованию перед переходом к следующему шагу.
Шаг 2: Открыть подпись sig в редакторе
После того, как вы получили файл подписи sig, следующим шагом необходимо открыть его в редакторе для дальнейшей обработки.
Выберите удобный для вас текстовый редактор, который поддерживает работу с файлами в формате der. Некоторыми из популярных редакторов, поддерживающих этот формат, являются:
- Notepad++ — бесплатный и открытый исходный код редактор, обладающий широким набором инструментов для работы с различными форматами файлов.
- Atom — ещё один бесплатный и открытый исходный код редактор, который также поддерживает работу с различными форматами файлов.
- Sublime Text — мощный и универсальный редактор, который также может быть использован для открытия и редактирования файлов в формате der.
После установки и открытия выбранного редактора, перейдите в раздел «Открыть файл» или используйте горячие клавиши, чтобы открыть файл подписи sig.
Найдите и выберите файл sig с расширением .sig на вашем компьютере и откройте его в редакторе.
Теперь у вас открыта подпись sig в текстовом редакторе, и вы можете перейти к следующему шагу для преобразования ее в формат der.
Шаг 3: Преобразование sig в формат der
После получения подписи sig в формате PEM, мы можем приступить к ее преобразованию в формат der, который является более компактным и удобным для работы.
Для преобразования sig в формат der, мы можем использовать открытую библиотеку OpenSSL, которая предоставляет набор утилит и функций для работы с криптографией.
Откройте командную строку или терминал на вашем компьютере.
Перейдите в директорию, где находится файл с подписью sig.
Выполните следующую команду:
openssl pkcs8 -topk8 -inform PEM -outform DER -in sig -out sig.der
openssl pkcs8 — команда OpenSSL для преобразования ключей.
-topk8 — опция, указывающая на преобразование в формат PKCS#8.
-inform PEM — опция, указывающая на формат входного файла (sig) в PEM.
-outform DER — опция, указывающая на формат выходного файла в DER.
-in sig — опция, указывающая на входной файл (sig).
-out sig.der — опция, указывающая на выходной файл (sig.der).
После выполнения команды, в текущей директории появится файл sig.der, содержащий подпись в формате der.
Теперь мы успешно преобразовали подпись sig в формат der и можем использовать ее в дальнейших операциях с криптографией.
Шаг 4: Проверка подписи der на работоспособность
После того как вы успешно заменили подпись формата sig на формат der, необходимо проверить, что подпись работоспособна и корректно применяется к целевому файлу. Для этого следуйте указанным ниже шагам:
- Откройте утилиту для работы с цифровыми подписями, которую вы предпочитаете использовать. Часто такой утилитой является командная строка или графический интерфейс программы.
- Выберите опцию или команду, позволяющую вам выполнить проверку цифровой подписи.
- Укажите путь к целевому файлу, подписью которого вы хотите проверить. Возможно, вам также понадобится указать путь к публичному ключу, который был использован для создания подписи.
- Запустите процесс проверки подписи. Утилита должна анализировать целевой файл и сопоставить его с цифровой подписью, чтобы определить, соответствует ли подпись ожидаемым значениям.
- Изучите результаты проверки подписи. Если утилита сообщает об успешной верификации подписи, то это означает, что подпись корректна и работоспособна. В противном случае, возможно, вы совершили ошибку при создании или замене подписи der.
Если результаты проверки подписи являются неудовлетворительными, вам следует повторить шаги, связанные с созданием и заменой подписи der, чтобы устранить возможные ошибки. Также проверьте, что публичный ключ, использованный при создании подписи, совпадает с ключом, который вы используете для проверки.
Вы можете повторять процесс проверки подписи необходимое количество раз, пока не убедитесь, что подпись der работоспособна и корректно применяется к целевому файлу. Это важно, чтобы обеспечить целостность и безопасность цифровой подписи, а также правильность ее применения при использовании.
Шаг 5: Удаление подписи sig
На этом шаге мы удалим подпись sig из нашего документа.
Для этого выполните следующие действия:
- Откройте файл с форматом der в текстовом редакторе или HEX-редакторе.
- Пролистайте файл до того места, где находится подпись sig.
- Выделите подпись и удалите ее из файла.
- Сохраните изменения.
Теперь подпись sig удалена из файла в формате der. Вы можете продолжить работу с измененным файлом или использовать его по своему усмотрению.
Вопрос-ответ
Как можно заменить подпись sig на формат der?
Для замены подписи sig на формат der необходимо выполнить несколько шагов. Сначала нужно конвертировать подпись из файла sig в формат pem с помощью команды openssl rsa -in input.sig -pubout -out input.pem. Затем выполнить команду openssl rsa -in input.pem -inform pem -out input.der -outform der. Теперь подпись успешно заменена на формат der.
Пожалуйста, подробную инструкцию по замене подписи sig на формат der
Конвертация подписи из формата sig в формат der включает в себя несколько шагов. Во-первых, нужно установить программу OpenSSL, если она еще не установлена. Затем нужно открыть командную строку и перейти к директории, где находится файл с подписью sig. Далее, выполните команду «openssl rsa -in input.sig -pubout -out input.pem», чтобы конвертировать подпись в формат pem. После успешной конвертации, выполните команду «openssl rsa -in input.pem -inform pem -out input.der -outform der», чтобы окончательно заменить подпись формата sig на формат der.
Существует ли способ заменить подпись sig на формат der без использования программы OpenSSL?
Да, есть способ заменить подпись sig на формат der без использования программы OpenSSL. Вместо этого можно воспользоваться языком программирования, который поддерживает работу с форматом der, например, Python. Вам понадобится библиотека или модуль, который умеет работать с форматом der, и код, который выполнит конвертацию подписи. Необходимо учесть, что эта альтернативная методика может потребовать дополнительных знаний и навыков в программировании.
Электронная подпись. Инструкция как подписывать документы в КриптоПро CSP 5 и КриптоАРМ
На сегодняшний день электронная подпись — это уже не роскошь, а необходимость для полноценного ведения бизнеса. Преимущества использования электронных подписей (ЭП) очевидны как среднему и малому бизнесу, так и индивидуальным предпринимателям.
Какие возможности дает предпринимателям электронная подпись:
- Организовать в компании юридически значимый электронный документооборот (ЭДО). Переход на ЭДО позволит значительно сократить расходы на бумагу, печать документов, почтовые отправления и курьерские доставки. Абсолютно любой документ, как входящий, так и исходящий (договоры, счета, акты), подписывается электронно и мгновенно отправляется контрагенту.
- Оперативно отправлять налоговую и бухгалтерскую отчетности, взаимодействовать с контролирующими органами (ФНС, ПФР, ФСС и др.)
- Участвовать в электронных торгах, государственных закупках.
- Работать на государственных порталах — Госуслуги, Росеестр, Росимущество, Рособрнадзор, ЕГАИС и др.
Как получить электронную подпись?
Получить ЭП можно в ФНС бесплатно. Для записи и хранения электронной подписи потребуется специальный сертифицированный носитель — Рутокен.
Что еще потребуется?
Для использования ЭП необходимо установить средство криптографической защиты информации — КриптоПро CSP.
Далее рассмотрим пошагово, как подписывать документы электронной подписью.
1. КриптоПро CSP.
Скачиваем дистрибутив с сайта производителя. Устанавливаем программу на ПК. Важный момент — лицензия на данную программу платная, но производитель дает целых 90 дней бесплатного пробного периода. Проходим на вкладку «Инструменты КриптоПро» в списке установленных программ.
В открывшемся окне проходим на вкладку «Создание подписи».
Выбираем документ, который будем подписывать. Нажимаем кнопку «Открыть».
Под кнопкой «Выбрать файл для подписи» отображается путь исходного документа, а под кнопкой «Сохранить подпись как» — путь подписанного документа, который будет создан.
Важно! По умолчанию КриптоПро CSP создает подписанный документ в формате .p7s. Если требуется подписать документ в другом формате (например, sig), в конце пути будущего подписанного документа нужно .p7s заменить на .sig. Как правило, для отправки документов в государственные органы и учреждения, а также для участия в электронных торгах требуется проставление подписи и создание документа именно в формате .sig.
Выбираем, какой электронной подписью (если их несколько) будем подписывать документ.
Также стоит отметить, что если не применять расширенные настройки, КриптоПро CSP создаст присоединенную подпись. Для того, чтобы создать отсоединенную подпись, нажимаем кнопку «Показать расширенные».
Присоединенная и отсоединенная электронная подпись — в чем отличие? При создании присоединенной подписи формируется новый файл, в который помещается и подписываемый документ, и подпись к нему. Прочесть такой подписанный документ возможно только при использовании криптографических программ (КриптоПро, КриптоАРМ и др.). Отсоединенная подпись не изменяет исходный документ, а создается отдельным файлом. Для проверки такого документа потребуется как исходный документ, так и сам файл с подписью. Отправлять нужно будет оба файла. Для прочтения такого документа не потребуется наличие специальных криптографических программ.
Далее, для создания отсоединенной подписи нужно поставить галочку «Создать отсоединенную подпись».
В нашем примере мы создаем присоединенную подпись, поэтому галочку снимаем. Нажимаем кнопку «Подписать». Документ успешно подписан.
В папке с исходным файлом появился подписанный документ (расширением .p7s).
Если требуется проверить какой-либо подписанный документ (допустим, входящий от контрагента), проходим на вкладку «Проверка подписи». Выбираем тот файл, который будем проверять.
Ждем окончания процесса проверки.
2. КриптоАРМ.
Рассмотрим процесс подписания документов электронной подписью в программе КриптоАРМ. Скачиваем установочный файл с сайта производителя. Лицензия на данное ПО платная, но можно воспользоваться бесплатным 14-дневным периодом. Устанавливаем ПО на компьютер.
Приступим к процессу подписания документа. Для этого выбираем нужный файл, клик ПКМ, нажимаем КриптоАРМ, «Подписать».
Откроется окно мастера создания электронной подписи.
Если требуется подписать сразу несколько документов, добавляем их через кнопку «Добавить файл». Нажимаем «Далее».
Настраиваем формат будущего подписанного документа: — Выбираем DER кодировку или BASE-64 кодировку. Если Вы подписываете документ для отправки контрагенту (поставщику, заказчику), то можете выбрать любой из типов кодировки. Если же подписываемый документ требуется отправить в государственные органы, перед подписанием рекомендуется уточнить, файлы какого формата принимает соответствующий орган. Так, большинство судов или контролирующих органов, принимают подписанные документы только в DER кодировке. — Также Вы можете изменить расширение подписанного документа. По умолчанию КриптоАРМ сохраняет файл в формате .sig. Для сохранения документа в формате .p7s следует вручную прописать вместо .sig — .p7s. — КриптоАРМ дает возможность после подписания сразу же отправить документ по электронной почте. Для этого нужно поставить галочку «Отправить выходные файлы по электронной почте».
Нажимаем кнопку «Далее».
Если требуется создать отсоединенную электронную подпись, проставляем галочку «Сохранить подпись в отдельном файле». Нажимаем «Далее».
На следующем шаге указываем личный сертификат для создания электронной подписи. Нажимаем «Далее».
Данные для создания электронной подписи собраны. Проверяем выставленные параметры. Нажимаем «Готово».
Документ успешно подписан электронной подписью.
В папке с исходным файлом появился подписанный документ (присоединенная подпись) с расширением .sig.
Если Вы проставили галочку «Отправить выходные файлы по электронной почте», то после завершения процесса подписания документа нужно ввести параметры для отправки файла по электронной почте.
Ждем завершения процесса отправки сообщения.
Если требуется проверить какой-либо подписанный документ, запускаем КриптоАРМ, нажимаем «Проверить ЭП». Выбираем тот файл, который будем проверять.
Откроется окно «Мастер проверки корректности электронной подписи». Нажимаем «Далее».
Выбираем файл, который требуется проверить.
Проверка электронной подписи успешно завершена.
Мы рассмотрели пошаговую инструкцию, как быстро и просто подписывать электронной подписью документы, не прибегая к услугам операторов ЭДО. КриптоПро CSP 5 и КриптоАРМ позволят предпринимателям значительно сократить расходы на бумагу и печать документов, сэкономить время на отправку подписанных файлов как контрагентам, так и в различные государственные органы.
Как фронтендер подписывать CSR учился
В статье хочу рассказать опыт изучения Certificate Signing Request (CSR) формата. О том, что такое PEM, DER, какова структура приватных и публичных ключей, самого CSR файла и самое страшное — как этот CSR подписывается. Итак.
0. С чего всё началось
Есть у меня маленький домашний Web-сервер. Долгие годы работал он на одном лишь HTTP, но вот решил я обуздать SSL и бесплатные сертификаты от Let’s Encrypt, чтобы в дальнейшем и телеграм ботов на нём настраивать, и PWA, и прочие радости HTTPS жизни.
Потратил вечер-другой на подбор приятного в работе ACME клиента, коим стал написанный на bash bacme, настройку сервера на прохождение проверок, редиректы с HTTP на HTTPS — и вот сервисы моего сервера уже имеют желанный замочек в адресной строке.
Проблемы начались с автоматизации этого процесса. Так как сертификаты сервис раздаёт всего на три месяца, нужно озаботиться их регулярным обновлением. С этой целью я полез в документацию ACME протокола и начал писать свой скрипт. Детали о том, как генерировались ключи и JWS запросы, опять же, опущу. Самая весёлая часть началась, когда я решил генерировать свои CSR.
1. Разбираем структуру PEM и DER в целом, и CSR в частности
От простого к сложному
1.1. Что такое PEM
Privacy-Enhanced Mail — формат изначально созданный для хранения криптографических данных с целью повышения безопасности обмена электронной почтой (ибо сам протокол изначально о безопасности вообще ничего не знает).
Многие из нас не раз генерировали пары закрытых/открытых ключей через openssl. Давайте сгенерируем одну пару и будем далее от них отталкиваться:
Длина специально выбрана минимальная, чтобы и места в тексте меньше занимало, но и для подписания CSR хватало. В продакшене, разумеется, размер нужно указывать значительно толще.
Вряд ли кому нужно объяснять, что мы видим нечто закодированное в base64 между хедером и футером вида ——BEGIN [TYPE]—— и ——END [TYPE]—— — это и есть PEM контейнер. По сути, там могут содержаться данные любого вида, но сейчас меня интересуют всякие крипто-ништяки, а это бинарные данные, классически представленные в DER формате.
1.2. Что такое DER
Distinguished Encoding Rules — один из способов представления ASN.1 данных, вероятно наиболее распространённый.
Переведём для начала наш публичный ключ (он самый маленький) из base64 в HEX
DER формат имеет формат TLV (Type, Length, Value). В нашем случае Type — всегда один байт, Length — от одного байта и выше (больше трёх пока не встречал, но спецификацией допускается до 128 байт), Value — <Length> последующих байт.
Все типы перечислять не буду, но нас сейчас наиболее интересуют следующие:
Объект в OID базе данных
Строка в кодировке UTF8
Упорядоченная последовательность элементов
Последовательность элементов без определённого порядка
Длина рассчитывается по следующему принципу:
Если значение первого байта между 0 и 127 включительно, то это и есть длина содержимого, начинающаяся со следующего байта.
Если первый бит установлен в единицу (то есть значение > 127), то мы исключаем эту единицу, а полученное значение — это сколько следующих байт содержат целочисленное значение длины, вычитываем значение из них.
Как прочитать данные для каждого типа углубляться не буду. Я пользовался этим источником. Таким образом представим ключ в следующем виде:
Внимательно присмотревшись, можно увидеть, что данный BIT STRING вполне также можно распарсить:
Это зашифрованные в нашем ключе modulus и exponent. Те самые, которые можно получить командой openssl rsa -pubin -text . Абсолютно аналогично можно получить все необходимые данные из нашего приватного ключа:
Здесь мы видим наши modulus и exponent, которые как раз экспортируются в public.key при создании публичного ключа (`openssl rsa -pubout`):
Плюс прочие целые числа, использующиеся в алгоритмах шифрования, но они вновь выходят за скоуп моего сегодняшнего повествования. Сейчас же, наконец, перейдём к основной теме моих приключений:
1.3. Из чего сделан CSR
Для начала сгенерируем наш запрос с помощью `openssl`:
И посмотрим на его структуру
Version — на данный момент всегда 0.
Subject — основные поля запроса, вроде commonName, countryName и прочие поля по желанию заказчика или требованию CA.
RSA Public Key — точная копия публичного ключа
Extended attribute list — Группа дополнительных полей, например `Subject Alternative Names` (Не изучал, что может быть ещё)
Signature algorithm — Сообщаем CA, каким методом мы подписываем наш запрос
Signature — сама подпись
В целом, основная часть полей прямолинейна: константы пишем как есть, публичный ключ копипастим, необходимые поля заполняем, алгоритм подписания выбираем сами и сообщаем CA. Но вот подпись.
2. Подписываем CSR
(Если нет желания читать про творческие муки, а интересуют сухие технические сведения — смело пропускайте эту часть)
Провозился с этим делом я около недели свободных вечеров в попытках либо подписать, либо свалидировать существующую подпись. Чтение документации ни к чему не приводило, гугление приводило куда угодно, но ни одно из решений не отвечало на вопрос в контексте CSR, спрашивал в рабочих чатах по бэкендерам — не отвечает никто. Пошёл формулировать подробный вопрос на StackOverflow, параллельно пробуя ещё раз.
Сам вопрос я так и не задал, так как удалось найти ошибку в процессе его описания, но, если кому интересно, положу его шаблон под спойлер, а далее перескажу на родном русском, опустив всё то, что уже описано выше.
Шаблон неотправленного вопроса на StackOverflow
I’m diving into cryptography algorithms with current task of getting certificates from Let’s Encrypt by ACME protocol. At a step of generating Certificate Signing Request (CSR) I’ve encountered behaviour I can’t understand: how document signature is generated and why signature generated by me doesn’t match the one generated by openssl req -new .
For my test I’ve generated key pair:
Then generated CSR signed by private.key:
I’ve got my utility to parse and read PEM with DER and ASN.1, so I’ve extracted all parts of req.csr (converted to HEX):
Now where is fun part begins. For my experiments I’m using NodeJS built-in crypto library.
My main goal is to generate signature myself, so let’s try doing it right away.
That doesn’t really match signature generated by openssl.
Tried to do straight forward as I understand from documentation (mentioned above):
This doesn’t match neither CSR signature, nor output of my first attempt.
Ok, let’s just try to verify signature.
Let’s just try to decrypt signature, if it actually encrypted SHA256 hash.
Needless to say they doesn’t match. Also the length of decrypted sign is far from 256 bits. I sliced first 19 bytes (that exceeded 256 bits) to take a closer look.
It’s definitely looks like DER encoded line
Сначала обратимся к документации
Получим из запроса необходимые данные:
Для своих экспериментов я использую NodeJS и встроенную в него библиотеку crypto . Моя основная цель — научиться генерировать подпись самостоятельно, так что с этого и начну
Почему так получилось (СПОЙЛЕР)
Ниже по тексту я обнаружу, что заголовок (30 72) обязателен. Если бы я сразу попробовал его добавить, и подписал с ним, то у меня бы получилась ровно та подпись, что и в CSR.
Не очень похоже на подпись, сгенерированную openssl . Попробуем немного другой способ:
Почему так получилось (СПОЙЛЕР)
Просто захешировать данные и зашифровать хеш ключом недостаточно. Цифровая подпись также подразумевает обёртку в DER формате, содержащую информацию о подписи. Поэтому полученная строка и не сошлась ни с искомой, ни с предыдущим примером. Как эта обёртка выглядит — ниже опишу.
Не совпадает ни с изначальной подписью, ни с полученной предыдущим способом. Решил с последним не разбираться, а ехать дальше. Попробуем провалидировать.
Что ж, давайте просто расшифруем нашу подпись публичным ключом, раз уж это просто зашифрованный SHA256 хеш.
Излишне говорить, что строки не совпадают. Более того, расшифрованная подпись существенно длиннее 256 бит, а её начало выглядит подозрительно структурированной. Отрежем все первые биты, превышающие свойственные SHA256 32 байта, чтобы посмотреть на них поближе.
Изначально я подумал, что это нечто вроде соли, но раскодировав в последствии с десяток-другой всяких ключей и CSR-ов, и взглянув на это дело свежим взглядом, конечно, я уловил, что это тоже DER структура!
И вот он, наш хеш! Все 256 бит (32 байта). Неудивительно, что стандартные библиотечные утилиты не в состоянии провалидировать эту подпись, никто, думаю, не рассчитывает, что она будет так завёрнута. Вот только с нашим хешем она по-прежнему не совпадает.
Вернувшись к изначальным данным и внимательнее на них посмотрев, я увидел, что ошибка была на поверхности.
А может заголовок-то всё же нужен? Добавляю в начало 3073 , хэширую в SHA256 и — Вуаля!
3. Как подписать-то в итоге?
Итог моих мук оказался следующим.
Для того, чтобы подписать CSR, давайте сразу выделим ту часть, которую собираемся подписывать (вместе с заголовком (Тип 30 + длина)):
Выбираем тип хеширования, в нашем случае это SHA256, и загоняем туда наши данные.
Создаём обёртку в DER формате с указанием хеширующего алгоритма
Нашим приватным ключом шифруем полученную обёртку, получаем
Добавляем заголовок BIT STRING (учитываем особенности типа и не забываем добавить 00 в начало строки) и описание алгоритма подписи:
Последним шагом кладём это всё на один уровень с нашим основным документом, заворачиваем в SEQUENCE с нужной длиной — и получаем ровно тот документ, который описан в части 1.3 этого текста.
4. Подведение итогов
Данную статью я решил написать, так как в процессе своих поисков сумел найти довольно мало полезной информации. Ту, что нашёл, и которая оказалась максимально полезной в изучении вопроса, привёл в виде ссылок в тексте, плюс приведу ещё несколько в конце. Однако встретил ещё немало сложностей, до решения которых пришлось с трудами докапываться самостоятельно. Надеюсь, что если кто-то задастся подобной задачей, поиски приведут его сюда, и у него процесс займёт существенно меньше времени.
Это моя первая статья, которую я осмелился отправить на Хабр. Очень надеюсь, что её сочтут познавательной и/или интересной.
Как подпись sig заменить на der
Пытаюсь записать в файл sig И здесь появляется ошибка a bytes-like object is required, not ‘str’. Вроде как понимаю, что ругается на то, что тип данных должен быть bytes, но если переводить signature с помощью bytes(signature, <здесь нужна кодировка, а какая я не могу понять>) или всё таки, что то ещё нужно?
Знаете кого-то, кто может ответить? Поделитесь ссылкой на этот вопрос по почте, через Твиттер или Facebook.
Посмотрите другие вопросы с метками python или задайте свой вопрос.
Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345
Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Электронная подпись: отсоединенная, присоединенная и внутри документа
Электронная подпись может быть по-разному связана с подписанным документом. В статье рассмотрим три варианта, их отличия и особенности использования.
Присоединенная электронная подпись
При создании присоединенной подписи создается новый файл, в который помещается подписываемый документ и подпись к нему. Этот процесс можно сравнить с запечатанным конвертом с документом внутри. с подписанными данными. Этот файл можно копировать, пересылать по почте и т.п.
Нужно учесть, что без специальных криптографических программ невозможно прочитать содержимое подписанного файла. Точно так же, как нельзя извлечь содержимое конверта, не вскрыв его.
Если вы получаете такой документ вне информационных систем, в которых уже есть механизмы проверки, нужно использовать программу, которая умеет проверять подпись и «извлекать» подписанный файл, чтобы его можно было прочитать. В программу нужно будет загрузить единый файл, который содержит и документ, и подпись.
Если вы еще не получили электронную подпись, оформите ЭП в удостоверяющем центре, который прошел аккредитацию. В УЦ Контура есть подписи для сотрудников и руководителей, торгов, отчетности и личных дел.
Отсоединенная электронная подпись
Отсоединенная подпись формируется в отдельном от подписываемого документа файле. Файл подписи называется так же, как подписанный документ и имеет расширение .sig или .sgn. Хранить и пересылать нужно оба эти файла, переименовывать их нельзя.
При этом сам подписываемый файл достается доступным для чтения без криптографических программ. Они нужны, только чтобы проверить действительность подписи. Чтобы проверить подпись, нужно загрузить в программу и подписанный файл, и файл с электронной подписью.
Электронная подпись внутри данных
Электронную подпись внутри документа можно создать только в определенном приложении, например Microsoft Word или Acrobat Reader. В этом случае подпись генерируется как метаданные и только по желанию владельца можно создать на документе поле с подписью.
Очень сложно проверить подлинность подписи вне приложения, в котором она была создана.
Если вам необходимо самостоятельно создать электронную подпись, уточните требования системы, которой вы подписываете документ. Например, чтобы отправить документы в Росреестр или Арбитраж, требует подписывать документы отсоединенной подписью в формате.sig.
Если вы еще не получили электронную подпись, оформите ЭП в удостоверяющем центре, который прошел аккредитацию. В УЦ Контура есть подписи для сотрудников и руководителей, торгов, отчетности и личных дел.
Отсоединенная электронная подпись: как создать файл в формате sig и pkcs 7
Открепленная электронная подпись, в отличии от прикрепленной, хранится в отдельном файле вместе с подписываемым документом. В большинстве случаев она имеет расширение .sig и представляет собой копию открытого сертификата электронной подписи с дополнительным набором мета-данных. А с юридической стороны отличается ли присоединенная и отсоединенная электронная подпись? Какие ещё между ними имеются отличия?
Читайте в статье
Общие сведения о типах электронных подписей
Условно выделяются три вариации электронных подписей (в плане того, как они закрепляются за подписываемым файлом):
- Присоединенная. Сертификат подписи при этом включен в сам подписанный файл и находится в отдельном, защищенном контейнере. При редактировании того самого файла сертификат удаляется.
- Отсоединенная. Сертификат подписи располагается в отдельном файле с расширением .sig. Однако в нем содержатся мета-данные, ссылающиеся на подписанный файл.
- Интегрированная. Сертификат является нераздельной частью подписанного файла, отредактировать такой документ не получится. Подобная схема часто используется в текстовых документах, создаваемых при помощи офисного пакета Microsoft Office или Adobe Acrobat. Открыть подписанный файл получится только через эти приложения при наличии установленного в системе сертификата удостоверяющего центра.
Соответственно, открепленная и прикрепленная электронная подпись отличаются только тем, включены ли они в подписанный документ или нет. Но информация в них содержится идентичная – этот тот же ключ с указанием данных того, кто подписал документ, и специальный набор мета-данных, подтверждающий факт подписи при помощи легитимного ЭЦП.
С юридической точки зрения никакой разницы между открепленной и присоединенной подписью нет. Отличаются они только удобством использования. Например, файл, подписанный отсоединенной подписью, доступен для просмотра даже без средств криптошифрования (установленная КриптоПРО CSP не понадобится). Открыть же документ с присоединенной подписью без них не получится (то же самое касается и интегрированных электронных подписей).
Как создать файл открепленной подписи
Для подачи некоторых запросов может потребоваться файл открепленной электронной подписи. Причем, он бывает нескольких вариантов, отличающихся кодировкой – следует учитывать данный нюанс. Самый простой вариант – это использование КриптоАРМ, программной платформы для работы с электронными подписями (входит в состав определенных редакций КриптоПРО CSP версии 3.6 и старше).
- на любом документе (который нужно подписать) необходимо кликнуть правой кнопкой мыши (вызвать контекстное меню);
- выбрать «КриптоАРМ»;
- в открывшемся окне следует нажать «Далее» несколько раз, дойдя по пункта выбора типа используемой подписи (также можно добавить сразу несколько файлов для подписи, если есть такая необходимость или же создать архив, в который будет помещена открепленная электронная подпись);
- отметить пункт «Сохранить подпись в отдельном файле»;
- выбрать сертификат ЭЦП (от чьего имени будет осуществлена подпись документа);
- нажать «Готово» (при необходимости – подтвердить свои действия вводом секретного пароля).
В итоге рядом с подписываемом файлом появится отсоединенная электронная подпись der или base64 (в зависимости от заданной настройки). Дважды кликнув на файле сертификата можно будет просмотреть базовую информацию о нем – кому и кем выдан, срок действия и так далее.
Если после нажатия «Готово» система выдает ошибку, то в большинстве случаев это указывает на отсутствие сертификата удостоверяющего центра или на отсутствие прав для работы с электронными подписями (то есть, введено ограничение для пользователей, вошедших под учетной записью «Гость»).
Создание через командную строку
Базовая команда для создания отсоединенной электронной подписи выглядит следующим образом: [путь в проводнике]cryptcp [<команда> [<опции и файлы>]]. А вот список команд и опций, которые можно задавать для подписываемых файлов, доступен в файле Readme, поставляющийся вместе с КриптоПРО CSP.
Таким же образом создается отсоединенная электронная подпись в формате pkcs 7 (может потребоваться для работы определенных сайтов, где предусмотрена возможность отправки подписанных запросов), с определенными параметрами шифрования или с защитой (для открытия понадобится ввести код). В плане функционала и возможностей консольная утилита ни в чем не уступает тому же КриптоАРМ.
Итого, проще всего создать файл отсоединенной электронной подписи с помощью надстройки КриптоАРМ для программы КриптоПРО CSP. Подпись при этом хранится в отдельном файле, в него входят все данные из открытого сертификата ЭЦП, а также набор мета-данных, ссылающихся на подписанный файл. При отсутствии КриптоАРМ (программа — платная) можно использовать консольную утилиту Cryptcp, поставляющуюся вместе с КриптоПРО CSP, но там процесс создания отсоединенной подписи несколько сложнее.