Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) – ЭЦП Эксперт

Где применяется: что даёт подпись документа эцп

Ключ сертификата ЭП создаётся методом криптографических преобразований, с помощью специального программного обеспечения — СКЗИ. Это позволяет надёжно защитить внесённые в подпись данные о владельце. Доступ к ключу имеют только владелец и доверенные лица, указанные в документах.

Тщательная проверка данных и сохранение ключевой информации о пользователе становятся гарантами надёжности ЭЦП. Нанесённая на текст, графический материал или договор, подпись закрепляет авторство подписанта. Механизм проверки подлинности цифрового аналога подписи подтверждает правомерность действия.ЭЦП используется в следующих случаях:

Электронная подпись — самый надёжный метод защитить информацию о сделках и создании документов от третьих лиц. Принцип криптографии создаёт сложный код, расшифровать который можно лишь с помощью сертификата или пароля доступа. Взлом шифра невозможен, что обеспечивает доверие к ЭЦП.

Регистрация права на подпись проводится через удостоверяющие центры. Право принимать, проверять и хранить конфиденциальную информацию о клиенте имеют только сертифицированные организации. Каждая созданная ЭП уникальна по своей структуре и коду.

Что такое libreoffice и для чего его используют

Libreoffice — это многофункциональный офисный пакет для настольных компьютерных систем с открытым программным обеспечением. С его помощью можно создавать текстовые документы, таблицы, презентации, векторную графику, системы баз данных и математические формулы.

Программа использует OpenDocument Format(ODF) — файл в XML-формате. Стандарт этого файла разработан некоммерческой организацией по стандартизации — OASIS. Цель создания — разработка независимого формата, который читается в любом текстовом редакторе, без привязки к определённому программному обеспечению и работает на любой операционной системе.

Принят 1 мая 2006 года независимым комитетом по стандартам как международный стандарт ISO/IEC 26300. В июле 2021 года стандартизован ODF версии 1.2 (ISO/IEC 26300-1:2021).

Политика разработчиков предусматривает бесплатное скачивание, установку и свободное распространение LibreOffice без нарушения авторского права. Это способствует популярности программного обеспечения в органах государственного управления.

Благодаря поддержке более 40 языков и открытому формату файла, пользователи со всего мира модифицируют, тестируют новые версии и предлагают свои идеи касательно развития проекта, учитывая актуальные тенденции, применяемые к электронным документам. Одна из таких тенденций электронная цифровая подпись (ЭЦП).

Принцип работы: что необходимо для использования эп

Принцип работы подписи заключается в кодировании документа. Как только нанесена ЭЦП, добавить новую информацию в файл невозможно. Вся процедура проходит через специальное ПО. Чтобы внести изменения, необходимо открыть документ, внести в него правки и затем подписать документ электронной подписью с Рутокена снова.

При этом на документе будет проставлена новая подпись с актуальным временем и датой подписания. Именно это качество придаёт документу надёжность.Чтобы правильно работать с документом, необходимо запомнить последовательность действий при работе с ЭП.

Порядок работы с документом под ЭЦП:

Создание цифровой подписи

В главном меню выберите пункт Сервис → Параметры

В появившемся окне выберите закладку Безопасность и нажмите кнопку Цифровые подписи.

Появится окно цифровой подписи. Это окно позволяет пользователю добавить свои личные сертификаты, которые будут использоваться для формирования ЭП. Нажмите Добавить.

В появившемся окне представлен список сертификатов пользователя, установленных на компьютере.

Выберите сертификат и нажмите ОК.

Появится окно ввода пароля ключевого контейнера. Введите пароль, соответствующий контейнеру выбранного сертификата.

Если пароль введен неверно, повторите попытку. При успешном вводе пароля появится окно подтверждения подписи.

В результате подписания документа, в строке состояния в правом нижнем углу появится значок, свидетельствующий о том, что данный документ создан с ЭП.

Для проверки статуса подписи, нажмите на это значок.

При изменении подписанного документа, цифровая подпись пропадает, о чем свидетельствует сообщение:

Установка «КриптоПро Office Signature»

Установка продукта «КриптоПро Office Signature» производится на компьютер с программным обеспечением:

ОС: Windows XP/2003/Vista/2008/2008 R2/7 (32 или 64 бит);

Microsoft Office 2007 или Microsoft Office 2021 (32 или 64 бит);

КриптоПро CSP 2.0 и выше.

Установка производится путём запуска дистрибутива:

XMLDSigAddIn-win32.msi (для 32-битных версий MS Office)

XMLDSigAddIn-x64.msi (для 64-битных MS Office)

Добавление строкиподписи

На вкладке Вставка в группе Текст нажмите на стрелку рядом с кнопкой Строка подписи и в появившемся меню выберите Строка электронной подписи (КРИПТО-ПРО).

Подписание документа, содержащего цифровую подпись

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

Во вкладке Сервис, выбрать Параметры. В появившемся окне на вкладке Безопасность, нажать кнопку Цифровые подписи.

Добавить сертификаты для подписания документа. Выделить сертификат и нажать ОК.

Нажатием двойного щелчка мыши на значке, свидетельствующем о подписи документа, на нижней панели задач, откроется окно Цифровая подпись. Это окно содержит информацию о подписях документа.

При внесении изменений в документ, подписи становятся недействительными, поэтому рекомендуется подписывать уже готовые документы.

Для просмотра статуса подписи, опять нажать на иконку в нижней части. Обе подписи будут недействительными.

Замечание:

При использовании отправителем и получателем одинаковой версии Microsoft Office совместимость форматов подписи обеспечивается при использовании версии КриптоПро CSP 3.0 и выше.

Если происходит открытие подписанного документа версии Microsoft Office Word 2003 в Microsoft Office Word 2007, то необходимо использовать КриптоПро CSP 3.6.1.

Создание и проверка ЭП

После завершения редактирования документа и сохранения документа можно добавить к документу ЭП.

Подписанный документ будет доступен только для чтения.

Если в подписанный документ нужно внести изменения, то все созданные ЭП следует удалить из документа.

Для создания ЭП в MS Office Word 2007 или Excel 2007:

В главном меню выберите пункт Подготовить, затем Добавить цифровую подпись (КРИПТО-ПРО)

Для создания ЭП в MS Office Word 2021 или Excel 2021:

На вкладке Файл в разделе Сведения нажмите кнопку Добавить цифровую подпись (КРИПТО-ПРО)

Затем появится окно подписания документа. Это окно позволяет пользователю указать свой личный сертификат, который будет использоваться для формирования ЭП. Один из сертификатов будет выбран автоматически.

Если нужно выбрать другой сертификат — нажмите кнопку Изменить. В появившемся окне представлен список сертификатов пользователя, установленных на компьютере.

Выберите сертификат и нажмите ОК. Если для доступа к ключевому контейнеру требуется задать пароль — появится окно ввода пароля.

Если пароль введен неверно, повторите попытку. При успешном вводе пароля появится окно о статусе подписания документа.

После подписи документа, в строке состояния окна документа появится значок, свидетельствующий о том, что данный документ имеет ЭП.

Для проверки статуса подписи, нажмите на этот значок, и справа появится вкладка Подписи, в которой указан статус подписи. Для просмотра состава подписи щелкните правой кнопкой мыши на строке подписи и выберите пункт Состав подписи.

Появится более детальное сообщение о составе подписи.

При открытии измененного документа, содержащего ЭП, появится сообщение о том, что документ содержит недействительную подпись.

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

Состав подписи можно посмотреть нажатием правой кнопки мышки

Подписание документа, содержащего цифровую подпись

Если документ уже содержит цифровую подпись, его можно подписать еще раз.

Для добавления новой ЭП в MS Office Word 2007 или Excel 2007:

В главном меню выберите пункт Подготовить, затем Добавить цифровую подпись (КРИПТО-ПРО).

Для добавления новой ЭП в MS Office Word 2021 или Excel 2021:

На вкладке Файл в разделе Сведения нажмите кнопку Добавить цифровую подпись (КРИПТО-ПРО).

Дальнейшие действия аналогичны созданию первой подписи.

В результате на вкладке Подписи появится еще одна действительная подпись.

Читайте также:  Продление ЭЦП. Как самостоятельно продлить ЭЦП

Для просмотра состава подписи, щелкните правой кнопкой мыши на строке нужной подписи и выберите пункт Состав подписи.

Просмотр свойств электроннойподписи

В окне документа в панели Подписи щелкните по стрелке требуемой подписи и выберите команду Состав подписи. Можно также дважды щелкнуть мышью по строке подписи в тексте документа.

1 Добавление строки подписи

На вкладке Вставка в группе Текст нажмите на стрелку рядом с кнопкой Строка подписи и в появившемся меню выберите Строка подписи (КРИПТО-ПРО).

Появится диалоговое окно Настройка подписи. В нём можно ввести информацию о лице, которое будет добавлять подпись. Эти сведения будут отображены в строке подписи в документе. Заполнять все пункты необязательно.

  • в поле Предложенный подписывающий вводится ФИО подписывающего.
  • в поле Должность предложенного подписывающего — название должности подписывающего.
  • в поле Адрес электронной почты предложенного подписывающего — адрес электронной почты подписывающего
  • в поле Инструкции для подписывающего можно ввести рекомендации или требования для подписывающего. Эти инструкции отображаются в диалоговом окне Подпись, в котором подписывающий будет ставить подпись.
  • для разрешения самому подписывающему добавления комментариев в процессе создания подписи установите флажок Разрешить подписывающему добавлять примечания в окне подписи.
  • для отображения даты подписания документа, установите флажок Показывать дату подписи в строке подписи.

Нажмите кнопку ОК.

Созданная строка подписи представляет собой графический объект, который можно переместить на любое место в тексте документа.

При необходимости можно повторить добавление видимой строки подписи в случае, если документ подписывается разными людьми.

2 Добавление подписи в строку подписания

Дважды щелкните мышью в документе по строке подписи, в которую требуется ввести подпись. Появится диалоговое окно Подписание

В верхней части окна можно просмотреть дополнительные сведения о создаваемой подписи нажав ссылку Дополнительные сведения о том, что подписывается.

При нажатии ссылки Выбрать рисунок можно добавить изображение, например, своей рукописной подписи.

Один из имеющихся на компьютере сертификатов будет выбран автоматически.

Для выбора другого цифрового сертификата для подписи нажмите кнопку Изменить и в окне Выбор сертификата выберите необходимый сертификат

В окне Подписание нажмите кнопку Подписать. Появится информационное окно подтверждения подписи, в этом окне нажмите кнопку ОК. Для удобства работы можно установить флажок Больше не показывать это сообщение.

Созданная подпись будет отображена в документе. Одновременно будет отображена вкладка Подписи, в которой приведен список подписей в документе. Созданная подпись будет находиться в разделе Действительные подписи. Незаполненная подпись — в разделе Требуемые подписи.

После того, как в документе появилась первая (или единственная) цифровая подпись, он автоматически помечается как окончательный и доступен только для чтения.

Если документ содержит единственную подпись, то на этом работа с ним заканчивается.

Если документ содержит несколько строк подписей для нескольких лиц, документ следует передать этим лицам для подписания.

При открытии документа, содержащего незаполненные строки подписи, появляется панель сообщений.

Щелкните по кнопке Просмотр подписей, после чего на вкладке Подписи будет отображен список подписей в документе.

Для добавления подписи в строку подписи дважды щелкните по строке подписи в тексте документа или в панели Подписи нажмите правой кнопкой мыши на нужной строке подписи и выберите команду Подписать.

В окне Подписание введите необходимую информацию и нажмите кнопку Подписать

После создания последней подписи в документе в панели Подписи все подписи будут находиться в разделе Действительные подписи

3 Просмотр свойств подписи

В окне документа в панели Подписи щелкните по стрелке требуемой подписи и выберите команду Состав подписи. Можно также дважды щелкнуть мышью по строке подписи в тексте документа.

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

Подписанный документ, можно просматривать, печатать, выделять фрагменты и копировать их в буфер обмена.

Можно скопировать и строку подписи в другой документ, но эта строка подписи вставляется без цифровой подписи. Необходимо добавление подписи в строку подписи в новом документе.

При попытке сохранить подписанный документ под другим именем, появляется информационное окно:

Если нажать кнопку Да, все подписи в документе станут недействительными.

Документ, содержащий цифровые подписи, автоматически помечается как окончательный. При попытке снятия этой отметки появляется информационное окно.

Если нажать кнопку Да, то любое действие по редактированию документа приведёт к тому, что все подписи в документе станут недействительными.

Тогда в строках подписи появится текст Недействительная подпись. На вкладке Подписи данные подписи будут находиться в разделе Недействительные подписи.

Документ, содержащий недействительную подпись, можно подписать повторно.

Для этого на вкладке Подписи щелкните по стрелке недействительной подписи и выберите команду Подписать еще раз. Можно также щелкнуть правой кнопкой мыши по строке подписи в тексте документа и в контекстном меню выбрать команду Подписать еще раз.

Заново заполните окно Подписание и нажмите кнопку Подписать.

Openoffice: подписание документов с помощью эцп

Подписать с помощью ЭЦП электронный документ, созданный в бесплатном офисном пакете OpenOffice, не получится. Он не поддерживает создание подписи в документе с сертификатами, выданными с помощью СКЗИ КриптоПро. Разработка плагина для OpenOffice КриптоПро пока не планируется.

Документы для фнс: как подписать эцп

Для работы в личном кабинете на сайте ФНС нужна усиленная квалифицированная электронная подпись. С её помощью можно сдавать отчётность онлайн, за исключением декларации по НДС. Помимо подписи, необходим идентификатор налогоплательщика.

Что нужно сделать, чтобы его получить:

После этого можно вести электронный документооборот с налоговой через личный кабинет.

Использование криптопро csp в word/excel из состава microsoft office 2003, 2007, 2021, 2021, 2021

Данная инструкция описывает порядок действий по конфигурации программ Word и Excel из состава Microsoft Office 2003, 2007, 2021, 2021, 2021, для создания и проверки электронных цифровых подписей документов. Цифровые подписи используют в тех случаях, когда требуется гарантировать подлинность, целостность и происхождение (авторство) документа, поэтому подписывать документ необходимо только в том случае, когда он окончательно готов.

Картинки: визирование подписью графических файлов

Электронная печать может применяться на графических файлах. Для работы с ней подходят файловые разрешения BMP, JPEG, PNG, PDF и др. Цифровая подпись служит защитой изображения и устанавливает авторство рисунка.Подпись используется для защиты:

Крипто арм: помощник предпринимателя

«КриптоАРМ» — специализированное ПО, созданное под программу взаимодействия электронных подписей. Это удобный и финансово выгодный инструмент, официально лицензированный в РФ.

«КриптоАРМ» работает с форматами:

Программа имеет несколько версий, каждая наделена уникальным функционалом. «КриптоАРМ Старт» — базовая версия с минимальным набором инструментов, предоставляется бесплатно. Платные версии дают тестовый период, за который пользователь может выбрать необходимые для работы функции.

После установки на ПК программа позволяет нанести электронную подпись на файл из контекстного меню или в главном окне программы. Алгоритм работы слегка различен. Но в обоих вариантах работа завершается пунктом «Подписать».

Ошибки: часто встречающиеся трудности в работе с эцп

Причины возникновения ошибки:

В случае возникновения ошибки обратитесь к администратору. Чаще всего причины сбоев вскрываются при детальной проверке программного обеспечения, установленного на оборудовании.

Если после нажатия кнопки «Подписать» вместо документа выдаётся ошибка, значит, на ПК не установлены программные пакеты от «КриптоПро». По законодательству только это ПО имеет официальное признание в Российской Федерации. Его функционал и средства защиты отвечают требованиям ФСБ.

«Астрал-М» выпускает электронную подпись для физических лиц, ИП и организаций. С ней можно работать на большинстве государственных порталов, подписывать отчётность и любые документы, в том числе в формате Word и PDF. Специалисты нашей техподдержки готовы оказать помощь в установке ЭЦП на компьютер и настройке рабочего места.

Читайте также:  Проверка электронного документа - Портал услуг Федеральной службы государственной регистрации, кадастра и картографии

Подписание odf документов

Для примера будет использоваться ПО “Текст LibreOffice”

  1. Запустить текстовый редактор LibreOffice:
  2. “Пуск” — “Офис” — “Текст LibreOffice”
  3. Открыть нужный *.odt документ
    1. перейти в меню
    2. “Файл” — “Цифровые подписи” — “Цифровые подписи…”
    3. Нажать кнопку «Подписать документ…»;
    4. В открывшемся окне следует выбрать нужный сертификат и нажать кнопку «Подписать»;
    1. Нажать кнопку «Закрыть»
    2. В результате на экране появится сообщение, что подпись верна.

Подпись макросов в документе

Подпись макросов в документе происходит автоматически. Для того чтобы подписать только макросы, необходимо выбрать команду «Сервис» – «Макросы» – «Цифровые подписи», далее действия, описанные выше.

Порядок действий при подписании файлов в формате pdf

Шаг 1

Открываем файл PDF .

Шаг 2

Установка расширений PDF.

Шаг 3

Сертификаты.

Шаг 4

Выбор действия с Сертификатами.

Шаг 5

Выбор места штампа.

Шаг 6

Выбор сертификата.

Шаг 7

Просмотр сертификата.

Процесс: как подписать электронной подписью документ pdf

Электронный документ в программах AdobeLiveCycle ES, AdobeAcrobat и AdobeReader поможет подписать приложение «КриптоПро PDF». Это электронный цифровой модуль, позволяющий перенести ЭЦП в ПДФ формат. Для электронного ПДФ файла плагин формирует переходную ПДФ форму с расширением sig.

Чтобы подписание ЭЦП было возможно, необходима программа для чтения ПДФ-файлов версии AdobeAcrobatPro или AcrobatReader DC. С подписанием документ распознаётся в «КриптоПро».

Инструкция, как поставить подпись:

Цифровая подпись PDF аналогична подписям в «КриптоПро». Подпись распознаётся системой при подаче документов в налоговую службу или аналогичные организации.

Рисунок 10. строка состояния microsoft word 2007/2021/2021

Для проверки статуса подписи, нажмите на этот значок, и справа появится вкладка

Подписи, в которой указан статус подписи.

Рисунок 12. состав подписи

Если открыть документ для редактирования, все подписи удаляются, об этом выводится предупреждение.

При открытии измененного документа, содержащего недействительную ЭП, появится сообщение.

Рисунок 16. строка электронной подписи (крипто-про)

Появится диалоговое окно Настройка подписи (см. Рисунок 17).

Рисунок 18. строка подписи

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

Рисунок 20. подтверждение подписи

Созданная подпись будет отображена в документе. Одновременно будет отображена вкладка Подписи, в которой приведен список подписей в документе. Созданная подпись будет находиться в разделе Действительные подписи. Незаполненная подпись – в разделе Требуемые подписи.

Рисунок 22. документ с несколькими подписями

Щелкните по кнопке Просмотр подписей, после чего на вкладке Подписи будет отображен список подписей в документе.

Рисунок 26. меню свойств подписи

Свойства подписи буду отображены в соответствующем окне.

Рисунок 27. просмотр состава подписи

Для просмотра сертификата, использовавшегося при создании подписи, нажмитекнопку

Просмотр.

Рисунок 29. сохранение подписанного документа

Если нажать кнопку Да, все подписи в документе станут недействительными.

Документ, содержащий цифровые подписи, автоматически помечается как окончательный. При попытке снятия этой отметки появляется информационное окно.

Рисунок 30. сообщение при попытке редактирования документа

Если нажать кнопку Да, то любое действие по редактированию документа приведёт к тому, что все подписи из документа будут удалены.

Рисунок 9. сведения о подписанном документе

В строке состояния окна документа появится значок, свидетельствующий о том, что данный документ имеет электронную подпись.

Типы файлов и расширения

Mime-типы и расширения файлов, которые можно подписать с помощью LibreOffice и СКЗИ КриптоПро:

Электронная подпись гост р 34.10 документов формата pdf в офисном пакете libreoffice

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

Пришла пора исполнить свой гражданский долг – заплатить налоги. Платить налоги мы будем через портал

Госуслуги

. В личный кабинет портала Госуслуг будем входить

с помощью

электронной подписи (

терминология

портала Госуслуг ), т.е. имея на руках сертификат, полученный в аккредитованном удостоверяющем центре (УЦ), и закрытый ключ. И то и другое я храню на

токене PKCS#11

с поддержкой российской

криптографии

:


Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

И вот, выполнив свой гражданский долг, я решил еще раз проверить работу электронной подписи в офисном пакете libreoffice.

Почему я решил это сделать? Для доступа к порталу Госуслуг я использую ОС Linux и браузер Redfox, который представляет собой доработанный с учетом поддержки российской криптографии браузер Mozilla Firefox. Как известно, офисный пакет libreoffice в качестве хранилища сертификатов также использует хранилище NSS.

Браузер Redfox-52 был установлен в папку /usr/lical/lib64/firefox-52.

Для подключения библиотек пакета NSS (Network Security Services) с поддержкой ГОСТ-алгоритмов устанавливаем значение переменной LD_LIBRARY_PATH следующим образом:

В качестве хранилища сертификатов в libreoffice как правило используется хранилище сертификатов из браузера Firefox, почтового клиента Thunderbird или интегрированного пакета Seamonkey. Ничто не мешает использовать хранилище сертификатов браузеров GoogleChrome/Cromium или

создать

свое независмое хранилище (Сервис->Параметры->Безопасность->Сертификат):

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

После того как выбрано хранилище, подключены библиотеки, запускаем libreoffice, создаем файл формата odt и пытаемся его подписать (Файл->Цифровые подписи->Цифровые подписи).

Сертификаты в хранилище Firefox/NSS успешно отображаются и проверяются:

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

Однако, подпись после выбора сертификата и нажатия кнопки «ОК» не формируется:

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

Похоже libreoffice не хочет понимать российские криптоалгоритмы, несмотря на то, что используется NSS из браузера Redfox, который понимает ГОСТ-овые алгоритмы, что подтверждается успешной проверкой сертификатов.

Делаем вторую попытку: на этот раз попытаемся подписать PDF-файл. Для этого подготовленный документ экспортируем в PDF-формат. Для подписания PDF-файла его, естественно, необходимо загрузить (Файл->Цифровые подписи->Подписать PDF). После его загрузки пытаемся его подписать (Файл->Цифровые подписи->Цифровые подписи) (см.выше, выбираем сертификат, прописываем, например, цель подписания документа):

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

И подпись формируется!!! Мы видим, что подпись, сформирования на базе сертификата «Test 12 512» с ключом ГОСТ Р 34.10-2021 512 бит. Подпись верна.

Выходим из libreoffice. Снова запускаем libreoffice, загружаем подписанный pdf-файл, проверяем подписи. Все ОК. Просматривает сертификаты подписантов. Все ОК. Чудеса! Подпись PDF-файлов работает. Ставим вторую, третью подпись… Все работает. Но что-то не дает покоя. Делаем дополнительную проверку.

Открываем подписанный PDF-файл (я использовал встроенный редактор от mc – Midnight Commander — консольный файловый менеджер для Linux). Находим электронную подпись (/Type/Sig/ ):

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

Как видим, подпись хранится в символьном шестнадцатеричном виде. Копируем ее и сохраняем в файле. Для конвертации файла в бинарный вид (DER-кодировка) воспользуемся утилитой xxd:

Полученный файл содержит отсоединенную подпись формата PKCS#7 в DER-кодировке. Теперь это подпись можно просмотреть любым asn1-prase-ом, например, утилитой openssl. Но поскольку мы говорим о пакете NSS, то воспользуемся утилитой derdump или

утилитой pp

:

И тут стало понятно, что не все так хорошо. Да, алгоритм подписи Digest Encryption Algorithm: GOST R 34.10-2021 Key 512 в соответствии с выбранным для подписи сертификатом, но подпись формируется от хэша, посчитанному по алгоритму SHA-256 (Digest Algorithm (1): SHA-256). А это неправильно с точки: хэш для GOST R 34.10-2021 Key 512 должен считаться по алгоритму ГОСТ Р 34.11-2021-512.

Читайте также:  Поправки в закон № 218-ФЗ защитят владельцев жилья от мошенничеств

Приступаем а анализу исходного кода libreoffice: не так страшен черт как его малюют. В данной статье мы рассматриваем использование пакета NSS для формирования электронной подписи. Если кто предпочитает на платформе MS Windows, использовать CryptoAPI (и, соответственно, ГОСТ-CSP), может по аналогии с данным материалом сделать соответствующую доработку.

Анилиз показал, что правки придется внести всего в два файла:
~/libreoffice-5.3.7.2/vcl/source/gdi/pdfwriter_impl.cxx
~/libreoffice-5.3.7.2/xmlsecurity/source/pdfio/pdfdocument.cxx

Эти изменения связаны с правильным выбором хэш-функции для ГОСТ-овых сертификатов. Выбор хэш-функции будем определять в зависимости от типа ключа сертификата. Выбор хэш-алгоритма, например, в PDFWriter::Sign (файл pdfwriter_impl.cxx) будет выглядеть так:

bool PDFWriter::Sign(PDFSignContext& rContext) { #ifndef _WIN32   SECKEYPublicKey *pubk = NULL; SECOidTag hashAlgTag; HASH_HashType hashType; int hashLen; CERTCertificate *cert = CERT_DecodeCertFromPackage(reinterpret_cast(rContext.m_pDerEncoded), rContext.m_nDerEncoded); if (!cert) { SAL_WARN("vcl.pdfwriter", "CERT_DecodeCertFromPackage failed"); return false; }   pubk = CERT_ExtractPublicKey(cert); if (pubk == NULL) return NULL;   switch(pubk->keyType){ case gost3410Key: hashAlgTag = SEC_OID_GOSTHASH; hashType = HASH_AlgGOSTHASH; hashLen = SHA256_LENGTH; break; case gost3410Key_256: hashAlgTag = SEC_OID_GOST3411_2021_256; hashType = HASH_AlgGOSTHASH_12_256; hashLen = SHA256_LENGTH; break; case gost3410Key_512: hashAlgTag = SEC_OID_GOST3411_2021_512; hashLen = SHA256_LENGTH * 2; hashType = HASH_AlgGOSTHASH_12_512; break; default: hashAlgTag = SEC_OID_SHA256; hashType = HASH_AlgSHA256; hashLen = SHA256_LENGTH; break; }   HashContextScope hc(HASH_Create(hashType)); . . . }

Остальные изменения по логике аналогичны этим. Патч для файла ~/libreoffice-5.3.7.2/vcl/source/gdi/pdfwriter_impl.cxx находится

здесь:

--- pdfwriter_impl_ORIG.cxx 2021-10-25 17:25:39.000000000  0300     pdfwriter_impl.cxx 2021-10-31 19:48:32.078482227  0300 @@ -6698,6  6698,9 @@ CERTCertificate *cert, SECItem *digest) {   SECKEYPublicKey *pubk = NULL;   SECOidTag hashAlgTag;   NSSCMSMessage *result = NSS_CMSMessage_Create(nullptr); if (!result) { @@ -6732,8  6735,31 @@ NSS_CMSMessage_Destroy(result); return nullptr; } -   pubk = CERT_ExtractPublicKey(cert);   if (pubk == NULL)   return NULL;   switch(pubk->keyType){   case gost3410Key:   hashAlgTag = SEC_OID_GOSTHASH;  fprintf(stderr, "CreateCMSMessage: gost3410Key Use HASH_AlgGOSTHASH_=%dn", hashAlgTag);   break;   case gost3410Key_256:   hashAlgTag = SEC_OID_GOST3411_2021_256;  fprintf(stderr, "CreateCMSMessage: gost3410Key_256 Use HASH_AlgGOSTHASH_=%dn", hashAlgTag);   break;   case gost3410Key_512:   hashAlgTag = SEC_OID_GOST3411_2021_512;  fprintf(stderr, "CreateCMSMessage: gost3410Key_512 Use HASH_AlgGOSTHASH_=%dn", hashAlgTag);   break;   default:   hashAlgTag = SEC_OID_SHA256;   break;   }      *cms_signer = NSS_CMSSignerInfo_Create(result, cert, hashAlgTag);   if (!*cms_signer) { SAL_WARN("vcl.pdfwriter", "NSS_CMSSignerInfo_Create failed"); @@ -6773,8  6799,8 @@ NSS_CMSMessage_Destroy(result); return nullptr; }   if (NSS_CMSSignedData_SetDigestValue(*cms_sd, hashAlgTag, digest) != SECSuccess) - if (NSS_CMSSignedData_SetDigestValue(*cms_sd, SEC_OID_SHA256, digest) != SECSuccess) { SAL_WARN("vcl.pdfwriter", "NSS_CMSSignedData_SetDigestValue failed"); NSS_CMSSignedData_Destroy(*cms_sd); @@ -6982,6  7008,10 @@ bool PDFWriter::Sign(PDFSignContext& rContext) { #ifndef _WIN32   SECKEYPublicKey *pubk = NULL;   SECOidTag hashAlgTag;   HASH_HashType hashType;   int hashLen; CERTCertificate *cert = CERT_DecodeCertFromPackage(reinterpret_cast(rContext.m_pDerEncoded), rContext.m_nDerEncoded); @@ -6990,8  7020,33 @@ SAL_WARN("vcl.pdfwriter", "CERT_DecodeCertFromPackage failed"); return false; }   pubk = CERT_ExtractPublicKey(cert);   if (pubk == NULL)   return NULL;   switch(pubk->keyType){   case gost3410Key:   hashAlgTag = SEC_OID_GOSTHASH;   hashType = HASH_AlgGOSTHASH;   hashLen = SHA256_LENGTH;   break;   case gost3410Key_256:   hashAlgTag = SEC_OID_GOST3411_2021_256;   hashType = HASH_AlgGOSTHASH_12_256;   hashLen = SHA256_LENGTH;   break;   case gost3410Key_512:   hashAlgTag = SEC_OID_GOST3411_2021_512;   hashLen = SHA256_LENGTH * 2;   hashType = HASH_AlgGOSTHASH_12_512;   break;   default:   hashAlgTag = SEC_OID_SHA256;   hashType = HASH_AlgSHA256;   hashLen = SHA256_LENGTH;   break;   }   HashContextScope hc(HASH_Create(hashType)); - HashContextScope hc(HASH_Create(HASH_AlgSHA256)); if (!hc.get()) { SAL_WARN("vcl.pdfwriter", "HASH_Create failed"); @@ -7005,15  7060,18 @@ HASH_Update(hc.get(), static_cast(rContext.m_pByteRange2), rContext.m_nByteRange2); SECItem digest; - unsigned char hash[SHA256_LENGTH];   unsigned char hash[SHA256_LENGTH * 2];   digest.data = hash; - HASH_End(hc.get(), digest.data, &digest.len, SHA256_LENGTH);   HASH_End(hc.get(), digest.data, &digest.len, hashLen);   hc.clear(); #ifdef DBG_UTIL { FILE *out = fopen("PDFWRITER.hash.data", "wb"); - fwrite(hash, SHA256_LENGTH, 1, out);   fwrite(hash, hashLen, 1, out);   fclose(out); } #endif @@ -7078,8  7136,8 @@ fclose(out); } #endif   HashContextScope ts_hc(HASH_Create(hashType)); - HashContextScope ts_hc(HASH_Create(HASH_AlgSHA256)); if (!ts_hc.get()) { SAL_WARN("vcl.pdfwriter", "HASH_Create failed"); @@ -7090,16  7148,19 @@ HASH_Begin(ts_hc.get()); HASH_Update(ts_hc.get(), ts_cms_signer->encDigest.data, ts_cms_signer->encDigest.len); SECItem ts_digest; - unsigned char ts_hash[SHA256_LENGTH];   unsigned char ts_hash[SHA256_LENGTH * 2];   ts_digest.type = siBuffer; ts_digest.data = ts_hash; - HASH_End(ts_hc.get(), ts_digest.data, &ts_digest.len, SHA256_LENGTH);   HASH_End(ts_hc.get(), ts_digest.data, &ts_digest.len, hashLen);   ts_hc.clear(); #ifdef DBG_UTIL { FILE *out = fopen("PDFWRITER.ts_hash.data", "wb"); - fwrite(ts_hash, SHA256_LENGTH, 1, out);   fwrite(ts_hash, hashLen, 1, out);   fclose(out); } #endif @@ -7111,7  7172,8 @@ src.messageImprint.hashAlgorithm.algorithm.data = nullptr; src.messageImprint.hashAlgorithm.parameters.data = nullptr; - SECOID_SetAlgorithmID(nullptr, &src.messageImprint.hashAlgorithm, SEC_OID_SHA256, nullptr);   SECOID_SetAlgorithmID(nullptr, &src.messageImprint.hashAlgorithm, hashAlgTag, nullptr);   src.messageImprint.hashedMessage = ts_digest; src.reqPolicy.type = siBuffer; @@ -7340,11  7402,13 @@ // Write ESSCertIDv2.hashAlgorithm. aCertID.hashAlgorithm.algorithm.data = nullptr; aCertID.hashAlgorithm.parameters.data = nullptr; - SECOID_SetAlgorithmID(nullptr, &aCertID.hashAlgorithm, SEC_OID_SHA256, nullptr);   SECOID_SetAlgorithmID(nullptr, &aCertID.hashAlgorithm, hashAlgTag, nullptr);   // Write ESSCertIDv2.certHash. SECItem aCertHashItem; - unsigned char aCertHash[SHA256_LENGTH]; - HashContextScope aCertHashContext(HASH_Create(HASH_AlgSHA256));   unsigned char aCertHash[SHA256_LENGTH*2];   HashContextScope aCertHashContext(HASH_Create(hashType));   if (!aCertHashContext.get()) { SAL_WARN("vcl.pdfwriter", "HASH_Create() failed"); @@ -7354,7  7418,8 @@ HASH_Update(aCertHashContext.get(), reinterpret_cast(rContext.m_pDerEncoded), rContext.m_nDerEncoded); aCertHashItem.type = siBuffer; aCertHashItem.data = aCertHash; - HASH_End(aCertHashContext.get(), aCertHashItem.data, &aCertHashItem.len, SHA256_LENGTH);   HASH_End(aCertHashContext.get(), aCertHashItem.data, &aCertHashItem.len, hashLen);   aCertID.certHash = aCertHashItem; // Write ESSCertIDv2.issuerSerial. IssuerSerial aSerial;

Патч для файла ~/libreoffice-5.3.7.2/xmlsecurity/source/pdfio/pdfdocument.cxx находится

здесь:

--- pdfdocument_ORIG.cxx 2021-10-25 17:25:39.000000000  0300     pdfdocument.cxx 2021-10-31 19:49:34.174485641  0300 @@ -2400,6  2400,19 @@ case SEC_OID_PKCS1_SHA512_WITH_RSA_ENCRYPTION: eOidTag = SEC_OID_SHA512; break;   case SEC_OID_GOST3410_SIGN_256:   case SEC_OID_GOST3411_2021_256:   eOidTag = SEC_OID_GOST3411_2021_256;   break;   case SEC_OID_GOST3410_SIGN_512:   case SEC_OID_GOST3411_2021_512:   eOidTag = SEC_OID_GOST3411_2021_512;   break;   case SEC_OID_GOST3410_SIGNATURE:   case SEC_OID_GOSTHASH:   eOidTag = SEC_OID_GOSTHASH;   break;   default: break; } @@ -2453,6  2466,16 @@ case SEC_OID_SHA512: nMaxResultLen = msfilter::SHA512_HASH_LENGTH; break;   case SEC_OID_GOST3411_2021_256:   nMaxResultLen = msfilter::SHA256_HASH_LENGTH;   break;   case SEC_OID_GOST3411_2021_512:   nMaxResultLen = msfilter::SHA512_HASH_LENGTH;   break;   case SEC_OID_GOSTHASH:   nMaxResultLen = msfilter::SHA256_HASH_LENGTH;   break;   default: SAL_WARN("xmlsecurity.pdfio", "PDFDocument::ValidateSignature: unrecognized algorithm"); return false;

После внесения изменений проводим сборку пакета libreoffice. Внесенные изменения коснулись трех библиотек (/usr/lib64/libreoffice/program):

  • libvcllo.so;
  • libxmlsecurity.so;
  • libxsec-xmlsec.so

Именно эти три библиотеки были заменены в установленном дистрибутиве libreoffice (/usr/lib64/libreoffice/program).

После этого подписание и проверка ГОСТ-подписи в PDF-файлах прошла без сучка и задоринки. И тут на одном из сайтов попадается на глаза такая выдержка:

У Федеральной налоговой службы есть отличный сервис для получения выписки из ЕГРЮЛ для любого юридического лица, причем абсолютно бесплатно. Выписку можно получить в виде документа формата PDF, подписанном квалифицированной электронной подписью. И такую выписку можно отправить в коммерческий банк, госучреждение, и с вас не попросят ее в бумажном виде. В общем, очень удобно.

Заказываем, получаем и проверяем:

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

Стоит напомнить, что не следует забывать устанавливать в хранилище цепочку доверенных сертификатов для сертификата подписанта. Но это естественно.

Все, теперь есть возможность использования электронной подписи (одной или несколько) в PDF-файлах. Это очень удобно как при согласовании документов, так и хранении документов.

А если кто привык работать с классической электронной подписью в формате PKCS#7 как присоединенной, так и отсоединенной, то для них подготовлена обновленная версия (для платформы Linux и Windows) графического пакета GUINSSPY:

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

Разработка велась на Python3 и если на платформе Linux проблем не было, то на MS Windows пришлось попотеть с кодировками. Фактически это была отдельная разработка и это требует отдельной статьи. Все эти нюансы можно увидеть в исходном коде.

С помощью этой утилиты можно создать хранилище сертификатов для libreoffice, управлять сертификатами, подписывать файлы и т.д.:

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

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

Как подписать документ libreoffice электронной цифровой подписью (ЭЦП) - ЭЦП Эксперт

И вот если производители отечественных форков Linux доработали различные пакеты (NSS, Firefox, Thunderbiird, GnuPG/SMIME, SSH, KMail, Kleopatra, LibreOffice, OpenSSL, и т.д и т.п.) для работы с российской криптографией, то тогда можно было бы говорить об импортозамещении в области криптографии.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector