Электронная подпись как и зачем
 Публичный пост
26 ноября 2020     248   

Интро

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

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

Криптография

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

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

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

Все криптографические алгоритмы можно разделить на две категории (или как их еще называют системы)

  • С симметричным ключом
  • С открытым ключом

Криптостойкость

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

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

Системы с симметричным ключом

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

Плюсы таких систем

  • скорость работы
  • простота реализации
  • меньшая требуемая длина ключа для сопоставимой стойкости
  • лучшая изученность в силу возраста

Минусы

  • сложность управления ключами при большом количестве отправителей и получателей
  • сложность обмена ключами

Системы с открытым ключом

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

  • Секретный ключ
  • Открытый ключ

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

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

Такая схема решает проблемы систем с симметричным ключом, а именно

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

Минусы у системы так имеются

  • требуется большая длина ключа для обеспечения криптостойкости аналогичной в системе с симметричным ключом
  • скорость работы ниже чем у систем симметричным ключом

Электронная подпись

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

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

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

  • сообщение
  • подпись

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

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

  • Россия
  • Канада
  • ЮАР
  • США
  • Алжир
  • Турция
  • Индия
  • Бразилия
  • Индонезия
  • Мексика
  • Саудовская Аравия
  • Уругвай
  • Швейцария
  • Чили
  • Евросоюз

Электронная подпись в России

Электронная подпись в России использует свои отдельные стандарты криптографии разработка которых была начата еще
во времена СССР. Эти стандарты основаны на эллиптических кривых. В данный момент они считаются перспективными и
в США. И идет плавный переход на ECDSA с DSA. Преимуществом использования эллиптических кривых является меньшая
длина ключа при той же криптостойкости, что и в DSA.

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

Но чаще всего используется именно Крипто Про. Остальные могут встречаться заметно реже. Также есть большой список
криптографических аппаратных ключей которые поддерживают росссийские стандарты криптографии
и подключаются через PKCS#11

В openssl начиная с версии 1.1 входит реализация российских стандартов криптографии. Также сертифицированные
криптопровайдеры поддерживают подключение к ним через openssl.

В качестве стандарта подписи используется PKCS#7 в DER или BASE64 кодировке. Это зависит от ПО.
Но чаще используется DER-кодировка.

При шифровании используется S/MIME формат в который упаковывается зашифрованный файл и открытый ключ.

Для получения пары ключей (открытый/закрытый) используемых для генерации электронной подписи нужно обратиться
в аккредитованный удостоверяющий центр. Пара ключей при этом обычно называется электронной подписью.
Но на самом деле электронная подпись это результат использования этих ключей. Выдаваемые ключи бывают трех видов

  • Физическое лицо
  • Индивидуальный предприниматель
  • Представитель юридического лица

Физическое лицо

Набор атрибутов следующий

  • CN - ФИО (Иванов Иван Иванович)
  • SN - Фамилия (Иванов)
  • G - Имя Отчество (Иван Иванович)
  • C - Страна (RU)
  • S - Регион (59 Пермский край)
  • L - Город (Пермь)
  • SNILS - СНИЛС
  • INN - ИНН
  • E - email

Индивидуальный предприниматель

Набор атрибутов такой же как у физического лица и добавляется еще

  • OGRNIP - ОГРНИП

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

Представитель юридического лица

  • CN - Наименование организации (ООО "Золотое дно")
  • SN - Фамилия представителя (Иванов)
  • G - Имя Отчество (Иван Иванович)
  • C - Страна (RU)
  • S - Регион (59 Пермский край)
  • L - Город (Пермь)
  • STREET - Юридический адрес (ул. Пермская д.2 оф. 666)
  • O - Организация (ООО "Золотое дно")
  • OU - Подразделение (Администрация)
  • T - Должность (Директор)
  • OGRN - ОГРН (1057600577913)
  • SNILS - СНИЛС представителя (07515657983)
  • INN - ИНН организации (7604074992)
  • E - email представителя (ivanov@dno.ru)

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

Создание электронной подписи при помощи CryptoPro

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

6 комментариев 👇
Siarhei Krukau, Бэкендщик 26 ноября 2020

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

@madhead, спасибо подфиксил.

  Развернуть 1 комментарий

Спасибо, местами немного скомканно но суть вроде везде понятна. У меня только пара вопросов

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

@stansv, да забыл упомянуть. Создать свою структуру ключей можно и многие организации именно так и делают и у них есть свой УЦ.

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

  Развернуть 1 комментарий
Anatoly Shipitsin, Специалист по НЕХ автор 26 ноября 2020

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

Ну тут придется углубиться в такую часть как инфраструктура открытых ключей X.509

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

На самом же деле схема немного другая

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

Далее вы уже при подписи предоставляете дополнительно этот сертификат. Сертификат имеет внутри подпись центра. В итоге проверка состоит из двух шагов

  1. проверить вашу подпись
  2. проверить подпись удостоверяющего центра в сертификате, используя сертификат на компьютере.

Да-да те самые списки CA нужны для этого. Для российских УЦ есть аналогичный же набор.

Еще может дополняться пунктом
3. Сходить узнать не отозван ли сертификат. Это делается запросом на CA. И он сообщает статус сертификата.

Сертификат имеет ограниченное время действия и обычно заменяется раз в год.

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

Можно ли самому стать посредником и выдавать третьим лицам ключи ЭП от имени такой организации?

Агентом можно, но ключи будут именно от УЦ. Если вы хотите выдавать сами ключи проходите сертификацию, ставите сертифицированный софт начинаете выдавать свои ЭП.

  Развернуть 1 комментарий

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

Все криптографические алгоритмы можно разделить на две категории (или как их еще называют системы)

С симметричным ключом
С открытым ключом

Не совсем, это шифрование бывает симметричное и ассиметричное, а не ключ.

VipNet

Ссылка на клиент, а не на CSP, а это совсем разные вещи

В данный момент это:

Крипто Про
VipNet
ЛИССИ Софт
Сигнал-КОМ

Это весь список? Есть и другие сертифицированные, например Валидата CSP, СКЗИ Верба.

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

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

  Развернуть 1 комментарий

@prianichnikov,

Не совсем, это шифрование бывает симметричное и ассиметричное, а не ключ.

Представьте себе официальная терминология. Я понимаю что wikipedia так себе источник, но что английская

3 Modern cryptography

3.1 Symmetric-key cryptography
3.2 Public-key cryptography

что русская

Современная криптография

3.1 Криптография с симметричным ключом
3.2 Криптография с открытым ключом

могу только развести руками.

Это весь список? Есть и другие сертифицированные, например Валидата CSP, СКЗИ Верба.

Тут наиболее популярные и которые хоть как-то гуглятся, а так их конечно 100500 разных еще есть.

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

Тогда придется рассказывать про то как происходит в УЦ и почему. Но вообще можно дополнить хотя для общего представления этого вполне достаточно.

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб