Интро
Это часть внутреннего документа который я сделал для своей компании. В нем краткая выжимка по таким вещам как что такое электронная подпись и как она выглядит в России.
Надеюсь она будет полезна. Если захотите продолжения с примерами и то как это генерить как руками, так и программно, а также освещения каких-то непонятных моментов, то пишем в комменты.
Криптография
Криптографией мы используем каждый день, заходя на сайты по
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.
😱 Комментарий удален его автором...
Спасибо, местами немного скомканно но суть вроде везде понятна. У меня только пара вопросов
Ну тут придется углубиться в такую часть как инфраструктура открытых ключей X.509
Поскольку пока у нас пользователи крипты этой не очень подкованы в рамках защиты секретного ключа, то меряются оба ключа.
На самом же деле схема немного другая
Далее вы уже при подписи предоставляете дополнительно этот сертификат. Сертификат имеет внутри подпись центра. В итоге проверка состоит из двух шагов
Да-да те самые списки CA нужны для этого. Для российских УЦ есть аналогичный же набор.
Еще может дополняться пунктом
3. Сходить узнать не отозван ли сертификат. Это делается запросом на CA. И он сообщает статус сертификата.
Сертификат имеет ограниченное время действия и обычно заменяется раз в год.
Если же вы сгенерите себе ЭП, то она будет самоподписанная и хотя подпись ей проверяется. Она не имеет доверия.
Агентом можно, но ключи будут именно от УЦ. Если вы хотите выдавать сами ключи проходите сертификацию, ставите сертифицированный софт начинаете выдавать свои ЭП.
Интересная, но довольно скомканная статья. Добавлю немного уточнений.
С симметричным ключом
С открытым ключом
Не совсем, это шифрование бывает симметричное и ассиметричное, а не ключ.
Ссылка на клиент, а не на CSP, а это совсем разные вещи
Крипто Про
VipNet
ЛИССИ Софт
Сигнал-КОМ
Это весь список? Есть и другие сертифицированные, например Валидата CSP, СКЗИ Верба.
Имхо когда до этого момента объяснение было "на пальцах", еще можно было говорить про открытый и закрытый ключ. Когда же речь дошла до УЦ корректнее говорить про закрытый ключ и сертификат, который включает себя информацию о владельце, удостоверяющем цетре, дату подписи, срок действия, открытый ключ и т.д.
И еще - УЦ проходят аккредитацию, а не сертификацию.