Кратко об электронной подписи, ключах и сертификатах
Те, для кого знакомы термины «асимметричное шифрование» и «инфраструктура закрытых ключей», вряд ли узнают из данной статьи много нового. Она не будет содержать математических выкладок и оценок сложности вычислимости, но общие принципы и понятия будут...
C чего всё началось
Не секрет, что не всякий администратор всегда чётко представляет глубинную суть выполняемых им действий по настройке чего-либо. Этим я не хочу никого обидеть, а всего лишь констатирую факт. Кто-то талантливый самоучка без знания теоретической основы, кто-то намеренно отказался от теории в пользу практики. И уж тем более, не всегда пользователь понимает суть технологий, которыми он пользуется.
Именно так ситуация обстоит с электронной подписью, её ключами и сертификатами. Те, для кого знакомы термины «асимметричное шифрование» и «инфраструктура закрытых ключей», вряд ли узнают из данной статьи много нового. Она не будет содержать математических выкладок и оценок сложности вычислимости ключей, но общие принципы и понятия будут интересны и полезны неискушенным в это теме.
Кратко и по сути
Электронная цифровая подпись в своем более-менее стандартном понимании представляет собой некоторый объем данных, связанный с другими данными, позволяющий установить авторство и целостность последних. Если сказать проще, она позволяет установить, кто подписал документ, и изменялся ли документ после подписания. Под документом в данном случае понимаются любые цифровые данные.
Механизм подписания по сути своей является шифрованием (точнее, криптопреобразованием) по определенному алгоритму на определенном ключе, причём любая уникальная комбинация исходных данных и ключа дает на выходе уникальный массив данных (подпись). Проверка подписи при этом представляет собой повторное её вычисление и сравнение с имеющейся на стороне проверяющего. Таким образом, если подпись неверна, то либо используется неверный ключ, либо документ не тот. Если с последним случаем всё понятно, то первый помогает нам определить авторство документа только при условии, что ключ однозначно принадлежит подписывающему и только ему.
Теперь мы вплотную подобрались к важнейшему вопросу: как обеспечить проверку авторства документа, не компрометируя при этом ключ.
Немного истории
Исторически первым появилось симметричное шифрование. Оно представляет собой преобразование исходной информации по определенным алгоритмам с определенным ключом. Алгоритм известен и общедоступен, и, в идеальном случае, получение исходных данных из криптограммы без ключа невозможно. Для обратного преобразования используется тот же ключ. Получается, что стороны должны обладать общим секретом для того, чтобы обмениваться данными (в нашем случае – подписанными данными). В случае, когда имеем только 2 участника обмена, сложностей не возникает, но как только количество участников возрастает, гарантированно определить авторство уже невозможно. Кроме того, если ключ передан не из рук в руки, то необходим надежный посредник.
Получаем, что для достижения наших целей для каждой пары участников придётся заводить свой ключ. Для 3 участников – 3 ключа, для 4 – 6, для 5 – 10 и так далее в арифметической прогрессии. Как в такой ситуации не запутаться – вопрос весьма нетривиальный.
Данная задача весьма облегчилась с появлением асимметричного шифрования (совсем недавно – теория начала разрабатываться в 70-х годах прошлого века). Оно основано на следующем факте: некоторые математические операции являются односторонними, то есть по известному x f(x) вычислить можно, а вот наоборот – нельзя. Зашифровываются данные одним ключом, а расшифровываются другим. Ключи однозначно связанны между собой, но без дополнительной информации не позволяют получить один из другого. Один ключ называют открытым; он может свободно передаваться по открытым каналам, так как позволяет выполнить только половину криптопреобразования (либо только расшифровать, либо только зашифровать). Второй – закрытым; он хранится в секрете владельцем.
Таким образом, любой участник обмена должен иметь всего лишь 2 ключа. Получаем выгоду в количестве ключей уже начиная с 6 участников. Кроме того, закрытый ключ знает только его владелец. Значит, можно сказать, что информация, зашифрованная с использованием указанного ключа, могла быть зашифрована только им.
И снова к теории
Обратимся непосредственно к механизму ЭЦП. Наибольшее распространение получили алгоритмы с использованием открытого ключа.
Как уже говорилось выше, ЭЦП решает 2 задачи: определение авторства и неизменности документа. Существует множество алгоритмов, но все они направлены на их решение и имеют общую суть.
Предположим, что мы имеем сообщение M, открытый ключ K, закрытый ключ k и функцию f() с обратной ей F().
Рассмотрим механизм подписи.
Так как подпись должна иметь стандартные размеры, а текст может быть подписан любой, при создании подписи используют так называемую функцию хеширования, значение которой для любого уникального массива данных так же уникально и однозначно, но имеет стандартный размер и не позволяет восстановить исходные данные. Обозначим эту функцию H().
Подписание происходит следующим образом: для данных вычисляется значение хеш-функции
h=H(M),
затем это значение шифруется с помощью закрытого ключа
s=f(h,k).
Значение s и будет являться ЭЦП для сообщения M.
Для проверки подписи производятся следующие вычисления: вычисляется значение хеша для сообщения
h=H(M),
после чего с помощью открытого ключа расшифровывается значение s
h’=F(s,K).
Если h’ = h, то подпись верна. В противном случае возможны 2 варианта: использовался неверный открытый ключ (то есть, авторство не определено) или сообщение было искажено.
То же самое, но в картинках:
Как мы видим, функции подписи, определенные в начале, выполняются. Но тут возникает следующий вопрос, кто гарантирует, что открытый ключ не был подменен при распространении (для тех, кто понимает, атака Man In The Middle) и мы общаемся с тем кем хотим, а не со злоумышленником, выдающим себя за другого? Ответ напрашивается сам – нам нужен некий авторитет, гарантирующий принадлежность ключей, и механизм их распространения. Данное решение было реализовано в виде инфраструктуры открытых ключей и сертификатов удостоверяющих центров. Тогда с сообщением передается не только подпись, но и сертификат, удостоверяющий её.
Инфраструктура открытых ключей (PKI)
Инфраструктура открытых ключей призвана обеспечить доверительные отношения между участниками взаимодействия.
Участниками и основными элементами PKI являются удостоверяющие центры (УЦ) и конечные пользователи. Никто из конечных пользователей не доверяет друг другу, но каждый из них доверяет УЦ. Каждый пользователь имеет закрытый ключ, который он хранит в секрете, и открытый, который заверяется УЦ с помощью сертификата. Сертификат представляет собой файл, содержащий открытый ключ пользователя, информацию о нем и подпись УЦ. Схема взаимодействия пользователей выглядит следующим образом:
При этом Иван получает сертификат открытого ключа Семена, заверенный УЦ, а Семен – Ивана. Без этого их доверительное взаимодействие невозможно.
Для обеспечения взаимного доверия между пользователями разных УЦ последние объединяются в иерархическую структуру
Кроме того, УЦ1 и УЦ2 могут организовать взаимное доверие и обойтись без корневого УЦ.
Кроме сертификатов открытых ключей пользователей УЦ может выпускать списки отзыва тех сертификатов, которые удостоверяют скомпрометированные по тем или иным причинам ключи. Этим самым обеспечивается оперативное реагирование на события, влияющие на надежность и безопасность обмена данными.
Что со всем этим делать
Если вдруг у Вас появилась потребность в использовании ЭЦП (предположим, что Вы пользователь и не отвечаете за развертывание инфраструктуры, и, да, она уже развернута), Вам необходимо произвести следующие шаги:
- Самому посредством специального ПО или через запрос к УЦ заполучить пару ключей (зависит от конкретной реализации).
- Хранить как зеницу ока закрытый ключ (где – опять же зависит от реализации).
- Если этого не было сделано на шаге 1, запросить сертификат открытого ключа у УЦ. Данный сертификат не является секретной информацией и может свободно распространяться.
- Если вдруг сохранить закрытый ключ не удалось, уведомить в срочном порядке УЦ, дабы он мог как можно скорее включить сертификат Вашего открытого ключа в список отзыва.
Вместо заключения
Конечно, приведенная информация далеко не полная, но, надеюсь, позволит разобраться в основах функционирования механизма ЭЦП и инфраструктуры открытых ключей. Если кому-то этого мало – Интернет безграничен, и на его просторах можно добыть практически любую информацию. Покрайней мере, теперь Вы знаете, что искать.
Комментарии 2
А что это?
Неправда ваша.
Сертификат решает другие задачи!
Не может, а должен. Скомпрометировать можно только закрытые ключи, но сертификаты их не "удостоверяют"...
Вадим, вы правы, корректный термин "инфраструктура открытых ключей". Что касаемо остального, поделитесь, пожалуйста, вашими знаниями, если видите неполную или ошибочную информацию.