Электронная цифровая подпись (ЭЦП)

  • Михаил
  • 8 мин. на прочтение
  • 126
  • 27 Jun 2024
  • 27 Jun 2024

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

Виды электронной подписи:

1. Простая электронная подпись - основана на простом подтверждении личности, например, с помощью пароля или OTP-кода.
2. Усиленная электронная подпись (ЭП) - основана на криптографических методах и имеет более высокую степень защиты. 

Подразделяется на:

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

Немного об усиленной электронной подписи. Она предполагает использование стандартных криптографических алгоритмов; впрочем, таких алгоритмов существует достаточно много, так что и здесь единого стандарта нет. Тем не менее де-факто усиленная ЭЦП обычно основана на асимметричном шифровании (абсолютно гениальном, на мой взгляд, изобретении Ральфа Меркла), идея которого чрезвычайно проста: для шифрования и расшифровывания используются два разных ключа. Эти два ключа всегда генерируются парой; один называется открытым ключом (public key), а второй — секретным ключом (private key). При этом, имея один из двух ключей, второй ключ воспроизвести за разумное время невозможно.

Квалифицированная электронная подпись имеет квалифицированный сертификат ключа ЭП, выданный аккредитованным удостоверяющим центром (п. 4 ст. 5 Закона № 63-ФЗ). Электронный документ, подписанный усиленной квалифицированной ЭП (далее – УКЭП) равнозначен документу на бумажном носителе, подписанному собственноручной подписью, и может применяться в любых правоотношениях в соответствии с законодательством Российской Федерации, кроме случая, когда допускается исключительно бумажный документооборот. Закон запрещает участникам ЭДО ограничивать признание УКЭП (п. 1 ст. 6, п. 2 ст. 10 Закона № 63-ФЗ. 

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

Юридические лица и ИП при помощи неквалифицированной электронной подписи (сокращенно – НЭП) вправе:

  • Организовать электронный документооборот внутри компании или со своими постоянными контрагентами. Обязательное условие — наличие соглашения, подтверждающего юридическую силу неквалифицированных электронных подписей. Только тогда документы, подтвержденные НЭП, будут считаться равноценными бумажным документам с ручной подписью (п. 2 ст. 6 закона от 06.04.2011 № 63-ФЗ «Об электронной подписи», письмо Минфина России от 12.09.2016 № 03-03-06/2/53182).
  • Участвовать в госзакупках (подавать заявки, делать запросы, предложения) со стороны поставщика (ст. 5, ст. 112 закона от 05.04.2013 № 44-ФЗ «О контрактной системе в сфере закупок товаров, работ, услуг для обеспечения государственных и муниципальных нужд»). Следует учесть, что все окончательные решения и документы по торгам подписываются квалифицированной подписью (п. 1 ст. 5 закона от 05.04.2013 № 44-ФЗ).

Физлица с помощью неквалифицированной электронной подписи могут:

  • отправлять документы в налоговые службы через свой личный кабинет налогоплательщика (абз. 6 п. 2 ст. 11.2 НК РФ).

Сравнительный анализ видов ЭЦП

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

В ст. 5 закона от 06.04.2011 № 63-ФЗ обозначено 3 типа электронных подписей, сравнительный анализ которых мы представили в таблице ниже:

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

1. Надежность алгоритмов шифрования и хеширования (RSA, ГОСТ Р 34.10, ECC).
2. Длина ключей (2048 бит и более).
3. Использование средств криптографической защиты информации (СКЗИ).
4. Наличие сертификата ключа проверки электронной подписи, выданного аккредитованным удостоверяющим центром.

Основные протоколы электронной подписи:

1. X.509 - стандарт, определяющий формат цифровых сертификатов.
2. CMS (Cryptographic Message Syntax) - стандарт для обмена подписанными и зашифрованными сообщениями.
3. PKCS#7 - открытый стандарт для цифровых подписей и шифрования.
4. PKCS#12 - стандарт для хранения и транспортировки личных ключей и сертификатов.

Алгоритм работы с электронной подписью:

1. Генерация ключевой пары (открытый и закрытый ключ).
2. Получение сертификата открытого ключа от аккредитованного удостоверяющего центра.
3. Подписание документа с помощью закрытого ключа.
4. Проверка подписи с использованием открытого ключа и сертификата.

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

  • Аутентификация автора документа.
  • Проверка целостности документа (отсутствие изменений).
  • Невозможность отказа от авторства (неотрекаемость).
  • Юридическая значимость в соответствии с законодательством.
  • Высокая степень защиты от подделки.

Генерирование открытого и секретного ключей

Итак, вы решили самостоятельно изготовить усиленную неквалифицированную электронную подпись и научиться подписывать ею свои документы. Начать необходимо, конечно, с генерирования пары ключей, открытого (public key) и секретного (private key). Существует множество стандартов и алгоритмов асимметричного шифрования. Одной из библиотек, реализующих эти алгоритмы, является PGP (Pretty Good Privacy). Она была выпущена в 1991 году под проприетарной лицензией, поэтому имеются полностью совместимые с ней свободные библиотеки (например, OpenPGP). Одной из таких свободных библиотек является выпущенная в 1999 году GNU Privacy Guard (GnuPG, или GPG). Утилита GPG традиционно входит в состав почти всех дистрибутивов Линукса; для работы из-под Windows необходимо установить, например, gpg4win. Ниже будет описана работа из-под Линукса.

Сначала сгенерируем собственно ключи, подав (из-под обычного юзера, не из-под root'а) команду

gpg --full-generate-key

В процессе генерирования вам будет предложено ответить на ряд вопросов:

  • тип ключей можно оставить «RSA и RSA (по умолчанию)»;
  • длину ключа можно оставить по умолчанию, но вполне достаточно и 2048 бит;
  • в качестве срока действия ключа для личного использования можно выбрать «не ограничен»;
  • в качестве идентификатора пользователя можно указать свои фамилию, имя и отчество, например, Иван Иванович Иванов; адрес электронной почты можно не указывать;
  • в качестве примечания можно указать город, либо иную дополнительную информацию.

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

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

gpg --export -a "Иван Иванович Иванов" > public.key
gpg --export-secret-key -a "Иван Иванович Иванов" > private.key

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

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

Нет ничего проще, чем создать отсоединенную ЭЦП в текстовом (ASCII) формате:

gpg -ba имя_подписываемого_файла

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

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

Вряд ли, конечно, вам самому придется проверять достоверность собственной электронной подписи, но если вдруг (на всякий случай) вам захочется это сделать, то нет ничего проще:

gpg --verify имя_файла_подписи имя_файла_документа

В реальности гораздо полезнее опубликовать где-нибудь в открытом доступе (например, на вашем персональном сайте или на сайте вашей организации):

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

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

Ссылки на материалы:

Усиленная неквалифицированная электронная подпись для всех пользователей «Личного кабинета для физических лиц»

Как сгенерировать ключ электронной подписи

Как самостоятельно изготовить электронную подпись

RSA Encryption In C# using BouncyCastle.Net

C#. Электронная подпись и библиотека BouncyCastle

Как подписать сообщение алгоритмом ГОСТ Р 34.11/34.10-2001 на Java

Как выглядит электронная подпись

документ подписан усиленной неквалифицированной электронной подписью