Подписание документа через API · Issue #133 · diadoc/diadocapi-docs · GitHub

Отдельные почтовые клиенты с российской криптографией

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

ПлатформыСемейство Windows, GNULinux, OS X, iOS, Android
Алгоритмы и криптографические протоколыЭЦП, шифрование, хэш-функция, имитозащита, HMAC, VKO, TLS
Интеграция с PKIX.509, PKCS#10, CMS, CRL
Механизмы ЭЦПВызов из JavaScript встроенных в браузер функций
TLS-ГОСТВстроен в библиотеку и поддерживается браузером
Форматы защищенных сообщенийPKCS#7, CMS
Интеграция с браузером100%
Мобильные платформыiOS, Android
Хранилища ключейБраузерное хранилище, USB-токены
Взаимодействие с USB-токенамиХранилище ключей и сертификатов
Использование аппаратной реализации алгоритмов
ИнсталляцияПрограмма установки, в целом, не требуются права системного администратор
Portable. Например, запуск браузера с FLASH-памяти USB-токена
Примеры (ГОСТ)Mozilla ThunderBird от Лисси
DiPost от Фактор ТС

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Замечание:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  О тендерах для новичков | блог Синапс

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

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

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

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

Java-апплеты


Одним из вариантов использования СКЗИ в браузере является их интеграция в Java-апплеты.

В ряде случаев СКЗИ и криптографические библиотеки не требуют установки и представляют собой нативную библиотеку. В этом случае возможна ее интеграция непосредственно «внутрь» апплета и вызов функций СКЗИ через механизм JNI. При этой схеме библиотека будет инсталлирована в профайл пользователя при первой загрузке Java-апплета в браузере и ее отдельной инсталляции не потребуется.

Другим вариантом является написание Java-апплета, который вызывает предустановленное в системе СКЗИ (CSP, JCP и др.)

Более подробно пример подобной реализации, основанный на использовании Рутокен ЭЦП и OpenSSL, описан в статье

Важна ли дата подписания?

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

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

В ЭДО фиксируется несколько дат: создания документа, совершения факта хозяйственной жизни и подписания. Последняя формируется в момент, когда документ подписывают КЭП. Дата подписания не обладает большим значением, так как Федеральный закон от 06.12.

Момент, когда документ подписывают КЭП, равен дате подписания в ЭДО. Даты документа и дата совершения хозяйственной жизни заполняются контрагентами по их усмотрению. 

Факт подписания и дата подписания документа подтверждают совершение сделки между сторонами. Это указано в пункте 2 статьи 11 Федерального закона № 63-ФЗ. На указание периода отгрузки или оказания услуги дата подписания не влияет. 

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

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

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

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

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

Получить электронную подпись

Как можно отправить документ на подпись с помощью апи · issue #534 · diadoc/diadocapi-docs

Добрый день.

не получается отправить документ сотруднику на подпись с помощью вашего API. Помогите пожалуйста разобраться.
Среда разработки Delphi XE 10.2, апи как com библиотека была импортирована в систему, tlb файл был добавлен в дельфи.

Версия апи:
CompanyName : ЗАО «ПФ «СКБ Контур»
FileDescription : Diadoc.Api
FileVersion : 1.86.0
InternalName : DiadocApi.dll
LegalCopyright : © 2021-2021 ЗАО «ПФ «СКБ Контур»
OriginalFilename : DiadocApi.dll
ProductName : Diadoc
ProductVersion : 1.86.0
Assembly Version : 1.86.0.0

Было решено делать так: добавляется файл (счет-фактура в xml формате) с помощью вашего апи в отправленные на определенного пользователя, подписывает его и документ автоматически отправляется контрагенту.
Для добавления счета-фактуры используем следующий код:
Message1 := TMessageToPost.Create(Self);
Try
Message1.FromBoxId := FromBoxId;
Message1.ToBoxId := ToBoxId;
//Message1.IsDraft := True;
Message1.DelaySend := True;

          Attachment := TXmlDocumentAttachment.Create(Self);
          Try
            Content := TSignedContent.Create(Self);
            Try
              Content.LoadContentFromFile
                (ExtractFilePath(Application.ExeName)   FileName);

              //Content.SignWithTestSignature := True;
              //Content.SignByAttorney := True;
              
              Attachment.SetSignedContent(Content.DefaultInterface);

              Message1.AddInvoice(Attachment.DefaultInterface);

              Mess := DiaDoc.PostMessage(Token, Message1.DefaultInterface);

После этого счет фактура появляется в отправленных, но он не привязан к подписанту.
Как сделать так, что бы был привязан подписант?

Пробовали отправить на подпись по entityid, но требует ExtendedSigner, которое не нашел в Вашем апи (хотя в документации к апи данный класс описан).
Код следующий:
Request := TPrepareDocumentsToSignRequest.Create(Self);
Try
Request.BoxId := BoxId;

          DocumentToPatch := TDocumentToPatch.Create(Self);
          Try
            DocumentId := TDocumentId.Create(Self);
            Try
              Signer := TSigner.Create(Self);
              Try
                DocumentId.MessageId := MessageId;
                DocumentId.EntityId := EntityId;

                SignerDetails := TSignerDetails.Create(Self);
                Try
                  SignerDetails.SurName := SurName;
                  SignerDetails.FirstName := FirstName;
                  SignerDetails.Patronymic := Patronymic;
                  SignerDetails.JobTitle := JobTitle;
                  SignerDetails.INN := INN;

                  Signer.SignerDetails := SignerDetails.DefaultInterface;

                  //DocumentToPatch.ToBoxId := ToBoxId;
                  DocumentToPatch.DocumentId := DocumentId.DefaultInterface;
                  DocumentToPatch.Signer := Signer.DefaultInterface;

                  Request.AddDocumentsItem
                    (DocumentToPatch.DefaultInterface);

                  DiaDoc.PrepareDocumentsToSign(Token,
                    Request.DefaultInterface);

Какие бывают электронные подписи

ЭЦП — это «штамп», который позволяет идентифицировать ее владельца, а также удостовериться в целостности подписанного документа. Типы ЭЦП и порядок их оформления утверждены Федеральным законом № 63-ФЗ от 06.04.2021. Он установил, что подписи бывают трех видов:

  1. Простая. Распространена для подписания писем или спецификаций, подтверждается с использованием паролей, кодов и иных средств, чаще всего используется в системах корпоративного ЭДО.
  2. Усиленная неквалифицированная. Получается в процессе криптографической обработки информации и использования закрытого ключа. Позволяет установить, кто подписал документ, а также факт внесения изменений после подписания.
  3. Усиленная квалифицированная. Аналогична неквалифицированной, но для ее создания и проверки используются наработки криптозащиты, сертифицированные ФСБ РФ. Такие ЭП выдаются только аккредитованными удостоверяющими центрами.

Завизировать документ можно несколькими способами. Рассмотрим наиболее часто встречающиеся.

Какие документы нужно подписывать электронной подписью

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

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

Также цифровая подпись необходима в таких ситуациях:

  1. Отчетность для контролирующих органов. Можно сдать ее в электронном виде таким службам, как ФНС, Росстат, ПФР и ФСС. Это значительно упрощает передачу информации и повышает правильность: большинство сервисов предлагают автоматическую проверку на ошибки.
  2. Электронный документооборот (ЭДО). Одно из самых распространенных применений, так как подписанное таким способом письмо соответствует бумажному с печатью и визой. Позволяет перейти на безбумажный документооборот как внутри компании, так и за ее пределами.
  3. Государственные услуги. Гражданин РФ может визировать подаваемые заявления в ведомства через портал госуслуг, участвовать в общественных инициативах, пользоваться личным кабинетом на сайте ФНС, даже оформлять кредит.
  4. Обращение в арбитражный суд. В качестве доказательств можно использовать счет-фактуры, договоры, официальные письма, подписанные электронно. Согласно АПК РФ, такой документ является аналогом бумажного с собственноручной визой.

Какую подпись можно проверить самостоятельно?

Самостоятельная проверка подписи нужна, когда участники электронного документооборота (далее — ЭДО) взаимодействуют друг с другом вне информационных систем, например:

  • Работодатель получает трудовой договор от физического лица.
  • Контрагенты заключают сделку в электронном виде вне системы ЭДО.
  • Заказчик принимает котировочные заявки от участников тендера на почту, а не через электронную торговую площадку.
  • Банк проверяет подпись инспектора ФНС на электронной выписке из ЕГРЮЛ и т.д.

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

Читайте также:  Новый Android-вирус маскируется под обновление системы - Газета.Ru

Получить электронную подпись

Закрытый ключ используется для создания подписи, а открытый — для проверки. Подробнее о видах подписи по федеральному закону от 06.04.2021 № 63-ФЗ «Об электронной подписи» можно прочитать в отдельной статье.

По своему типу усиленная электронная подпись может быть отсоединенной и присоединенной:

  • При создании присоединенной подписи формируется один файл, который содержит и саму подпись, и документ, для которого она была создана. Проверять нужно этот единый файл.
  • Отсоединенная подпись формируется в отдельном от подписываемого документа файле с расширением.sig. В этом случае нужно проверять оба документа: файл с электронной подписью и подписанный ею файл.

Успешная проверка подписи подтверждает следующее:

Какие средства проверки подписи использовать, участники ЭДО выбирают по своему усмотрению.

На базе nss


На картинке представлена архитектура решения, реализованная в проекте по расширению NSS aToken.

СпецификацияNSS c использованием PKCS#11-токенов, программных и аппаратных
ПлатформыСемейство Windows, GNULinux, OS X, iOS, Android
Алгоритмы и криптографические протоколыЭЦП, шифрование, хэш-функция, имитозащита, HMAC, VKO, TLS
Интеграция с PKIX.509, PKCS#10, CMS, CRL
Механизмы ЭЦПВызов из JavaScript встроенных в браузер функций
TLS-ГОСТВстроен в библиотеку и поддерживается браузером
Форматы защищенных сообщенийPKCS#7, CMS
Интеграция с браузером100%
Мобильные платформыiOS, Android
Хранилища ключейБраузерное хранилище, USB-токены
Взаимодействие с USB-токенамиХранилище ключей и сертификатов
Использование аппаратной реализации алгоритмов
ИнсталляцияПрограмма установки, в целом, не требуются права системного администратор
Portable. Например, запуск браузера с FLASH-памяти USB-токена
Примеры (ГОСТ)Mozilla FireFox, Chromium от Лисси
Проект atoken от R-Альфа (Mozilla FireFox)
КриптоFox (PKCS11-токен на базе КриптоПро CSP)

Проблемы:

Плюсы:

Отдельные браузеры с российской криптографией

Браузеры, созданные на базе open source проектов Mozilla FireFox и Chromium, используют в качестве криптоядра NSS или OpenSSL. OpenSSL поддерживает российские криптоалгоритмы. Для NSS также существуют разработки, которые обеспечивают поддержку российских криптоалгоритмов. Некоторое время назад на рынке появились полнофункциональные браузеры с поддержкой российской криптографии.

Подобное решение обладает большим, на данный момент невостребованным, потенциалом, так как позволяет создавать защищенные стандартные WEB-клиенты для систем с высокими требованиями к безопасности. Еще одним плюсом подобного браузера является его «портабельность».

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

Подписание документа через api · issue #133 · diadoc/diadocapi-docs

Здравствуйте. Каким образом можно подписать документ через API?
Потыкался немного с ним. Нашел ресурс “/V3/PostMessagePatch” с помощью него можно согласовать документ работает с блоком “Resolutions”.

Можно ли подписать документ, работая с блоком “Signatures” и если да, то можно ли использовать тестовую ЭП?

Работаю на PHP. Отправляю такую структуру
$request = json_encode(
[
‘BoxId’ => $boxId,
‘MessageId’ => $messageId,
‘Signatures’ => [
[
‘ParentEntityId’ => $documentId,
‘SignWithTestSignature’ => true,
‘IsApprovementSignature’ => true,
]
]
]
);
$curl_options = array (
CURLOPT_URL => ‘https://diadoc-api.ecpexpert.ru/V3/PostMessagePatch‘,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_HTTPHEADER => array(
‘Authorization: DiadocAuth ddauth_api_client_id=’.$ddauth_api_client_id.’,ddauth_token=’.$token,
),
CURLOPT_POSTFIELDS => http_build_query($request)
);

В ответ приходит 400 ошибка с подписью “BoxId field is not valid box id:”

Расширения классов

В платформе существует набор криптографических классов, в которых предусмотрены механизмы расширения сторонними алгоритмами. Наиболее известным на рынке решением по расширению платформы Microsoft.NET российскими криптоалгоритмами является продукт КриптоПро. NET, представляющий собой надстройку над КриптоПро CSP.

Установка КриптоПро.NET позволяет использовать российские криптоалгоритмы, например,

в WEB-сервисах на базе ASP.NET, SOAP-сервисах, в клиентских браузерных приложениях MS.Silverlight.

ПлатформыMicrosoft.NET 2.0 и старше
Алгоритмы и криптографические протоколыЭЦП, шифрование, хэш-функция, имитозащита, HMAC, VKO, TLS, SOAP
Интеграция с PKIX.509, PKCS#10, CMS, CRL
Механизмы ЭЦПНабор классов. Есть полностью “управляемые” реализации. Есть реализации на базе Crypto API 2.0 и CNG
Механизмы аутентификацииклиентская аутентификация в рамках TLS
аутентификация в SOAP-сервисах
собственные механизмы аутентификации на базе ЭЦП случайных данных
TLS-ГОСТВстраивание
Форматы защищенных сообщенийPKCS#7, CMS, XMLSec, SOAP (OASIS Standard 200401), S/MIME
Интеграция с браузеромЭЦП и шифрование через MS Silverlight
Хранилища ключейРеестр, UBS-токены
Взаимодействие с USB-токенамиХранилище ключей и сертификатов
Использование аппаратной реализации алгоритмов
Через Crypto API 2.0
ПриложенияMicrosoft Lync 2021, Microsoft Office Forms Server 2007 и Microsoft SharePoint 2021, Microsoft XPS Viewer
ИнсталляцияMicrosoft. NET включен в состав Windows, начиная с Windows Vista. Поддержка российских криптоалгоритмов требует установки дополнительного ПО
Примеры (ГОСТ)КриптоПро. NET (на базе КриптоПро CSP)

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

 

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

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

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

Стоимость

Платные

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

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

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

Word и Excel, PDF

Все

Все

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

Есть

Есть

Есть

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

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

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

до 100 Мб

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

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

Есть

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

Есть

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

Есть

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

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

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

Есть

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

Есть

Получить электронную подпись

Средства формирования доверенной среды

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

На последнем способе формирования ДС хотелось бы остановиться подробнее.

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

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

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

Для доступа к доверенной среде из клиентской ОС используется специальная библиотека (COM-объект). При подписи платежки через данную библиотеку Jinn перехватывает управление графическим адаптером и визуализирует на нем платежку. Если представленная информация верна, то после подтверждения пользователя Jinn подписывает платежку и возвращает управление клиентской ОС.

Статья – проверка электронной цифровой подписи authenticode. часть 1. теория

1.4. Терминология, алгоритм подписания и проверки.

1.4.1. Что такое Authenticode (Code signing).
Authenticode” (или «Code signing») означает, что сертификат предназначен для подписания кода, иначе говоря, программ и скриптов, а не документов, электронных писем, http интернет пакетов и тому подобного.

К файлам, содержащим код, относят такие форматы, как PE (.exe, .dll, .ocx, .sys, …), VBScript (.vbs), JScript (.js), Cabinet-архивы (.cab), элементы панели управления (.cpl) и некоторые другие.

Рассмотрим поближе такие понятия как: хеш, алгоритм хеша, подпись, сертификат, отпечаток, выборка и т.п. (часть информации взята из ответов участников конференции StackExchange CBHacking и Tom Leek (в переводе, с авторской переработкой и дополнениями)).

Читайте также:  Имитовставка — Википедия с видео // WIKI 2

1.4.2. Что такое хеш.

Хеш – это значение фиксированной длины, которое получено после выполнения набора арифметических операции над строкой, файлом или другим блоком данных. Грубо говоря, мы подаём на вход длинную строку, затем берём код каждого символа этой строки, складываем по определённому принципу (называемому алгоритмом хеша), и в результате получаем значение, обычно записываемое в 16-ричном виде.

Вот примеры наиболее распространённых хешей:

Подробную таблицу сравнительных характеристик SHA вы можете посмотреть на wiki

здесь

и

здесь

.

Программно рассчитывать хеш можно, например, через CryptoAPI (пример) или Cryptography API: Next Generation (CNG) (пример).

1.4.3. Что такое выборка (дайджест).
Выборка (digest) – обычно подразумевает, что мы берём данные не целиком, а избирательно, только какую-то часть, которая и называется выборкой. Расположение этой части зависит от структуры данных и вида алгоритма, для которого эта выборка используется.

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

1.4.4. Что такое приватный и публичный ключи, симметричное и асимметричное шифрование.

Представьте себе шифрование по алгоритму Цезаря, где код каждого символа строки сдвигается на некоторое одинаковое количество пунктов (например, вперёд по алфавиту). Здесь ключом является – количество пунктов сдвига.

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

Существуют и так называемые асимметричные алгоритмы, например, RSA. Здесь ключи для шифрования и дешифровки – разные. Т.е. ключ шифрования не подходит для расшифровки, и наоборот. Кроме того, невозможно рассчитать ключ шифрования, если у вас есть ключ дешифровки.

Представьте, что вам дали сообщение, зашифрованное ключом (он называется – приватный). Вы знаете, по какому принципу происходит шифрование, и у вас даже есть ключ (публичный), которым можно расшифровать сообщение. Но с помощью этого же ключа у Вас не получится снова зашифровать исходное сообщение, чтобы получить такую же шифро-фразу, потому как результат уже не расшифруется тем же ключом. Такова особенность асимметричных алгоритмов. Подробнее о них вы можете почитать в протоколе Диффи-Хеллмана-Меркла или посмотреть это видео:

Приватный ключ ещё называют закрытым (или секретным).

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

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

В контексте подписания и проверки цифровых подписей шифрование всего сообщение не нужно и не требуется. Вместо этого, RSA накладывается на хеш сообщения.

Итоговая схема:
ФАЙЛ => выборка => хеш приватный ключ => шифрованный хеш.

1.4.5. Что такое сертификат, центр сертификации и цепочка доверия.

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

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

Сертификат может быть подписан не напрямую центром сертификации, а промежуточным звеном, которому Центр предоставил права выдавать сертификаты. Это называется цепочкой доверия. Её можно проследить, изучив цифровую подпись сертификата:

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

1.4.6. Форматы файлов сертификатов и ключей для Authenticode подписи и их преобразование.

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

PKCS # 12 и PKCS # 7

– это международные спецификации криптографии с открытым ключом.

Формат X.509 (его ещё называют сертификатом открытого ключа). Он состоит из таких частей:

Внутри каждого сертификата формата X.509 хранится пара Distinguished Names (DN) в формате X.500. Один DN принадлежит владельцу сертификата, а второй DN указывает идентификатор CA, подписавшей сертификат. В случае с self-signed сертификатом, оба эти DN указывают на владельца сертификата.

Distinguished Name задается в виде разделенных через запятую атрибутов, например:

«CN=Andrey Chesnokov, OU=dev64, O=dev64-wordpress, L=Unknown, ST=Unknown, C=RU»
«C=RU, PostalCode=115093, S=Moscow, L=Moscow, STREET=”Street Serpukhovsko B, 44″, O=RIVER SOLUTIONS, CN=RIVER SOLUTIONS»

Здесь отдельные атрибуты расшифровываются так:

CN — common name (уникальное имя владельца)

L — localityName (местоположение: город)

ST — stateOrProvinceName (название штата или провинции)

O — organizationName (имя организации)

OU — organizationUnit, department or division (департамент или отдел)

C — country, two-letter country code (двухбуквенный код страны)

STREET = streetAddress (адрес: улица)

DC = domainComponent (метка доменного имени)

UID = userid (идентификатор пользователя)

Часть из атрибутов может быть пропущено, например, присвоено значение Unknown.
Формат строки описан в RFC2253 и RFC1779.

Подробнее о внутренней структуре формата сертификата X.509 можно почитать в статьях:
X.509 — Википедия
Разбираем x.509 сертификат
Структура PKCS7-файла
RFC5280

Microsoft PVK – является недокументированным форматом, однако кое-что о его структуре можно почитать в этой заметке:
PVK file format

Примечательно, что на этапе генерации пары ключей, вам необходимо будет ввести пароль. Это дополнительная мера защиты. Приватный ключ шифруется одним из алгоритмов – 3DES, RC4 или RC2. Без знания пароля потенциальный злоумышленник, выкравший файл сертификата, не сможет воспользоваться приватным ключом.

б) Преобразование форматов.

Иногда возникает необходимость сконвертировать форматы сертификатов из одного в другой. Для этих целей вам могут пригодиться такие инструменты из состава Windows SDK, как pvk2pfx.exe, cert2spc.exe, а также openssl.

Примеры конвертации:

Некоторые другие примеры командной строки преобразования форматов можно посмотреть в

этой базе знаний Symantec

.

Выше рассмотрены только сертификаты для подписания кода. Так, следует заметить, что например, для SSL-сертификатов существуют и другие форматы, например, .jks – Java Key Stroke – это хранилище открытых и закрытых ключей и сертификатов. Работать с ним можно с помощью инструмента keytool из состава Java Runtime Environment.

Пример для JKS -> DER см. в моей заметке: Как получить ЭЦП для подписания документов (для жителей Украины).

Вот ещё часть примеров для демонстрации возможностей openssl (взято отсюда):

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

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

Adblock
detector