Русский
Русский
English
Статистика
Реклама

Эцп

Петиция за дружбу удостоверяющих центров. Часть 2

31.10.2020 00:15:05 | Автор: admin

Привет, хабровчане!

Хочу поделиться ещё одной зашкварной историей, связанной с ЭЦП. В главных ролях крупные удостоверяющие центры - Контур и Тензор.

Прошлая проблема, которая возникла в мае, в общем-то решилась - когда я подавал инициативу на РОИ, я не знал что с 1 июля 2020 вступают в силу поправки в 63-ФЗ Об электронной подписи, согласно которым возможность удостоверять личность действующим сертификатом аккредитованного УЦ теперь закреплена законодательно.

Но технически с применением этого закона есть большие ограничения, о которых ничего не сказано в законе.

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

Сегодня мне нужно было получить новый сертификат в УЦ Тензора на юрлицо для работы со СБИС. Действующий сертификат есть только от УЦ Контур. Он квалифицированный, но не на отдельном ключе, а облачный, по технологии КриптоПРО DSS.

У меня подтвержденный положительный тест на COVID, сижу дома на самоизоляции до повторных отрицательных тестов. Т.е. даже возможности лично приехать в УЦ и удостоверить личность по закону нет и остаётся вариант только удалённого выпуска.

Техподдержка Тензора сказала что единственная техническая возможность удостоверить личность облачной подписью - настроить работу с облачным хранилищем в КриптоПРО 5.0 Для этого нужно знать адрес Сервера авторизации и DSS серверов.

Техподдержка Контура же отказалась сообщить эти url потому что:

"Это закрытая информация"

"Мы не предоставляем доступ к ним для использования на стороннем портале. DSS сертификаты используются только для работы с сервисами нашей компании через внутренний авторизованный доступ."

"Такая политика относительно серверов DSS связана с текущими недоработками в данной технологии." (Эта отмазка вообще прекрасна. Если технология недоработана, почему её сертифицировала ФСБ?)

(цитаты из чатов с разными операторами техподдержки, номер обращения 28323177)

Просмотрев QR-код, который Контур выдаёт для настройки мобильного приложения myDSS, я нашёл адрес DSS сервера: https://mydss.kontur-ca.ru/MyDssServerExternal/InteractionService.svc. Но адреса сервера авторизации там не было. А стандартные url не работали. Короче, реверс-инжиниринг не удался.

На всякий случай написал в поддержку КриптоПРО, вот что они ответили:

У нас нет и не может быть адресов облачных сервисов на базе КриптоПро DSS, развернутых сторонними компаниями. Мы лишь предоставляем ПО, которые наши заказчики вправе использовать по своему усмотрению. (Обращение 33489)

Тензор тоже "хорош". Предложил им альтернативный способ идентификации на существующих сервисах - я отправляю в адрес компании через систему электронного документооборота (Контур.Диадок) подписанную облачной подписью заявку на выпуск ЭЦП и все необходимые документы (паспорт, СНИЛС). На основании которых подпись выпускается как новая. Ну и предложил созвониться по видеосвязи если они очень хотят понаблюдать моё лицо (знаю что такую идентификацию использовали некоторые банки при открытии расчётных счетов юрлицам во время "первой волны" пандемии) . Мне было отказано:

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

На мой взгляд, оба удостоверяющих центра своими действиями нарушили 63-ФЗ и собственные же договора и регламенты.

В частности, у Контура в договоре есть такие пункты насчёт прав пользователя:

6.5.1. Круглосуточно получать доступ к серверу Удостоверяющего центра за исключением времени проведения профилактических работ и воспроизводить графическую часть (рабочий интерфейс) на экране персонального компьютера;

6.5.2. использовать все функциональные возможности ПО

Кроме того, согласно п 3.1.4 ГОСТ Р 34.10-2012, которому якобы соответствует КриптоПРО DSS, "параметр схемы ЭЦП (domain parameter): Элемент данных, общий для всех субъектов схемы цифровой подписи, известный или доступный всем этим субъектам". Т.е. по ГОСТУ Контур не имеет права делать эту информацию закрытой.

А у Тензора в регламенте есть такая обязанность:

3.1.19. Идентификация заявителя проводится при его личном присутствии или посредством идентификации заявителя без его личного присутствия с использованием КЭП при наличии действующего квалифицированного сертификата.

В самом регламенте нет подробной процедуры как именно происходит идентификация при помощи КЭП. А п.1 ст 18 ФЗ-63 говорит о том что удостоверяющий центр ОБЯЗАН "осуществлять идентификацию заявителя без его личного присутствия с использованием квалифицированной электронной подписи при наличии действующего квалифицированного сертификата". Конечно, есть принцип "Закон не заботиться о мелочах", но по букве закона и логике вещей подписание заявки на получение ЭП и отправку её через СЭД Тензор обязан засчитать за идентификацию.

Короче говоря, из-за бездействия удостоверяющих центров сегодня я не смог выпустить электронную подпись и как минимум просрочил отчёт РСВ по ООО за 9 месяцев (сегодня крайний день сдачи), в результате чего попал на штраф минимум в 1000 рублей. Я, конечно, отправил обращение в ФНС по данной ситуации, но штрафы там выписывают автоматически и мне видимо придётся их отменять через суд, что само-собой влечёт потери времени. Чтоб их компенсировать планирую обратиться в суд с встречным иском к Контуру и Тензору. Как думаете, какие шансы?

Еще слышал новость о том что с 1 января 2022 года УЦ не смогут выдавать подписи юрлицам эти полномочия перейдут к Удостоверяющему центру ФНС. Тот факт что УЦ сейчас забивают на клиентский сервис и техническое развитие выглядит вполне логичным. Но не до такой же степени чтоб нарушать ФЗ.

Напишите пожалуйста в комментариях всё что вы думаете по описанной проблеме. Особенно хотелось бы увидеть здесь комментарии представителей Контура, Тензора, КриптоПРО, Минкомсвязи и ФСБ :) И юристов, которые специализируются на вопросах электронной подписи.


Подробнее..

ЭЦП по ГОСТ на GNULinux с помощью OpenSSL

05.04.2021 00:18:36 | Автор: admin

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

Удостоверяющий Центр выдал нам ключ и сертификат в одном PKCS#12 файле auth.p12
Я исхожу из того, что у нас в наличии есть linux и docker. Можно даже не локально - вполне можно закинуть наш документ куда-нибудь на хостинг и подключиться по SSH. Подробности установки docker и работы с докер-образами оставим за пределами этой заметки. Перейдём сразу к делу:

Прямо из папки, где лежит наш документ на подпись (document.pdf) и PKCS#12 файл (auth.p12) запускаем замечательный docker образ OpenSSL с поддержкой ГОСТ и заходим в контейнер:
sudo docker run --rm -i -t -v pwd:pwd -w pwd rnix/openssl-gost bash
Вытаскиваем из PKCS#12 файла приватный ключ и сохраняем его в pem-формате. Может потребоваться ввести ваш пароль от PKCS#12 файла.
openssl pkcs12 -in auth.p12 -out key.pem -engine gost -nodes -clcerts
Аналогично вытаскиваем из PKCS#12 файла и сертификат.
openssl pkcs12 -in auth.p12 -clcerts -nokeys -out pub.crt
Подписываем документ. Подпись будет отсоединенная, в формате PKCS#7 в отдельном файле (document.pdf.sig)
openssl smime -sign -signer pub.crt -inkey key.pem -engine gost -binary -noattr -outform DER -in document.pdf -out document.pdf.sig
Проверить подпись можно много где, как локально так и на сайте госуслуг, например.
Всё. Можно отправлять контрагенту документ и соответствующий sig файл.

Если вдруг у вас сертификат в формате DER (в Windows часто это файл с расширением .cer), то можно конвертировать такой сертификат в pem-формат:
openssl x509 -inform DER -in pub.cer -out pub.crt

Файлы в примерах команд выше:
auth.p12 - бинарный PFX-файл, содержащий сертификат и закрытый ключ
pub.crt - сертификат (содержащий открытый ключ) в текстовом формате PEM
pub.cer - сертификат (содержащий открытый ключ) в бинарном формате DER
key.pem - закрытый ключ
document.pdf - pdf-документ, который необходимо подписать
document.pdf.sig - файл куда будет сохранена отсоединённая подпись к документу

Источники вдохновения:
Работаем с реестром запрещенных ресурсов
Не ждем, а готовимся к переходу на новые стандарты криптографической защиты информации
Docker-образы с поддержкой ГОСТ-сертификатов в openssl, curl, php, nginx
OpenSSL: простое шифрование с открытым ключом
https://stackoverflow.com/questions/52980370/how-to-convert-p12-to-crt-file
https://www.emaro-ssl.ru/blog/convert-ssl-certificate-formats/
https://qna.habr.com/q/213942
http://rodji.net/blog/2013/12/27/openssl-по-гост-подписывание-шифрование-пр/
https://polikarpoff.ru/all/eksport-ecp-v-formate-pkcs-12/

Подробнее..

Интеграция ЭЦП НУЦ РК в информационные системы на базе веб технологий

07.07.2020 14:13:48 | Автор: admin

Я расскажу о тонкостях внедрения электронной цифровой подписи (ЭЦП) в информационные системы (ИС) на базе веб технологий в контексте Национального Удостоверяющего Центра Республики Казахстан (НУЦ РК).


В центре внимания будет формирование ЭЦП под электронными документами и, соответственно, NCALayer предоставляемое НУЦ РК криптографическое программное обеспечение. В частности уделю внимание вопросам связанным с UX и объемом поддерживаемого функционала NCALayer.


Процесс разделю на следующие этапы:


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

Формирование неизменного представления подписываемого документа


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


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


  • извлечь все поля записи, привести их к строкам и соединить в одну строку;
  • сформировать XML или JSON представление;
  • сформировать PDF документ на базе шаблона с каким-то оформлением содержащий данные из записи;
  • и т.п.

Далее возможны два сценария каждый из которых имеет свои подводные камни:


  • ИС не хранит сформированного представления и каждый раз для проверки подписи под документом (в частности проверки неизменности данных) формирует его;
  • ИС хранит сформированное представление и использует его для проверки подписи.

В том случае, если ИС не хранит сформированного представления, разработчикам необходимо гарантировать что в будущем формируемые представления будут бинарно идентичны тем, которые были сформированы в первый раз не смотря на:


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

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


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


Подписание документа в веб интерфейсе с помощью NCALayer


Для формирования цифровых подписей на стороне клиента НУЦ РК предоставляет единственный инструмент сертифицированное программное обеспечение NCALayer которое представляет из себя WebSocket сервер, запускаемый на 127.0.0.1, которому можно отправлять запросы на выполнение криптографических (а так же некоторых смежных) операций. При выполнении некоторых операций NCALayer отображает диалоговые окна то есть берет часть работы по получению пользовательского ввода на себя.


Описание API NCALayer доступно в составе комплекта разработчика. Для того, чтобы поэкспериментировать со взаимодействием с NCALayer по WebSocket можно воспользоваться страницей интерактивной документации KAZTOKEN mobile (KAZTOKEN mobile повторяет API NCALayer).


Взаимодействовать с NCALayer из браузера можно напрямую с помощью класса WebSocket, либо можно воспользоваться библиотекой ncalayer-js-client которая оборачивает отправку команд и получение ответов в современные async вызовы.


Замечу что весь основной функционал NCALayer доступен в модуле kz.gov.pki.knca.commonUtils, использовать модуль kz.gov.pki.knca.applet.Applet (наследие Java аплета) не рекомендую, так как, на мой взгляд, это не даст никаких преимуществ, но шансов выстрелить себе в ногу с ним больше к примеру можно случайно разработать интерфейс который не будет поддерживать аппаратных носителей (токенов или смарт-карт) с несколькими ключевыми парами.


Модуль kz.gov.pki.knca.commonUtils берет на себя взаимодействие с пользователем связанное с выбором конкретного хранилища, которое нужно использовать для выполнения операции (так же он берет на себя выбор конкретного сертификата и соответствующего ключа, а так же ввод пароля или ПИН кода), но ему необходимо указать какой тип хранилищ нужно использовать. Типы хранилищ стоит разделить на два класса:


  • файловые, поддерживается единственный тип заданный константой 'PKCS12',
  • аппаратные (токены и смарт-карты), для перечисления тех типов, экземпляры которых в данный момент подключены в ПК пользователя, следует использовать запрос getActiveTokens.

Таким образом для того, чтобы предоставить пользователю возможность работать с любым поддерживаемым NCALayer хранилищем, можно воспользоваться одним из следующих подходов:


  • гибкий отправить запрос getActiveTokens, в ответ получить массив имен доступных а данный момент типов хранилищ, добавить в него 'PKCS12' и спросить у пользователя каким он хотел бы в данный момент воспользоваться;
  • простой отправить запрос getActiveTokens, в том случае, если он вернул массив несколькими именами, попросить пользователя отключить лишнее, если в массиве один элемент, использовать его, если массив пустой, использовать 'PKCS12'.

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


  • createCAdESFromBase64 вычислить подпись под данными и сформировать CMS (CAdES);
  • createCMSSignatureFromBase64 вычислить подпись под данными, получить на подпись метку времени (TSP) и сформировать CMS (CAdES) с внедренной меткой времени;
  • signXml вычислить подпись под XML документом, сформированную подпись добавить в результирующий документ (XMLDSIG);
  • signXmls аналогично signXml, но позволяет за один раз подписать несколько XML документов.

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


Модуль kz.gov.pki.knca.commonUtils поддерживает следующие типы сертификатов:


  • 'AUTHENTICATION' сертификаты для выполнения аутентификации;
  • 'SIGNATURE' сертификаты для подписания данных.

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


Упрощенный пример подписания произвольного блока данных с использованием ncalayer-js-client:


async function connectAndSign(base64EncodedData) {  const ncalayerClient = new NCALayerClient();  try {    await ncalayerClient.connect();  } catch (error) {    alert(`Не удалось подключиться к NCALayer: ${error.toString()}`);    return;  }  let activeTokens;  try {    activeTokens = await ncalayerClient.getActiveTokens();  } catch (error) {    alert(error.toString());    return;  }  const storageType = activeTokens[0] || NCALayerClient.fileStorageType;  let base64EncodedSignature;  try {    base64EncodedSignature = await ncalayerClient.createCAdESFromBase64(storageType, base64EncodedData);  } catch (error) {    alert(error.toString());    return;  }  return base64EncodedSignature;}

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


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


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


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


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


Подготовка подписи к долгосрочному хранению


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


Для фиксации момента подписания принято использовать метки времени TSP. Метку времени на подпись можно получить либо на клиенте (запрос createCMSSignatureFromBase64 интегрирует метку времени в CMS), либо на сервере. Метка времени позволит удостовериться в том, что момент подписания попадает в срок действия сертификата.


Для того, чтобы удостовериться в том, что сертификат не был отозван в момент подписания, следует использовать CRL или OCSP ответ. Этот нюанс и рекомендации по реализации описаны в разделе APPENDIX B Placing a Signature At a Particular Point in Time документа RFC 3161.

Подробнее..

Юридически значимый электронный документ (для РК) из веб формы без серверного кода

18.03.2021 20:06:33 | Автор: admin

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


  • необходимо добавить на сайт предприятия возможность подавать официальные заявки или обращения;
  • необходимо добавить в веб интерфейс портала возможность подписывать договор присоединения;
  • необходимо реализовать онлайн приемную.

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


Речь будет идти о сертификатах ЭЦП, выпущенных НУЦ РК.


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


Я буду использовать:


  • Vue.js для удобства разработки (постараюсь не писать ничего специфического, так, чтобы можно было легко переключиться на любой другой);
  • Bootstrap для базового оформления (его практически не будет заметно);
  • axios для упрощения сетевого взаимодействия;
  • pdfmake для создания PDF из JS;
  • ncalayer-js-client для взаимодействия с NCALayer;
  • SIGEX для проверки подписей и отправки документов по электронной почте.

Для реализации мне потребуются:


  • шаблон электронного документа, состоящий из фиксированной части и полей, которые должен заполнять пользователь;
  • действующий сертификат ЭЦП НУЦ РК;
  • установленный NCALayer.

В самой статье я приведу только ключевые части кода, а с полной реализацией можно ознакомиться тут: https://github.com/sigex-kz/example-sign-web-form


Веб форма


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


<form v-on:submit.prevent="compilePDF">  <h2>{{ formHeader }}</h2>  <p>{{ formIntro }}</p>  <div v-for="formItem in formItems" class="form-group">    <label>{{ formItem.label }}</label>    <input v-model="formItem.value" type="text" class="form-control">  </div>  <button type="submit" class="btn btn-primary">Сформировать документ</button></form>

Фиксированные части формы буду заполнять в объекте данных Vue.js для того, чтобы их можно было использовать и в HTML и в PDF:


new Vue({...  data: {    formHeader: 'Документ 1',    formIntro: 'Этот документ сформирован в браузере из данных веб формы, является примером, он никого ни к чему не обязывает и ничего не гарантирует, несмотря на то, что он может быть подписан ЭЦП.',    formItems: [      { label: 'Первый вопрос', value: '', },      { label: 'Второй вопрос', value: '', },      { label: 'Третий вопрос', value: '', },    ],...  },...

Генерация PDF в JS


Для формирования PDF воспользуюсь библиотекой pdfmake, она создает PDF файл из определения объекта JS.


Сначала сформирую объект определения и наполню его данными, после этого передам его в pdfmake и получу байты PDF файла в base64 кодировке:


async compilePDF() {  const pdfDefinition = {    content: [      { text: this.formHeader, fontSize: 20, bold: true, alignment: 'center', margin: [ 0, 0, 0, 20 ] },      { text: this.formIntro, fontSize: 15, margin: [ 0, 0, 0, 20 ] },    ],  };  for (const formItem of this.formItems) {    pdfDefinition.content.push(`${formItem.label}: ${formItem.value}`);  }  this.dataB64 = await new Promise((resolve) => {    const pdfDocGenerator = pdfMake.createPdf(pdfDefinition);    pdfDocGenerator.getBase64(resolve);  });},

Подписание PDF цифровой подписью


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


<p>Вы подписываете документ <a v-bind:href="`data:application/octet-stream;base64,${dataB64}`" target="_blank" v-bind:download="title">{{ title }}</a>.</p>

НУЦ РК предоставляет сертифицированное средство ЭЦП приложение NCALayer, его и буду использовать для формирования подписи. NCALayer это WebSocket сервер, чтобы не писать обработку отправки и получения команд вручную, воспользуюсь библиотекой ncalayer-js-client.


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


const storageTypes = await this.ncaLayer.getActiveTokens();if (storageTypes.length == 0) {  this.storageType = 'PKCS12';} else {  this.storageType = storageTypes[0];}

Теперь можно подписать PDF. В зависимости от типа запрошенного хранилища, NCALayer отобразит соответствующий пользовательский интерфейс и завершит процедуру:


const signature = await this.ncaLayer.createCMSSignatureFromBase64(this.storageType, this.dataB64);

В том случае, если все прошло хорошо, на данный момент у меня имеются:


  • электронный документ в виде PDF файла;
  • цифровая подпись под электронным документом.

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


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


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


let response = await axios.post(  `${this.sigexURL}/api`,  {    title: this.title,    description: this.description,    signature,    emailNotifications: { to: ['some-manager@example.kz', this.email] },  },);this.sigexId = response.data.documentId;

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


Вторым этапом передам сервису на проверку подписанный документ:


const dataToSend = Uint8Array.from(atob(this.dataB64), c => c.charCodeAt(0)).buffer;response = await axios.post(  `${this.sigexURL}/api/${this.sigexId}/data`,  dataToSend,  {    headers: { 'Content-Type': 'application/octet-stream' },  },);

Сервис не хранит самих подписанных документов, только электронные подписи под ними. Электронные документы будут отправлены по электронной почте на указанные адреса.


Итог


Проверим соответствие поставленной задаче:


  • на основе заранее согласованного шаблона сформировать в веб интерфейсе электронный документ реализовано в виде статической веб страницы и небольшого количества JS кода;
  • предоставить возможность подписать его ЭЦП реализовано с использованием рекомендуемого сертифицированного ПО;
  • передать его для обработки группе менеджеров реализовано путем отправки подписанных документов на электронный адрес ответственных менеджеров;
  • обеспечить юридическую значимость в соответствии с законодательством РК реализовано с помощью API сервиса SIGEX.
Подробнее..

ЭДО здорового человека и российское

16.02.2021 20:15:11 | Автор: admin

Я индивидуальный предприниматель на УСН в сфере услуг, работаю в одно лицо. Некоторые контрагенты просят присылать им оригиналы закрывающих документов (актов).

Пользуюсь электронной почтой. За год отправляю, дай бог, 20 писем формата А5. Каждое обходится в среднем около 30 рублей. Письма отправляю обычные, не заказные. Если не дойдет, отправлю повторно, но такого еще не случалось. Мои расходы на почтовый документооборот, таким образом, составляют 20 * 30 = 600 рублей в год.

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

Т.к. я программист, то кое-что понимаю в криптографии. Суть электронной цифровой подписи (ЭЦП) в том, что у вас есть закрытый и открытый ключ. Любой документ можно подписать закрытым ключом и отправить клиенту подпись, где будет содержаться сама сигнатура подписи и открытый ключ, с помощью которого можно определить, что документ действительно подписан этим ключом. Ну а действительность ключа проверить в центрах сертификации, которые по цепочке сертификатов ведут к Министерству связи РФ.

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

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

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

Вооруженный этими познаниями я отправился прицениваться к ЭДО. Каково же было мое удивление, когда я узнал, что ЭДО стоит от 2000 рублей, причем минимальный пакет включает 200 пакетов на отправку, что явно избыточно для меня. У меня на порядок меньше 20. Причем у всех провайдеров. Обычное ЭДО, не интегрированное с 1С.

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

Не очень понимаю, как государство собралось экономить бумагу, если мелким предпринимателям не выгодном использовать ЭДО? Какой электронный документооборот, если на пустом месте предлагают увеличить расходы предпринимателя в 3 раза?

Радует то, что в этом году налоговая планирует выдавать ЭЦП бесплатно. Тогда мелкие предприниматели смогут обмениваться подписанными документами по обычной почте, а ЭДО будет пользоваться действительно только средний и крупный бизнес, для которого такие расходы оправданы.

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

А вообще, давно пора внедрять sig-подпись в теги метаданных PDF-файла. При этом для хэша подписи будет использоваться только тело PDF-файла, без метаданных. Ну или все метаданные, кроме метаданных подписи. Тогда можно обмениваться уже подписанными документами прямо в PDF.

Вот это и будет ЭЦП здорового человека, а не курильщика, как это происходит сейчас.

Подробнее..
Категории: Криптография , Эцп , Эдо

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru