эцп представляет собой зашифрованную последовательность в виде штрих кода
Электронная цифровая подпись для чайников: с чем ее есть, и как не подавиться. Часть 1
Итак, все чаще в кругах, работающих с документами все чаще звучат слова «электронный документ» и, связанное с ним почти неразрывно «электронная цифровая подпись», иначе — ЭЦП.
Данный цикл статей предназначен для того, чтобы раскрыть «тайное знание» о том, что это такое, когда и как это можно и нужно использовать, какие есть плюсы и минусы.
Естественно, статьи пишутся не для специалистов по криптографии, а для тех, кто эту самую криптографию будет использовать, или же только начинает ее изучение, желая стать специалистом, поэтому я старался максимально упростить понимание всего процесса, приводя аналогии и рассматривая примеры.
Зачем нам вообще что-то подписывать? Естественно, чтобы удостоверить, что мы ознакомились с содержимым, согласны (а иногда наоборот, не согласны) с ним. А электронная подпись еще и защищает наше содержимое от подмены.
Итак, начать, естественно, стоит с того, что такое электронная цифровая подпись.
В самом примитивном случае это — результат хэш-функции. Что это такое лучше меня разъяснит википедиа, в нашем же случае главное, что с высокой степенью вероятности ее результат не повторяется для разных исходных данных, а также что результат этой функции мало того, что короче исходных данных, так еще по нему исходную информацию восстановить нельзя. Результат функции называют хэшем, а применение этой функции к данным называют хешированием. Грубо, можно назвать хэш функцию архивированием, в результате чего мы получаем очень маленькую последовательность байт, но восстановить исходные данные из такого «архива» нельзя.
Итак, мы читаем файлик в память, хэшируем прочитанное. И что, уже получаем ЭЦП? Почти. Наш результат с большой натяжкой можно назвать подписью, но, все же, полноценной подписью он не является, потому что:
1. Мы не знаем, кто сделал данную подпись
2. Мы не знаем, когда была сделана подпись
3. Сама подпись не защищена от подмены никак.
4. Ну и да, хэш функций много, какая из них использовалась для создания этого конкретного хэша?
Поэтому применять к хэшу слово «подпись» еще нехорошо, будем называть его дальше просто хэш.
Вы посылаете ваш файл другому человеку, допустим, по почте, будучи уверенными, что он точно получит и прочитает именно то, что вы послали. Он же, в свою очередь, тоже должен хэшировать ваши данные и сравнить свой результат с вашим. Если они совпали — все хорошо. Это значит что данные защищены? Нет.
Ведь хэшировать может кто угодно и когда угодно, и вы никогда не докажете, что он хэшировал не то, что вы послали. То есть, если данные будут перехвачены по дороге злоумышленником, или же тот, кому вы посылаете данные — не очень хороший человек, то данные могут быть спокойно подменены и прохэшированы. А ваш получатель (ну или вы, если получатель — тот самый нехороший человек) никогда не узнает, что он получил не то, что вы отправляли, или сам подменил информацию от вас для дальнейшего использования в своих нехороших целях.
Посему, место для использование чистой хэш функции — транспорт данных в пределах программы или программ, если они умеют общаться между собой. Собственно, с помощью хэш функций вычисляются контрольные суммы. И эти механизмы защищают от случайной подмены данных, но не защищают от специальной.
Но, пойдем дальше. Нам хочется защитить наш результат хеширования от подмены, чтобы каждый встречный не мог утверждать, что это у него правильный результат. Для этого самое очевидное что (помимо мер административного характера)? Правильно, зашифровать. А ведь с помощью шифрования же можно и удостоверить личность того, кто хэшировал данные! И сделать это сравнительно просто, ведь есть ассиметричное шифрование. Да, оно медленное и тяжелое, но ведь нам всего-то и надо — зашифровать маленькую последовательность байт. Плюсы такого действия очевидны — для того, чтобы проверить нашу подпись, надо будет иметь наш открытый ключ, по которому личность зашифровавшего (а значит, и создавшего хэш) можно легко установить.
Суть этого шифрования в следующем: у вас есть закрытый ключ, который вы храните у себя. И есть открытый ключ. Открытый ключ вы можете всем показывать и раздавать, а закрытый — нет. Шифрование происходит с помощью закрытого ключа, а расшифровывание — с помощью открытого.
Приводя аналогию, у вас есть отличный замок и два ключа к нему. Один ключ замок открывает (открытый), второй — закрывает (закрытый). Вы берете коробочку, кладете в нее какую-то вещь и закрываете ее своим замком. Так, как вы хотите, чтобы закрытую вашим замком коробочку открыл ее получатель, то вы открытый, открывающий замок, ключик спокойно отдаете ему. Но вы не хотите, чтобы вашим замком кто-то закрывал коробочку заново, ведь это ваш личный замок, и все знают, что он именно ваш. Поэтому закрывающий ключик вы всегда держите при себе, чтобы кто-нибудь не положил в вашу коробочку мерзкую гадость и не говорил потом, что это вы ее положили и закрыли своим замком.
И все бы хорошо, но тут сразу же возникает проблема, а, на самом деле, даже не одна.
1. Надо как-то передать наш открытый ключ, при этом его должна понять принимающая сторона.
2. Надо как-то связать этот открытый ключ с нами, чтобы нельзя было его присвоить.
3. Мало того, что ключ надо связать с нами, надо еще и понять, какой зашифрованный хэш каким ключом расшифровывать. А если хэш не один, а их, скажем, сто? Хранить отдельный реестр — очень тяжелая задача.
Все это приводит нас к тому, что и закрытый ключ, и наш хэш надо хранить в каких-то форматах, которые нужно стандартизировать, распространить как можно шире и уже тогда использовать, чтобы у отправителя и получателя не возникало «трудностей перевода».
Как водится у людей, к чему-то единому прийти так и не смогли, и образовалось два больших лагеря — формат OpenPGP и формат S/MIME + X.509. Но об этом уже в следующей статье.
Как работает электронная подпись
Одно из полезных применений асимметричного шифрования — работа с электронной подписью. Рассказываем, как устроена ЭП изнутри и где она применяется.
Что такое электронная подпись
Электронная подпись — это технология, которая помогает подтвердить подлинность электронного документа: договора, справки, выписки или чего-то ещё.
Если упрощённо, работает так:
👉 Есть некий документ, подписанный ЭП
👉 С помощью специальной программы можно проверить подлинность этой подписи и документа
✅ Если программа говорит, что всё окей, то мы можем быть уверены: документ подписал именно тот, кто в нём указан; и с момента подписания в документе ничего не изменилось.
❌ Или программа может сказать, что подпись не совпала. Это значит, что либо документ подписал другой человек, либо после подписания кто-то изменил этот документ (например, дописал ноль в стоимость контракта). Так мы поймём, что этому документу нельзя доверять.
С технической точки зрения ЭП — небольшой файлик, который прилагается к искомому документу. Файлик пересылается вместе с основным документом, его можно передавать по открытым каналам связи, в нём нет ничего секретного.
Электронная подпись нужна, чтобы защищать договоры, выдавать официальные справки, заключать сделки и участвовать в торгах по госзакупкам.
Основа ЭП — асимметричное шифрование
Как работает: сертификаты
Электронная подпись состоит из двух принципиальных частей:
Грубо говоря, ЭП должна гарантировать, что документ подписали именно вы и что вы подписали именно этот документ.
В сертификате хранятся данные о владельце подписи:
Но смысл сертификата не в том, что там хранятся эти данные, а в том, кто эти данные туда положил. В России сертификаты и ЭП выдают специальные удостоверяющие центры — это компании, которые гарантируют, что сертификат выдаётся именно тому, кто в этом сертификате указан.
Чтобы получить сертификат, вы приходите лично в эту компанию (удостоверяющий центр), показываете документы, фотографируетесь. Вас заносят в базу удостоверяющего центра и выдают ключи электронной подписи. Так все участники электронного документооборота будут уверены, что все документы, подписанные вашими ключами, подписаны именно вами.
Как работает: алгоритмы шифрования
Допустим, вы уже сходили в удостоверяющий центр и получили на флешке сертификат и ключ электронной подписи. Теперь нужно скачать специальный софт, который и будет подписывать ваши документы и проверять чужие на подлинность.
Проблема в том, что ЭП основана на алгоритмах асимметричного шифрования, а их много: разложение на простые множители, дискретное логарифмирование, эллиптические кривые и множество других. Ключ из одного алгоритма не подойдёт для использования в другом, поэтому в России договорились использовать стандарт шифрования ГОСТ Р 34.10-2012, основанный на эллиптических кривых. Все государственные органы работают только с таким алгоритмом и не принимают другие ЭП.
Это значит, что нам нужен специальный софт, в котором уже есть этот алгоритм. Чаще всего используют КриптоПРО, реже — ViPNet CSP. С помощью этих программ можно подписать документы и проверить сертификаты на подлинность.
Принцип работы электронной подписи
Электронная подпись — это асимметричное шифрование наоборот: вы зашифровываете закрытым ключом, а расшифровать может кто угодно с помощью открытого ключа, который доступен всем.
👉 Если открытый ключ подходит к сообщению и расшифровывает его, значит, оно было зашифровано именно этим закрытым ключом — то есть именно вами.
А что если подменят сам сертификат?
Все сертификаты, которые выдаёт удостоверяющий центр, тоже подписываются электронной подписью. Чтобы проверить подлинность сертификата, можно зайти на официальный сайт удостоверяющего центра и скачать открытый ключ для проверки. Если хеш самого сертификата совпадает с хешем, который мы получили с помощью открытого ключа с сайта — значит, и сам сертификат подлинный.
Как я решил защищать документы от подделки и «изобрел» электронную цифровую подпись
О чем это
На идею создать свой маленький интернет-проект по защите документов от подделки, меня натолкнула дискуссия на форуме дефектоскопистов, посвященная повальной подделке выданных ими заключений по контролю качества.
В ходе реализации своего проекта я понял, что пришел к концепции электронной цифровой подписи, то есть велосипед, я, конечно, не изобрел, но рассказ о моем пути может оказаться поучительным.
Актуальность задачи защиты от подделок
Дело в том, что в наш век безбумажной информации ни одно капитальное строительство, будь то газопровод или торговый центр, не обходится без подготовки полного комплекта исполнительной документации (as built), частью которой являются заключения по неразрушающему контролю (визуальному, радиографическому, ультразвуковому).
Это заключение — оформленный на определенном бланке документ с выводом о годности или негодности, к примеру, сварного шва. Услуги по неразрушающему контролю стоят денег и часто весьма немалых. Недобросовестный заказчик/посредник может нанять аккредитованную лабораторию, получить от нее несколько заключений и прекратить или приостановить работу.
Каково же может быть удивление дефектоскописта или начальника лаборатории, когда они узнают о том, что и после прекращения работы от их имени выдаются заключения, на них ставятся поддельные печати и подделываются подписи. Страдает репутация лаборатории, да и по сути нарушается законодательство. Просто в ряде случае об этом так никто и не узнает.
В рамках дискуссии — как защитить свои документы, была высказана идея наносить на документ QR-код, в котором будет записан номер заключения, дата и вывод о годности или не годности объекта контроля. Чем хорош такой способ — QR-код останется хорошо различим при сканировании, копировании документа.
Однако, просто сгенерировать QR-код с нужным содержимым точно также смогут и мошенники.
Рождение идеи
И тут меня осенила мысль — а почему бы не шифровать содержимое такого QR-кода надежным алгоритмом. Раз так — надо придумать способ его расшифровывать при сканировании, например через камеру смартфона. Здесь родилась идея расшифровку делать на стороне web-сервиса, который будет хранить ключ для расшифровки.
В последний раз я делал сайт в 2000 году в notepad и не слишком хорошо знаком с современными технологиями сайтостроительства, поэтому выбрал Wix, подумав, что с помощью сервиса я получу красивую картинку и минимальные возможности работы с базой данных, а с помощью Wix code закодирую то что мне нужно.
Сразу скажу, что это у меня получилось без особого труда и за несколько вечеров я, будучи дилетантом, вполне смог собрать из более-менее готовых блоков нужное мне решение.
Шифрование
Готовый алгоритм AES 128-битного шифрования с реализацией на Java Script я взял на Github и разместил в backend разделе сайта.
Это была, пожалуй, самая простая часть работы. Как работает само шифрование мне было не совсем неинтересно. Меня волновала грандиозность задуманного.
Главное не забыть перевести кодируемый текст в Bytes, а результат шифрования в HEX.
Генерация QR-кода
Я воспользовался готовым API.
Для работы достаточно создать объект html1 — для отображения произвольного html кода и вызвать фунцию API
Работа с пользователями
Wix поддерживает базовые функции регистрации пользователей и редактирования профиля. Инструмент, несколько глючный, но работоспособный.
Мне лишь потребовалось добавить поле, которое описывает наименование организации, которую представляет зарегистрированный пользователь, но это поле read only и его заполняет администратор сервиса, когда получает подтверждение, что зарегистрированный пользователь действительно представляет указанную организацию.
Потребовалось также прикрутить простейшую логику, связанную с платным/бесплатным доступом к функциям (до 20 документов в месяц можно защитить бесплатно) и сроком оплаты услуг.
Принцип работы
К аккаунту пользователя привязывается уникальный закрытый ключ шифрования.
Залогиненый пользователь заполняет форму с информацией о заключении (номер, дата, результат):
Затем алгоритм выдает URL, содержащий зашифрованный текст TEXT и, выступающий в виде открытого ключа USER_ID, как на примере ниже:
URL превращается в QR-код, который пользователь уже наносит на свой документ, скопировав в буфер обмена (можно включить в исходный файл или же налепить как стикер на готовый напечатанный документ).
Что здесь важно — как таковая информация не попадает в базу данных сайта, а остается лишь в виде этой ссылки и QR-кода, содержащего эту ссылку. Таким образом, никакая информация о содержимом защищаемого документа на сервере не хранится.
Проверка кода выполняется сайтом при распарсивании ссылки
Для распарсивания при распознавании сайтом ссылки я воспользовался справкой по Wix code
www.wix.com/code/reference/wix-http-functions.html
Если при расшифровке что-то пошло не так, а это может быть, если в оригинальный QR-код попытались внести какие-то изменения
«Код документа расшифрован с ошибкой. Возможна подделка. Обратитесь в организацию, подготовившую документ для получения пояснений»
Если расшифровка завершена успешно, то выдается расшифрованный текст, содержащий название лаборатории, номер документа, дату выдачи и результат, а пользователю предлагается сопоставить результат расшифровки с тем, что он видит на реальном документе.
Заключение
От рождения идеи я с помощью ряда готовых кирпичиков пришел к работающей реализации.
Приглашаю к дискуссии по придуманной мной идее, попытке протестировать/взломать мой сервис.
Что еще осталось доделать
Предварительный ответ на возможную критику:
Не проще лаборатории вести реестр заключений на своем сайте, а подобная QR метка будет вести на этот реестр или даже выводить копию заключения?
Это можно сделать, но потребуется значительная ручная работа или внедрение собственного IT решение наподобие разработанного мной, но это явно обойдется дороже чем воспользоваться готовым решением.
Сделать такой реестр полностью общедоступным нельзя, потому что информация не является открытой, а может быть рассмотрена лишь исполнителем, заказчиком и Ростехнадзором.
Простая электронная подпись
Простая электронная подпись создается средствами информационной системы, в которой ее используют, и подтверждает, что электронную подпись создал конкретный человек.
Согласно пункту 2 статьи 5 Федерального Закона «№ 63 от 06.04.2011 «Об электронной подписи» простая электронная подпись представляет собой комбинацию из логина, пароля и кодов и подтверждает, что электронное сообщение отправлено конкретным лицом.
Свойства простой электронной подписи
Простой электронной подписью является электронная подпись, которая посредством использования кодов, паролей или иных средств устанавливает связь человека, подписывающего информацию, с набором признаков, присущих только этому человеку, в целях контроля соблюдения прав или выполнения обязанностей, определенных подписанным документом.
Минимальным набором уникальных признаков, позволяющим определить права и обязанности личности, является имя, фамилия человека и его место жительства.
Свойства простой электронной подписи заключаются в следующем:
простая электронная подпись содержит зашифрованную персональную информацию о владельце и используется для подтверждения авторства перед отправкой данных;
простой вид электронной подписи не требует установки дополнительного программного обеспечения;
простая электронная подпись выпускается в основном для физических лиц и сотрудников организаций;
Простая электронная подпись с юридической точки зрения
Простая электронная подпись не имеет юридической силы.
Подписывать документ простой электронной подписью можно, но это действие не наделяет его никакими полномочиями, привилегиями.
Такой файл нельзя отправить, например, в ФНС для предоставления бухгалтерской или финансовой отчетности.
Использовать простую электронную подпись нельзя для работы с государственными органами, для получения доступа к электронным торгам. Но если стороны заключат соглашение о признании электронной подписи аналогом собственноручной подписи, то такие подписанные документы могут приобрести юридическую силу.
Так, например, происходит при подключении онлайн-банка к кредитной или дебетовой банковской карте. Сотрудник банка идентифицирует личность по паспорту, и подписывается договор на подключение онлайн-банка.
В дальнейшем простая электронная подпись будет иметь такую же юридическую силу, как и собственноручная подпись.
Когда документ считается подписанным простой электронной подписью
Для того чтобы электронный документ считался подписанным простой электронной подписью необходимо выполнение в том числе одного из следующих условий:
простая электронная подпись содержится в самом электронном документе;
ключ простой электронной подписи применяется в соответствии с правилами, установленными оператором информационной системы, с использованием которой осуществляются создание и (или) отправка электронного документа, и в созданном и (или) отправленном электронном документе содержится информация, указывающая на лицо, от имени которого был создан и (или) отправлен электронный документ.
При этом законодательством не уточняется, кто именно может быть владельцем ключа простой электронной подписи, но устанавливает ограничения по ее использованию.
Простая электронная подпись однозначно не может быть использована при подписании электронных документов, содержащих сведения, составляющие государственную тайну, или в информационной системе, содержащей сведения, составляющие государственную тайну.
Процедура получения простой электронной подписи
Для получения простой электронной подписи нужно один раз пройти процедуру регистрации и идентификации в структуре, для которой эта подпись будет предназначаться.
Аналогично, но с некоторыми нюансами, происходит идентификация для получения ПЭП на сайтах государственных услуг.
Например, для оформления простой электронной подписи на порталах госуслуг необходимо получить код подтверждения для идентификации личности.
Возможны 3 варианта получения идентификационного кода:
явиться лично в один из перечисленных на сайте центров обслуживания (например, отделение Почты РФ) с документами, которые были указаны при создании аккаунта на сайте госуслуг;
запросить отправку заказного письма с кодом через Почту РФ — соответственно, получать его вы будете по паспорту, что и подтвердит вашу личность;
с помощью уже имеющегося средства электронной подписи (например, оформленной через удостоверяющий центр).
Кем и где используется простая электронная подпись
Применение простой электронной подписи доступно для частных лиц, индивидуальных предпринимателей и организаций.
Юридические лица, индивидуальные предприниматели и физические лица применяют простую электронную подпись в клиент-банках, на различных сайтах (интернет-магазины, портал госуслуг, интернет-услуги и др.).
Таким образом, простая электронная подпись чаще всего применяется при банковских операциях, а также для аутентификации в информационных системах, для получения госуслуг, для заверения документов внутри корпоративного электронного документооборота.
Самые распространенные варианты использования простых электронных подписей следующие:
Авторизация на интернет-сайтах. Связка логин/пароль позволяют установить, что доступ к защищенным данным запрашивает именно их автор, а не третье лицо или вовсе бот;
Заверение электронных документов. Наличие простой электронной подписи позволяет установить кем был создан файл, когда он редактировался, а также когда он был скопирован. Таким способом можно контролировать производственный процесс, работу сотрудников;
Получение доступа к файлам и базам данных, защищенных паролем.
В качестве примера того, как работает простая электронная подпись, можно привести процесс использования интернет-банка для физических лиц.
Пользователь начинает вход в систему под своим индивидуальным логином и паролем, затем на заранее предоставленный пользователем банку номер мобильного телефона приходит дополнительный разовый код для завершения входа в систему.
Подобным способом достигается:
достаточная уверенность в том, что именно клиент банка зашел в систему интернет-банкинга (идентификация);
подтверждение того, что именно клиент желает совершить денежный перевод со своего счета через интернет (авторизация).
Комбинация из логина/пароля/номера телефона для контрольных СМС и является простым идентификатором (подтверждением) личности и намерений клиента.
То есть этот комплекс может расцениваться как подпись клиента под совершаемыми действиями.
Простая электронная подпись на порталах и государственных ресурсах
Простая электронная подпись позволяет заметно упростить взаимоотношения с госструктурами.
На портале mos.ru
Физические лица для получения электронных госуслуг на официальном сайте Мэра Москвы mos.ru пользуются простой электронной подписью (то есть им достаточно зарегистрироваться на сайте mos.ru).
Юридические лица и индивидуальные предприниматели также пользуются простой электронной подписью, но им необходимо подтвердить свою личность в центре госуслуг «Мои документы» для того, чтобы приравнять ее к собственноручной.
На портале gosuslugi.ru
На портале gosuslugi.ru есть несколько уровней учетной записи.
Пользуясь упрощенным и стандартным уровнями, можно подписывать заявления простой электронной подписью.
На сайте Росреестра
Часть услуг Росреестра (например, подать заявление, записаться на прием) можно получить, используя простую электронную подпись.
Итоги
Простая электронная подпись, оформляемая в основном физическими лицами, позволяет заметно упростить взаимоотношения с госструктурами, работодателями, банками или учебными заведениями. Являясь заменой рукописной подписи, простая электронная подпись является незаменимым инструментом, позволяющим предприятиям сконструировать удобный внутренний документооборот.
Остались еще вопросы по бухучету и налогам? Задайте их на бухгалтерском форуме.
Как работает электронная подпись
Из нашей статьи вы узнаете:
ЭЦП — электронная (цифровая) подпись — это аналог рукописной подписи. Она выполняет ту же функцию — обеспечивает юридическую значимость для документов. Только подписывают с помощью ЭЦП документы не бумажные, а электронные. Кроме того, электронная подпись фиксирует информацию, которая была в документе на момент подписания, тем самым подтверждая её неизменность.
Как устроена электронная подпись
Электронная подпись состоит из двух основных частей:
Эти составные части выполняют разные функции: с помощью закрытого ключа, доступного только владельцу, документ шифруется, а с помощью сертификата, доступного для всех, документ дешифруется. Таким образом, достигается цель использования ЭЦП — подтверждается то, кем был подписан документ, и заверяется его неизменность с момента подписания.
Закрытый ключ не содержит в себе ничего, кроме механизма, с помощью которого он может шифровать документы. Сертификат же несёт в себе такую полезную информацию, как сведения о владельце, сведения об удостоверяющем центре, срок действия электронной подписи и т.д. Сертификат выступает в роли главного носителя информации о ЭЦП.
Программы для работы и алгоритмы шифрования
Чтобы шифровать и подписывать документы, недостаточно только иметь сертификат и закрытый ключ, для работы нужно устанавливать специальные программы. С помощью этих программ, которые работают по определённому стандарту шифрования (в России — ГОСТ Р 34.10-2012), обеспечивается связь закрытого и открытого ключа с документами.
Самой популярной программой-криптопровайдером в России является «КриптоПро CSP». С её помощью можно подписывать и шифровать документы, проверять сертификаты на подлинность, контролировать целостность соответствующего программного обеспечения.
Принцип работы электронной подписи
Электронная подпись работает по ассиметричному принципу шифрования. То есть документ зашифровывается с помощью закрытого ключа, а расшифровывается с помощью открытого.
Подписание документа производится в несколько этапов:
Так как сертификаты, выдаваемые удостоверяющим центром, так же подписываются с помощью электронной подписи, подменить сертификат невозможно. На сайте удостоверяющего центра, как правило, можно скачать открытый ключ проверки, хеш которого должен совпадать с хешем открытого ключа владельца. Таким образом доказывается его достоверность.
Приобрести квалифицированную электронную подпись можно только в удостоверяющем центре, аккредитованном Минкомсвязи. УЦ «Астрал-М» предлагает надёжную и безопасную подпись «Астрал-ЭТ». Чтобы получить электронную подпись, достаточно выполнить четыре действия: