Криптография без магии: шифрование, хеширование и электронная подпись

Чем отличаются шифрование, хеширование и электронная подпись

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

  1. Как сделать так, чтобы посторонние не прочитали документ?

  2. Как убедиться, что по дороге в договоре не изменили ни одной строки?

  3. Как подтвердить, кто именно подписал документ?

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

  • шифрование скрывает содержание;

  • хеширование создаёт цифровой отпечаток данных;

  • электронная подпись позволяет проверить целостность документа и подтвердить связь подписи с владельцем ключа.

Эти технологии часто работают вместе, но не заменяют друг друга. Разберём каждую по отдельности.

Криптография — это не только шифрование

Слово «криптография» часто ассоциируется с секретными посланиями, шпионами и текстом, который невозможно прочитать без специального кода. Исторически так и было: главной задачей считалось скрыть содержание сообщения.

Современная криптография решает гораздо больше задач. Она помогает:

  • защищать переписку и файлы от посторонних;

  • проверять, не изменились ли данные;

  • подтверждать подлинность электронных документов;

  • безопасно обмениваться ключами;

  • устанавливать защищённое соединение с сайтом;

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

Электронная подпись — лишь одно из применений криптографии. Чтобы понять, как она работает, важно сначала разделить три понятия: шифрование, хеширование и подписание.

Шифрование: спрятать содержание

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

Упрощённо процесс выглядит так, при этом обратите внимание, алгоритм не является секретом сам по себе, т.е. он может быть публично известен:

Исходный документ ↓ Алгоритм + ключ ↓ Зашифрованные данные ↓ Алгоритм + ключ ↓ Исходный документ

До шифрования у нас есть обычный текст:

Оплатить счёт до 15 августа.

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

Шифрование похоже на сейф:

  • документ кладут внутрь;

  • сейф закрывают;

  • содержимое скрыто от посторонних;

  • открыть сейф можно только подходящим ключом.

Главная задача шифрования — конфиденциальность, то есть защита информации от чтения посторонними.

Важно: электронная подпись сама по себе не шифрует документ. Подписанный PDF, договор или XML-файл может оставаться полностью доступным для чтения. Подпись отвечает не за секретность содержания, а за возможность проверить документ и подпись.

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

Этому будет посвящена статья «Один секрет на двоих: как работает симметричное шифрование».

Хеширование: получить цифровой отпечаток

Хеш-функция принимает данные любого размера и вычисляет для них короткое значение фиксированной длины — хеш, или цифровой отпечаток.

Например, хеш можно вычислить для:

  • одного слова;

  • фотографии;

  • PDF-документа;

  • архива на несколько гигабайт;

  • целого программного продукта.

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

Упрощённо это выглядит так:

Документ любого размера ↓ Хеш-функция ↓ Цифровой отпечаток фиксированной длины

Хеширование можно сравнить с изготовлением очень чувствительного отпечатка документа. Изменится хотя бы один символ — получится другой отпечаток.

Например:

Договор действует до 31 декабря.

и

Договор действует до 30 декабря.

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

Хорошая криптографическая хеш-функция обладает несколькими важными свойствами:

  1. Одинаковые данные дают одинаковый хеш.
    Если документ не изменился, его цифровой отпечаток будет тем же.

  2. Небольшое изменение сильно меняет результат.
    Замена одного символа, пробела или байта приводит к другому хешу.

  3. По хешу нельзя восстановить исходный документ.
    Хеш — не зашифрованная копия файла и не архив.

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

В российских средствах электронной подписи для вычисления хеша применяется криптографическая функция, определённая ГОСТ Р 34.11-2012.

Но сам по себе хеш ещё не является электронной подписью.

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

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

Электронная подпись: подтвердить ключ и защитить целостность

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

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

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

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

Открытый ключ, наоборот, не является секретом. Он может распространяться в составе сертификата ключа проверки электронной подписи.

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

Упрощённо:

Документ ↓ Хеш-функция ↓ Хеш документа ↓ Закрытый ключ ↓ Электронная подпись

При проверке используются:

  • исходный документ;

  • электронная подпись;

  • открытый ключ подписанта.

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

Электронная подпись помогает подтвердить сразу два свойства:

  • целостность — документ не был изменён после создания подписи;

  • подлинность подписи — подпись соответствует закрытому ключу, связанному с используемым открытым ключом.

В российских средствах квалифицированной электронной подписи процессы формирования и проверки подписи описаны в ГОСТ Р 34.10-2012.

Чем отличаются эти технологии

Технология

Главная задача

Что происходит с документом

Что нужно для проверки или восстановления

Шифрование

Скрыть содержание

Документ преобразуется в нечитаемый вид

Ключ расшифрования

Хеширование

Получить цифровой отпечаток

Вычисляется короткий хеш

Исходный документ и тот же алгоритм

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

Проверить целостность и подлинность подписи

Для документа создаётся криптографическая подпись

Документ, подпись и открытый ключ

Один инструмент не заменяет другой.

Подписанный документ не обязательно зашифрован. Зашифрованный документ не обязательно подписан. А хеш без электронной подписи сам по себе не подтверждает автора.

Как они могут работать вместе

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

Система может выполнить несколько операций:

  1. Вычислить хеш договора.

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

  3. Добавить подпись к документу или сохранить её отдельным файлом.

  4. Зашифровать документ, чтобы его не смогли прочитать посторонние.

  5. Передать документ получателю.

Получатель:

  1. Расшифровывает документ.

  2. Получает открытый ключ подписанта из сертификата.

  3. Проверяет электронную подпись.

  4. Убеждается, что документ соответствует подписи и не был изменён.

В этом примере:

  • шифрование защищает договор от чтения;

  • хеширование позволяет получить его цифровой отпечаток;

  • электронная подпись позволяет проверить целостность и связь подписи с ключом подписанта.

Что именно доказывает электронная подпись

Здесь есть важное уточнение.

Криптографическая проверка устанавливает, что:

  • подпись соответствует конкретному документу;

  • подпись создана с использованием закрытого ключа, соответствующего открытому ключу;

  • после подписания документ не изменился.

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

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

Поэтому в реальной системе доверия участвуют сразу несколько элементов:

Документ + Электронная подпись + Открытый ключ + Сертификат + Доверие к удостоверяющему центру

Позже в этом цикле мы подробно разберём, как сертификат связывает ключ с владельцем и как работает инфраструктура открытых ключей — PKI.

Простая аналогия

Можно представить отправку важного документа так:

  • шифрование — положить документ в запертый сейф;

  • хеширование — снять уникальный цифровой отпечаток документа;

  • электронная подпись — поставить защищённую математическую подпись, связанную с закрытым ключом;

  • сертификат — предъявить удостоверение, которое связывает открытый ключ с его владельцем.

Аналогия не описывает всю математику, но помогает не смешивать разные задачи.

Главное

Криптография — это набор инструментов, и у каждого из них своя роль:

Шифрование скрывает содержание. Хеширование создаёт цифровой отпечаток. Электронная подпись позволяет проверить целостность документа и соответствие подписи ключу подписанта.

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

В следующей статье: «Один секрет на двоих: как работает симметричное шифрование».


Нормативная база