Как подписать PDF-документ ЭЦП с помощью соответствующего программного обеспечения?

Я знаю, что это будет очень нишевая тема. Электронная подпись PDF-файлов далека от основного использования. Тем не менее, я напишу это по двум причинам: во-первых, я думаю, что это будет очень полезно для тех немногих, кому это действительно нужно, и, во-вторых, я думаю, что оно будет становиться все более и более распространенным по мере того, как правила eIDAS приобретают популярность, — в основном это говорит что электронные подписи признаются повсюду в Европе (сейчас это не совсем так , из-за некоторых скучных юридических деталей, но в любом случае).

Итак, каков вариант использования — во-первых, вы должны подписать PDF-файл электронной подписью в электронном виде (юридический термин — «электронная подпись», поэтому я буду использовать их взаимозаменяемо, хотя они не полностью совпадают — например, любые электронные данные, примененные к другим данным, могут рассматриваться как электронная подпись, где цифровая подпись является подписью на основе PKI).

Во-вторых, вы можете захотеть отобразить подпись на страницах, вместо того, чтобы программа чтения PDF распознала ее и показала на боковой панели. Почему это? Потому что люди привыкли видеть подписи на страницах, а некоторые могут настаивать на том, чтобы подпись была видимой (правдивая история — у меня есть комментарий, что отдельная подпись «не является НАСТОЯЩЕЙ электронной подписью, потому что ее не видно на странице»).

Теперь обратите внимание, что я написал «страницы» на «странице». Да, у электронного документа нет страниц — это поток байтов. Так что подпись только на последней странице — это нормально. Но, опять же, люди привыкли подписывать все страницы, поэтому они предпочли бы, чтобы электронная подпись была видна на всех страницах.

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

Я должен представить здесь DSS — замечательный набор компонентов Европейской комиссии, который можно использовать для подписи и проверки всех видов электронных подписей. Это открытый исходный код, вы можете использовать его любым удобным для вас способом. Разверните демонстрационное приложение , используйте только библиотеки, что угодно. Он включает функцию подписи из коробки — просто проверьте PAdESService или PDFBoxSignatureService . Он даже включает возможность визуализировать подпись один раз (на определенной странице).

Тем не менее, он не имеет возможности показывать «штампы» (изображения) на нескольких страницах. Вот почему я его разветвил и реализовал функциональность. Большинство моих изменений в PDFBoxSignatureService в loadAndStampDocument(..) . Если вы хотите использовать эту функциональность, вы можете просто собрать jar из моего форка и использовать его (передав соответствующие SignatureImageParameters в PAdESSErvice.sign(..) чтобы определить, как будет выглядеть подпись).

Зачем это нужно в первую очередь? Потому что, когда документ подписан, вы больше не можете его изменить, так как вы измените хеш. Тем не менее, PDF-файлы имеют постепенные обновления, которые позволяют добавлять к документу и, следовательно, иметь более новую версию, не изменяя ничего в исходной версии. Таким образом, подпись остается действительной (изначально подписанное содержимое не изменяется), но добавляется новый материал. В нашем случае этот новый материал представляет собой некоторые «аннотации», которые представляют изображение и интерактивную область, открывающую панель подписи (по крайней мере, в Adobe Reader). И хотя они добавляются до того, как будет добавлено поле для подписи, если имеется несколько подписывающих, аннотации для второго подписывающего добавляются после первой подписи.

К сожалению, PDFBox не поддерживает это из коробки. Что ж, почти так и есть — фрагмент кода, показанный ниже, выглядит хакерским, и потребовалось некоторое время, чтобы понять, что именно следует вызывать и когда, но он работает только с одним вызовом отражения:

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 for(PDPage page : pdDocument.getPages()) {                  page.setAnnotations(null);     }          pdDocument.getDocumentCatalog().setDocumentOutline(null);     List annotations = addStamps(pdDocument, parameters);                   setDocumentId(parameters, pdDocument);     ByteArrayOutputStream baos = newByteArrayOutputStream();     try(COSWriter writer = newCOSWriter(baos, newRandomAccessBuffer(pdfBytes))) {                  annotations.forEach(ann -> addObjectToWrite(writer, ann.getCOSObject()));                                    writer.write(pdDocument);     }     pdDocument.close();     pdDocument = PDDocument.load(baos.toByteArray());     ... } privatevoidaddObjectToWrite(COSWriter writer, COSDictionary cosObject) {          try{         Method method = writer.getClass().getDeclaredMethod("addObjectToWrite", COSBase.class);         method.setAccessible(true);         method.invoke(writer, cosObject);     } catch(Exception ex) {         thrownewRuntimeException(ex);     } }

Что он делает — загружает оригинальный PDF, очищает некоторые внутренние каталоги, добавляет аннотации (изображения) на все страницы, а затем «принудительно добавляет аннотации», потому что они «не будут сохранены в инкрементных обновлениях в противном случае». Я надеюсь, что PDFBox сделает это немного проще, но пока это работает, и это не делает недействительными существующие подписи.

Я надеюсь, что этот пост знакомит вас с:

  • наличие юридически обязательных электронных подписей
  • существование утилит DSS
  • стандарт PAdES для подписи PDF
  • как разместить более одного поля для подписи в документе PDF

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

Опубликовано на Java Code Geeks с разрешения Божидара Божанова, партнера нашей программы JCG . См. Оригинальную статью здесь: Добавление видимых электронных подписей в PDF-файлы.

Мнения, высказанные участниками Java Code Geeks, являются их собственными.

Го­тов пос­порить: ты навер­няка не раз стал­кивал­ся с докумен­тами в фор­мате PDF, име­ющи­ми циф­ровую под­пись. Под­писан­ные PDF-фай­лы исполь­зуют­ся в кон­трак­тах и сче­тах‑фак­турах, еще циф­ровой под­писью снаб­жают­ся все­воз­можные выпис­ки и справ­ки на сай­те Госус­луг или в лич­ном кабине­те налогоп­латель­щика. Циф­ровая под­пись дол­жна гаран­тировать под­линность и целос­тность содер­жимого докумен­та. Если его изме­нят, поль­зователь, открыв файл, уви­дит соот­ветс­тву­ющее пре­дуп­режде­ние. Одна­ко это огра­ниче­ние мож­но обой­ти с помощью нес­коль­ких хит­рых трю­ков.

PDF и XML — очень гиб­кие фор­маты. Гиб­кость дает удобс­тво, ради которо­го при­ходит­ся жер­тво­вать безопас­ностью. В обо­их фор­матах каж­дый год находят мно­жес­тво уяз­вимос­тей, свя­зан­ных как с крип­тогра­фией, так и со струк­турой самого фай­ла. И вот в оче­ред­ной раз доказа­но: даже элек­трон­ная под­пись не дает абсо­лют­ной уве­рен­ности, что в нед­рах элек­трон­ного докумен­та кто‑то не покопал­ся шалов­ливыми руками.

warning

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

Экскурс в PDF

PDF, или Portable Document Format, — это, как вид­но из наз­вания, перено­симый элек­трон­ный документ. Этим фор­матом поль­зуют­ся во мно­гих областях, преж­де все­го в биз­несе. PDF был раз­работан ком­пани­ей Adobe еще в далеком 2005 году. Вплоть до 2020 года фор­мат пре­тер­певал изме­нения четыре раза: в него добав­лялись встро­енные фай­лы, ссыл­ки, скрип­ты и раз­ного рода фун­кции. Тот фор­мат, который мы зна­ем на момент написа­ния этой статьи (PDF 2.0), вышел не так дав­но — в кон­це 2020 года вмес­те с его спе­цифи­каци­ей ISO 32000-2.

info

PDF вклю­чает в себя часть фун­кций язы­ка PostScript. Мож­но тран­сли­ровать PDF в PostScript. Есть прин­теры, которые уме­ют самос­тоятель­но интер­пре­тиро­вать PDF в PostScript.

В пер­вом приб­лижении струк­тура самого докумен­та PDF не очень слож­ная. Файл сос­тоит из сле­дующих эле­мен­тов:

  • за­голо­вок (header);
  • те­ло фай­ла (body);
  • таб­лица перек­рес­тных ссы­лок (cross-reference table);
  • блок поис­ка таб­лиц объ­ектов и ссы­лок (trailer).
image
Струк­тура PDF-фор­мата

За­голо­вок — это всег­да самая пер­вая стро­ка фай­ла, которая опре­деля­ет номер спе­цифи­кации.

image
За­голо­вок PDF

Те­ло содер­жит ссыл­ки на объ­екты. К ним отно­сят­ся стра­ницы, изоб­ражения, шриф­ты. Ком­мента­рии могут рас­полагать­ся во всем PDF-фай­ле. Их син­таксис сов­пада­ет с син­такси­сом ком­мента­риев в PostScript, начина­ются они с сим­вола % и закан­чива­ются сим­волом кон­ца стро­ки.

В таб­лице хра­нит­ся информа­ция об объ­ектах в фай­ле: эта таб­лица сос­тоит из раз­делов, количес­тво которых зависит от чис­ла объ­ектов, добав­ленных в файл. Trailer помога­ет прог­рамме, откры­вающей файл, находить таб­лицу перек­рес­тных ссы­лок и спе­циаль­ные объ­екты. К сло­ву, при­ложе­ния дол­жны читать PDF-файл с кон­ца.

Чем даль­ше в лес, тем боль­ше дров: за струк­турой фор­мата «пря­чет­ся» так называ­емая струк­тура пуб­ликации.

Струк­тура пуб­ликации

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

Со­дер­жание PDF с точ­ки зре­ния компь­юте­ра

Атака

Сна­чала давай раз­берем­ся с уяз­вимостью. Пред­ста­вим, что у нас есть Али­са (под­писыва­ет документ) и Боб (получа­ет под­писан­ный Али­сой документ) и, естес­твен­но, сам документ. Али­са сво­им сер­тифика­том под­писала документ и отпра­вила его Бобу. Боб уве­рен в том, что документ под­линный, так как он с под­писью. Но вот что будет, если документ готови­ла не Али­са (она толь­ко под­писала) и отправ­ляла тоже не она? Ата­ка с под­меной содер­жимого под­писан­ного докумен­та обыч­но про­исхо­дит в три эта­па.

  1. Ха­кер готовит документ, в котором при­сутс­тву­ет так называ­емое теневое содер­жимое. Это мож­но срав­нить с пус­тым лис­том в сши­том догово­ре, куда мож­но добавить фраг­мент пос­ле под­писания.
  2. Ха­кер отправ­ляет этот документ Али­се. Али­са под­писыва­ет его и отправ­ляет обратно хакеру. Хакер меня­ет содер­жимое докумен­та так, что­бы не сло­мать под­пись.
  3. Ха­кер отправ­ляет изме­нен­ный документ Бобу. Боб уве­рен в том, что документ нас­тоящий, и обра­баты­вает его.

О сущес­тво­вании этой уяз­вимос­ти упо­мина­лось еще в 2012 году, ког­да PDF соот­ветс­тво­вал спе­цифи­кации ISO 19005-3. Одна­ко пос­ле выхода новой вер­сии фор­мата хакеры про­вели оче­ред­ное иссле­дова­ние и прив­лекли вни­мание ком­паний, раз­рабаты­вающих прог­рам­мное обес­печение для работы с PDF.

Есть три спо­соба изме­нить содер­жимое уже под­писан­ного докумен­та: скры­тие, замена, а так­же скры­тие и замена.

Скрытие

Ре­зуль­татом этой ата­ки будет сок­рытие какого‑либо кон­тента за видимым содер­жимым фай­ла. Как толь­ко хакер получа­ет под­писан­ный Али­сой документ, он манипу­лиру­ет докумен­том таким обра­зом, что видимый слой боль­ше не отоб­ража­ется в при­ложе­нии прос­мотра. При­чем теперь уже ранее невиди­мые объ­екты ста­новят­ся вид­ны в PDF-фай­ле.

Замена

Ос­новная идея вари­анта «Замена» — добавить в под­писан­ный документ новые объ­екты, которые счи­тают­ся без­вред­ными, но нап­рямую вли­яют на пред­став­ление содер­жимого. Нап­ример, опре­деле­ние шриф­тов нап­рямую не меня­ет содер­жимое. Одна­ко это вли­яет на вид отоб­ража­емо­го кон­тента и дела­ет воз­можной замену цифр или сим­волов.

Эта ата­ка нацеле­на на инте­рак­тивные фор­мы. Фор­мы под­держи­вают раз­личные мас­ки вво­да (нап­ример, тек­сто­вые поля, тек­сто­вые области, перек­лючате­ли и кноп­ки выбора), где поль­зовате­ли динами­чес­ки вво­дят новое содер­жимое и сох­раня­ют его в докумен­те. Фор­мы так­же могут иметь зна­чения по умол­чанию, которые при необ­ходимос­ти мож­но изме­нить.

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

Скрытие и замена

В вари­анте ата­ки «Скры­тие и замена» PDF-файл содер­жит вто­рой скры­тый документ с дру­гим содер­жимым. Так как Али­са не может уви­деть скры­тое содер­жимое, она под­писыва­ет документ. Пос­ле под­писания хакер получа­ет файл и добав­ляет толь­ко новую таб­лицу внеш­них ссы­лок и трей­лер. В таб­лице внеш­них ссы­лок про­исхо­дит лишь одно изме­нение: ссыл­ка на опи­сание.

Дру­гими сло­вами, хакер соз­дает файл PDF, содер­жащий два объ­екта с одним и тем же иден­тифика­тором, но раз­ным содер­жани­ем. Пос­коль­ку вклю­чение таб­лицы xref, ука­зыва­ющей на уже опре­делен­ный объ­ект в под­писан­ной области, счи­тает­ся без­вред­ным, никаких пре­дуп­режде­ний о вне­сен­ных хакером изме­нени­ях не пос­тупа­ет, и про­вер­ка под­писи про­ходит успешно. Тем не менее Боб и Али­са видят раз­ный кон­тент в одном и том же фай­ле.

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

В то же вре­мя этот вари­ант самый «шат­кий», так как при под­писании могут быть уда­лены неис­поль­зуемые объ­екты, в том чис­ле — теневые. Кро­ме того, ска­нер безопас­ности может обна­ружить боль­шое количес­тво лиш­них незадей­ство­ван­ных объ­ектов и выдать пре­дуп­режде­ние.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «Xakep.ru» ← Ранее Аналитики Avast изучили OnionCrypter Далее → Вредонос XcodeSpy нацелен на iOS-разработчиков

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

Содержаниескрыть 1Небольшое отступление в PDF 2Нападение 2.1Замена 2.2Скрытие 2.3Скрытие и замена 2.4Реализация 3Защита 4Итоги

Небольшое отступление в PDF

PDF или Portable Document Format — это, как следует из названия, портативный электронный документ. Этот формат используется во многих сферах, в основном в бизнесе. PDF был разработан Adobe в 2005 году. До 2020 года формат претерпел четыре изменения: в него были добавлены встроенные файлы, ссылки, сценарии и всевозможные функции. Формат, с которым мы знакомы на момент написания этой статьи (PDF 2.0), был выпущен не так давно — в конце 2020 года со спецификацией ISO 32000-2.

PDF вклю­чает в себя часть фун­кций язы­ка PostScript. Мож­но тран­сли­ровать PDF в PostScript. Есть прин­теры, которые уме­ют самос­тоятель­но интер­пре­тиро­вать PDF в PostScript.

На первый взгляд структура PDF не так уж и сложна.Файл состоит:

  • за­голо­вок (header);
  • те­ло фай­ла (body);
  • таб­лица перек­рес­тных ссы­лок (cross-reference table);
  • блок поис­ка таб­лиц объ­ектов и ссы­лок (trailer).

Струк­тура PDF-фор­мата

Самая первая строка файла-это заголовок.Он же определяет номер спецификации.

За­голо­вок PDF

В таблице хранится информация об объектах в файле: эта таблица состоит из разделов, количество которых зависит от количества объектов, добавленных в файл. Trailer помогает программе открывающей файл найти таблицу перекрестных ссылок и специальные объекты. Кстати, приложениям нужно читать PDF с конца.

Содержимое включает ссылки на объекты. К ним относятся страницы, изображения, шрифты. Комментарии могут появляться в PDF-файле. Их синтаксис такой же, как и у комментариев PostScript, начиная с символа % и заканчивая символом конца строки.За структурой формата находится структура публикации.

Струк­тура пуб­ликации

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

Так выглядит PDF для машины

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

1.Хакер готовит документ, содержащий так называемое теневое содержимое. Это можно сравнить с пустым листом в сшитом контракте, куда вы можете добавить фрагмент после подписания.2.Хакер отправляет этот документ Эмили. Эмили подписывает его и отправляет обратно хакеру. Хакер изменяет содержание документа, чтобы не нарушить подпись.3.Хакер отправляет измененный документ Эрику. Эрик уверен, что документ настоящий, и обрабатывает его.

По поводу существования этой уязвимости упоминалось в 2012 году, когда PDF-файл соответствовал спецификации ISO 19005-3. Однако после выхода новой версии формата хакеры провели еще одно исследование и привлекли внимание компаний, разрабатывающих программное обеспечение для работы с PDF. Есть три способа редактировать содержимое уже подписанного документа: скрытие, замена а так же скрытие и замена вместе.

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

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

Основная идея опции «Заменить» — добавить в подписанный документ новые объекты, которые считаются безвредными, но напрямую влияют на представление содержимого. Например, определение символа напрямую не изменяет содержимое. Однако это влияет на тип отображаемого контента и позволяет заменять числа или символы.

Результатом этой атаки будет скрытие некоторого содержимого за видимым содержимым файла. Как только хакер получает документ, подписанный Эмили, он манипулирует им, чтобы видимый слой больше не отображался в средстве просмотра. Кроме того, в файле PDF теперь отображаются невидимые ранее объекты.

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

При атаке «Скры­тие и замена» PDF-файл содержит второй скрытый документ с другим содержимым. Поскольку мили не может видеть скрытое содержимое, она подписывает документ. После подписания хакер получает файл и просто добавляет новую таблицу внешних ссылок и трейлер. В таблице внешних ссылок есть только одно изменение: ссылка на описание.

В то же время этот вариант является наиболее «зыбким», поскольку неиспользуемые объекты, в том числе теневые, можно удалить при подписке. Кроме того, анализатор безопасности может обнаруживать большое количество ненужных неактивных объектов и выдавать предупреждение.

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

Число 0 на изображении ниже обозначает первый номер объекта в таблице, 334 — количество объектов. Первый элемент таблицы всегда XXXXXXXXXX 65535 f. 65535 — это номер по умолчанию для первого элемента в таблице. F (бесплатно) — объект не используется. Напротив используемых объектов стоит n. Затем идет XXXXXXXXXX — это смещение от начала файла до объекта. В документе будет столько таблиц, сколько объектов добавлено в файл.

cross-reference table

Здесь мы рассмотрим первый тип атаки «Скры­тие» с элементами атаки «Скры­тие и замена», поскольку они по сути схожи. При реализации атаки имейте в виду, что таблица перекрестных ссылок (cross-reference table) представляет собой просто текстовую таблицу. Она начинается со слова xref и содержит ссылки на все объекты.

После таблицы идет trailer, затем значение startxref, которое указывает смещение от начала файла до таблицы. Программа начинает чтение документа в конце. Для проведения атаки нам потребуются следующие инструменты:

  • Крип­тоПро PDF;
  • сер­тификат, ключ;
  • Notepad++ (им я редак­тирую внут­реннос­ти PDF);
  • Крип­тоПро CSP для Windows;
  • Крип­тоПро CSP для Linux;
  • ImDisk.
  • Adobe Acrobat DC;

Перед началом обработки PDF-файла, нам нужно получить ключ с сертификатом, который подойдет для КриптоПро. Сгенерировать ключ в OpenSSL не получится. Поэтому запускаем машину Linux, заходим на сайт КриптоПро и скачиваем дистрибутив для нашей ОС (у меня он в виде файла .deb). Вы должны сначала зарегистрироваться.

Дистрибутив с файлами

Уста­нав­лива­ем пакет:

./install.sh

Те­перь перехо­дим в пап­ку / opt/ cprocsp/ bin/ amd64. Там дол­жны появить­ся сле­дующие бинар­ники: certmgr, cpverify, cryptcp, csptest, csptestf, curl, der2xer, genkpim, inittst, wipefile.

Ге­нери­руем сер­тификат:

cryptcp -creatcert -provtype 81 -dn "C=RU, L=Rostov-na-Donu, CN=srv, 1.2.643.100.5=305867501589415" -exprt -ex -cont "\.HDIMAGEsrv" -ku -certusage "1.3.6.1.5.5.7.3.1" -hashAlg "1.2.643.7.1.1.2.3" -ca http://www.cryptopro.ru/certsrv

В этой коман­де исполь­зуют­ся сле­дующие клю­чи:

  • СА — центр сер­тифика­ции, который под­пишет нам пару клю­ча с сер­тифика­том. Дан­ная пара будет валид­ной, но дей­ство­вать будет толь­ко три месяца;
  • сont — имя кон­тей­нера, в которое сох­ранит­ся ключ с сер­тифика­том.
  • certusage — иден­тифика­тор наз­начения. Раз­лича­ют про­вер­ку сер­вера и кли­ента. Для нашего слу­чая он неважен;
  • hashAlg — алго­ритм шиф­рования для сер­тифика­та. Что­бы пос­мотреть, какие они есть, мож­но выпол­нить коман­ду cpconfig -defprov –view_type;

Про­веря­ем соз­данный кон­тей­нер:

./certmgr –list

Дол­жен появить­ся кон­тей­нер как на скрин­шоте ниже.

Кон­тей­нер в Linux-сис­теме

КриптоПро со своим CSP считает, что криптоконтейнер не должен храниться на жестком диске. Для этого были изобретены токены. Но поскольку у нас под рукой нет токена, а только жесткий диск, мы пойдем другим путем. Для этого нам понадобится ImDisk. Скачаем и установим его.

Данная программа способна создавать своего рода замкнутое дисковое пространство. Да, нам придется создать дополнительный виртуальный жесткий диск на нашем компьютере. Я создал раздел размером 60 МБ с папкой и закинул в него файлы контейнера. Теперь КриптоПро видит и ключ, и сертификат.

Перейдите в корневую папку / var / opt / cprocsp / keys /, где должен появиться каталог с именем, указанным в команде, для создания этого контейнера. В этом каталоге вы найдете шесть файлов с расширением .key — это контейнер. Загрузите и перенесите на свой компьютер с Windows.

Крип­тоПро CSP

Пе­рехо­дим к под­готов­ке самого фай­ла. Необ­ходимо иметь на машине редак­тор PDF — я выб­рал проб­ную вер­сию Adobe Acrobat DC, а так­же Крип­тоПро PDF для воз­можнос­ти под­писать файл.

От­кры­ваем Acrobat и соз­даем пус­той файл. Пишем посере­дине ][aker. Сох­раня­ем и зак­рыва­ем его. При­мер­но так выг­лядят внут­реннос­ти пус­того фай­ла с одним сло­вом, которое мы вве­ли:

%PDF-1.3 3 0 obj <</span><</span>/Type /Page /Parent 1 0 R /Resources 2 0 R /Contents 4 0 R>> endobj 4 0 obj <</span><</span>/Filter /FlateDecode /Length 86>> stream xњ3Rрв2Р35W(зr QРw3T02С30PISp кZ*›лY)„¤(hg¦з)д¦*”д+¤§–($*Ґ–'Ґиi*„dЃф ьM endstream endobj 1 0 obj <</span><</span>/Type /Pages /Kids [3 0 R ] /Count 1 /MediaBox [0 0 595.28 841.89] >> endobj 5 0 obj <</span><</span>/Type /Font /BaseFont /Helvetica-Bold /Subtype /Type1 /Encoding /WinAnsiEncoding >> endobj 2 0 obj <</span><</span> /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font <</span><</span> /F1 5 0 R >> /XObject <</span><</span> >> >> endobj 6 0 obj <</span><</span> /Producer (PyFPDF 1.7.2 http://pyfpdf.googlecode.com/) /CreationDate (D:20201116165607) >> endobj 7 0 obj <</span><</span> /Type /Catalog /Pages 1 0 R /OpenAction [3 0 R /FitH null] /PageLayout /OneColumn >> endobj xref 0 8 0000000000 65535 f 0000000242 00000 n 0000000430 00000 n 0000000009 00000 n 0000000087 00000 n 0000000329 00000 n 0000000534 00000 n 0000000643 00000 n trailer <</span><</span> /Size 8 /Root 7 0 R /Info 6 0 R >> startxref 746 %%EOF

Вставляем картинку поверх надписи, ставим подпись и подписываем документ. Открываем его в Notepad ++ и находим внешнюю ссылку с таблицей для нашей картинки. Мы меняем необходимые значения n на f, делая их скрытыми.

За­мена таб­лицы на скры­тие объ­екта

Так же можно спрятать кар­тинку, обоз­начив ее как метадан­ные. Их обновле­ние прог­рамма не будет счи­тать вме­шатель­ством в содер­жимое докумен­та. Син­таксис метадан­ных PDF (ста­рого образца, но он работа­ет до сих пор, зна­чит, вер­сион­ность фор­матов под­держи­вает­ся) мож­но изу­чить, к при­меру, тут. Заг­ружа­ем файл, меня­ем метадан­ные и видим их в разоб­ранном виде. Далее методом проб и оши­бок пыта­емся под­кинуть изме­нен­ные дан­ные в файл.Получается сле­дующее:

stream

<</span>?xpacket begin="п»ї" id="W5M0MpCehiHzreSzNTczkc9d" <</span>x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.4-c006 80.159825, 2016/09/16-03:31:08 "> <</span>rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <</span>rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"> <</span>xmp:ModifyDate>2019-08-07T13:48:36+02:00</</span>xmp:ModifyDate> <</span>xmp:MetadataDate>2019-08-07T13:48:36+02:00</</span>xmp:MetadataDate> <</span>xmp:CreateDate>2019-08-07T11:14:22+02:00</</span>xmp:CreateDate> <</span>dc:format>application/pdf</</span>dc:format> <</span>xmpMM:DocumentID>uuid:d24ecc88-2a52-0b43-9272-3abe5e065c85</</span>xmpMM:DocumentID> <</span>xmpMM:InstanceID>uuid:9d3cd24f-99fe-0849-a303-c9cfac889c31</</span>xmpMM:InstanceID> </</span>rdf:Description> </</span>rdf:RDF> </</span>x:xmpmeta> <</span>?xpacket end="w" endstream

Когда вы закончите, сохраните файл и закройте редактор. Надеюсь, он нам больше не нужен. Итак, мы подписали файл фотографией, и когда мы открываем документ, мы видим совершенно другое содержимое. Это доказывает, что есть брешь в безопасности, но работает она не везде. Различные версии разных программ просмотра PDF могут отображать измененный файл по-разному.

Adobe исправила ошибки CVE-2020-9592 и CVE-2020-9596 в обновлении от 12 мая 2020 г. Foxit Reader также отображает предупреждение системы безопасности при попытке открыть измененный документ с цифровой подписью.

Ошиб­ки под­писи

Старые версии программного обеспечения, такие как Adobe Acrobat Reader DC v 2019.021.20061, Foxit Reader 3.4.0.1012 и LibreOffice Draw до версии 6, уязвимы для этого типа атак. Самая актуальная защита на данный момент — не использовать устаревшее программное обеспечение. Для тех, кто любит просматривать PDF через браузер, ни один браузер не проверяет подпись на документе и, следовательно, этот трюк будет работать долгое время.

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

Вся информация представлена ​​только в образовательных целях. Автор этого документа не несет ответственности за любой ущерб, причиненный кому-либо в результате использования знаний и методов, полученных в результате изучения этого документа.

Click to rate this post!

Что потребуется для подписания электронного документа?

image

  • Окончательная редакция документа, который необходимо подписать. После создания подписи в него нельзя будет внести изменения.
  • Действующий квалифицированный сертификат электронной подписи. В рамках российского законодательства квалифицированная электронная подпись — единственный вид подписи, который придает документу юридическую силу без дополнительных соглашений между сторонами электронного документооборота.
  • Средства электронной подписи. Технология электронной подписи подразумевает использование комплекса программных средств, которые владелец подписи устанавливает на свой компьютер. В Удостоверяющем центре СКБ Контур настройка компьютера для работы с электронной подписью проходит автоматически. Ознакомьтесь с информацией о технических требованиях к рабочему месту для работы с электронной подписью 
  • Программа для создания электронной подписи  — они будут рассмотрены далее. Это могут быть плагины, отдельные программы или веб-сервисы. 

Вариант 1. Установить плагин для Office

Для документов формата Word и Excel

Чаще всего требуется подписать документ в формате Word:

  • трудовой или хозяйственный договор,
  • иск в арбитраж,
  • заявление в вуз и т.д.

Штатная функция пакета Microsoft Office «Подписать документ» не позволяет создать подпись, которая придает электронному документу юридическую силу. Чтобы создать такую подпись в Word или Excel, необходимо установить на свой компьютер специальный программный модуль, который добавит такую возможность, — например, КриптоПро Office Signature.

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

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

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

  3. С его помощью создайте для документа электронную подпись: нажмите «Подписать» и введите пароль ключевого контейнера.

Что учесть при использовании плагина:

  • Алгоритм подписания отличается в разных версиях Word.
  • Если создать подпись в одной версии программы, а проверять ее в другой, результат проверки может быть некорректным.
  • Документ, подписанный с помощью КриптоПро Office Signature, можно открыть и проверить даже на компьютере, где эта программа не установлена.

Для документов формата PDF

Для создания и проверки электронной подписи в программах Adobe Acrobat, Adobe Reader и Adobe LiveCycle ES есть отдельный модуль КриптоПро PDF.

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

Прежде чем вставить электронную подпись в документе PDF, необходимо установить и настроить Acrobat Reader DC или Adobe Acrobat Pro для работы с программой КриптоПро PDF.

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

Вариант 2. Установить отдельную программу для создания подписи

Чтобы подписывать документы любого формата (*rar, *.jpeg и *.png,*.ppt, видео, базы данных и т.д.), можно установить на компьютер специальную программу — например, КриптоАРМ.

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

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

  • Количество файлов, которые нужно подписать: можно подписать несколько файлов или папку с документами.
  • Формат подписи: присоединенная или отсоединенная. В первом случае подпись будет встроена в файл, а во втором будет создана в отдельном файле с расширением *.sig.
  • Сертификат, которым нужно подписать документ.

Что учесть при использовании программы:

  • В бесплатной версии можно поставить только базовую КЭП (без проверки времени подписания документа и статуса сертификата). Но проверить можно и усовершенствованную подпись (со статусом сертификата и временем подписания документа).

Вариант 3. Воспользоваться веб-сервисами

Можно подписать документ любого формата, не устанавливая на компьютер специальных программ, — например, в веб-сервисе Контур.Крипто.

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

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

  1. Загрузить в сервис документ, который необходимо подписать. Подписать можно файл любого формата до 100 Мб.

  2. Выбрать установленный на компьютере сертификат, которым будет подписан документ. Подписать документ в Контур.Крипто можно сертификатом, выпущенным любым удостоверяющим центром.

  3. Создать файл подписи. После того как вы нажмете кнопку «Подписать», сервис создаст папку с исходным документом и подпись с таким же именем и разрешением.sig. Папка сохранит файл и подпись для него на сервере. Эти документы можно скачать на компьютер пользователя.

  4. Послать документ получателю. Можно отправить файл и подпись для него прямо из сервиса. Адресат получит ссылку на документ, сохраненный в Контур.Крипто. Также можно скачать пакет документов на компьютер (исходный документ, файл подписи, сертификат и инструкцию по проверке подписи) и отправить через любой почтовик.

Что учесть при использовании Контур.Крипто:

  • В сервисе действует ограничение на вес документа: можно подписать документ до 100 Мб.
  • В сервисе можно создать только отсоединенную подпись.
  • Контур.Крипто работает только в операционной системе Microsoft Windows.
  • Проверить подпись, созданную в Контур.Крипто, можно в любой программе, которая работает с отсоединенными электронными подписями.

Сравнение программ для создания электронной подписи

 

Плагины КриптоПро

Отдельная программа КриптоАРМ

Веб-сервис Контур.Крипто

Стоимость

Платные

Бесплатна только базовая версия Старт

Все функции доступны бесплатно

Форматы документов

Word и Excel, PDF

Все

Все

Соподпись/ пакетная подпись

Есть

Есть

Есть

Максимальный вес файла

Без ограничений

Без ограничений

до 100 Мб

Создание усовершенство

ванной подпись

Есть

Только в платных версиях

Есть

Присоединенная/ отсоединенная

Есть

Присоединенная/ отсоединенная

Только отсоединенная

Функции проверки, шифрования и расшифрования

Есть

Только в платных версиях

Есть

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
А как считаете Вы?
Напишите в комментариях, что вы думаете – согласны
ли со статьей или есть что добавить?
Добавить комментарий