Криптография без магии: шифрование, хеширование и электронная подпись
Чем отличаются шифрование, хеширование и электронная подпись
Представьте, что вы отправляете партнёру договор по электронной почте. У вас могут возникнуть сразу три разных вопроса:
Как сделать так, чтобы посторонние не прочитали документ?
Как убедиться, что по дороге в договоре не изменили ни одной строки?
Как подтвердить, кто именно подписал документ?
На первый взгляд кажется, что всё это делает «шифрование». Но в современной криптографии для этих задач используются разные понятия:
шифрование скрывает содержание;
хеширование создаёт цифровой отпечаток данных;
электронная подпись позволяет проверить целостность документа и подтвердить связь подписи с владельцем ключа.
Эти технологии часто работают вместе, но не заменяют друг друга. Разберём каждую по отдельности.
Криптография — это не только шифрование
Слово «криптография» часто ассоциируется с секретными посланиями, шпионами и текстом, который невозможно прочитать без специального кода. Исторически так и было: главной задачей считалось скрыть содержание сообщения.
Современная криптография решает гораздо больше задач. Она помогает:
защищать переписку и файлы от посторонних;
проверять, не изменились ли данные;
подтверждать подлинность электронных документов;
безопасно обмениваться ключами;
устанавливать защищённое соединение с сайтом;
подтверждать, что программа или обновление выпущены настоящим разработчиком.
Электронная подпись — лишь одно из применений криптографии. Чтобы понять, как она работает, важно сначала разделить три понятия: шифрование, хеширование и подписание.
Шифрование: спрятать содержание
Шифрование преобразует с помощью какого-то алгоритма читаемые данные в набор символов, который невозможно правильно понять без ключа.
Упрощённо процесс выглядит так, при этом обратите внимание, алгоритм не является секретом сам по себе, т.е. он может быть публично известен:
Исходный документ ↓ Алгоритм + ключ ↓ Зашифрованные данные ↓ Алгоритм + ключ ↓ Исходный документ
До шифрования у нас есть обычный текст:
Оплатить счёт до 15 августа.
После шифрования данные могут выглядеть как бессмысленная последовательность байтов. Прочитать их сможет только тот, у кого есть нужный ключ.
Шифрование похоже на сейф:
документ кладут внутрь;
сейф закрывают;
содержимое скрыто от посторонних;
открыть сейф можно только подходящим ключом.
Главная задача шифрования — конфиденциальность, то есть защита информации от чтения посторонними.
Важно: электронная подпись сама по себе не шифрует документ. Подписанный PDF, договор или XML-файл может оставаться полностью доступным для чтения. Подпись отвечает не за секретность содержания, а за возможность проверить документ и подпись.
Шифрование бывает симметричным и несимметричным (асимметричным). В симметричном шифровании один и тот же секретный ключ используется для шифрования и расшифрования. В асимметричной криптографии применяются два связанных (гораздо сильнее и надежнее, чем ключи в связке на колечке) ключа — открытый и закрытый ключ.
Этому будет посвящена статья «Один секрет на двоих: как работает симметричное шифрование».
Хеширование: получить цифровой отпечаток
Хеш-функция принимает данные любого размера и вычисляет для них короткое значение фиксированной длины — хеш, или цифровой отпечаток.
Например, хеш можно вычислить для:
одного слова;
фотографии;
PDF-документа;
архива на несколько гигабайт;
целого программного продукта.
Размер исходных данных может отличаться в миллионы раз, но длина результата для выбранного алгоритма будет одинаковой.
Упрощённо это выглядит так:
Документ любого размера ↓ Хеш-функция ↓ Цифровой отпечаток фиксированной длины
Хеширование можно сравнить с изготовлением очень чувствительного отпечатка документа. Изменится хотя бы один символ — получится другой отпечаток.
Например:
Договор действует до 31 декабря.
и
Договор действует до 30 декабря.
Для человека эти строки почти одинаковы. Для криптографической хеш-функции это два разных набора данных, поэтому их хеши будут отличаться.
Хорошая криптографическая хеш-функция обладает несколькими важными свойствами:
Одинаковые данные дают одинаковый хеш.
Если документ не изменился, его цифровой отпечаток будет тем же.Небольшое изменение сильно меняет результат.
Замена одного символа, пробела или байта приводит к другому хешу.По хешу нельзя восстановить исходный документ.
Хеш — не зашифрованная копия файла и не архив.Чрезвычайно трудно подобрать другие данные с тем же хешем.
Это свойство защищает от подмены документа.
В российских средствах электронной подписи для вычисления хеша применяется криптографическая функция, определённая ГОСТ Р 34.11-2012.
Но сам по себе хеш ещё не является электронной подписью.
Если отправить документ вместе с его хешем, злоумышленник сможет заменить и документ, и хеш. Получатель увидит, что они соответствуют друг другу, но не узнает, кто создал этот хеш и можно ли ему доверять.
Нужен способ связать цифровой отпечаток с владельцем секретного ключа. Эту задачу решает электронная подпись.
Электронная подпись: подтвердить ключ и защитить целостность
В усиленной электронной подписи используется пара математически связанных ключей:
закрытый ключ хранится у владельца и применяется для создания подписи;
открытый ключ используется другими участниками для проверки подписи.
Закрытый ключ нельзя передавать другим людям. Он может храниться на токене, смарт-карте, в защищённом контейнере или в специализированной облачной инфраструктуре.
Открытый ключ, наоборот, не является секретом. Он может распространяться в составе сертификата ключа проверки электронной подписи.
При подписании документа программа сначала вычисляет его хеш, а затем с помощью закрытого ключа создаёт криптографическую подпись.
Упрощённо:
Документ ↓ Хеш-функция ↓ Хеш документа ↓ Закрытый ключ ↓ Электронная подпись
При проверке используются:
исходный документ;
электронная подпись;
открытый ключ подписанта.
Проверяющая программа снова вычисляет хеш документа и выполняет криптографическую проверку подписи. Если документ изменился после подписания, проверка не пройдёт.
Электронная подпись помогает подтвердить сразу два свойства:
целостность — документ не был изменён после создания подписи;
подлинность подписи — подпись соответствует закрытому ключу, связанному с используемым открытым ключом.
В российских средствах квалифицированной электронной подписи процессы формирования и проверки подписи описаны в ГОСТ Р 34.10-2012.
Чем отличаются эти технологии
Технология | Главная задача | Что происходит с документом | Что нужно для проверки или восстановления |
Шифрование | Скрыть содержание | Документ преобразуется в нечитаемый вид | Ключ расшифрования |
Хеширование | Получить цифровой отпечаток | Вычисляется короткий хеш | Исходный документ и тот же алгоритм |
Электронная подпись | Проверить целостность и подлинность подписи | Для документа создаётся криптографическая подпись | Документ, подпись и открытый ключ |
Один инструмент не заменяет другой.
Подписанный документ не обязательно зашифрован. Зашифрованный документ не обязательно подписан. А хеш без электронной подписи сам по себе не подтверждает автора.
Как они могут работать вместе
Представим, что компания отправляет контрагенту конфиденциальный договор.
Система может выполнить несколько операций:
Вычислить хеш договора.
Создать электронную подпись с помощью закрытого ключа отправителя.
Добавить подпись к документу или сохранить её отдельным файлом.
Зашифровать документ, чтобы его не смогли прочитать посторонние.
Передать документ получателю.
Получатель:
Расшифровывает документ.
Получает открытый ключ подписанта из сертификата.
Проверяет электронную подпись.
Убеждается, что документ соответствует подписи и не был изменён.
В этом примере:
шифрование защищает договор от чтения;
хеширование позволяет получить его цифровой отпечаток;
электронная подпись позволяет проверить целостность и связь подписи с ключом подписанта.
Что именно доказывает электронная подпись
Здесь есть важное уточнение.
Криптографическая проверка устанавливает, что:
подпись соответствует конкретному документу;
подпись создана с использованием закрытого ключа, соответствующего открытому ключу;
после подписания документ не изменился.
Но математический алгоритм сам по себе не знает фамилию владельца ключа и не видит, кто сидел за компьютером.
Чтобы связать открытый ключ с конкретным человеком или организацией, используется сертификат электронной подписи. Сертификат содержит сведения о владельце и подтверждается удостоверяющим центром.
Поэтому в реальной системе доверия участвуют сразу несколько элементов:
Документ + Электронная подпись + Открытый ключ + Сертификат + Доверие к удостоверяющему центру
Позже в этом цикле мы подробно разберём, как сертификат связывает ключ с владельцем и как работает инфраструктура открытых ключей — PKI.
Простая аналогия
Можно представить отправку важного документа так:
шифрование — положить документ в запертый сейф;
хеширование — снять уникальный цифровой отпечаток документа;
электронная подпись — поставить защищённую математическую подпись, связанную с закрытым ключом;
сертификат — предъявить удостоверение, которое связывает открытый ключ с его владельцем.
Аналогия не описывает всю математику, но помогает не смешивать разные задачи.
Главное
Криптография — это набор инструментов, и у каждого из них своя роль:
Шифрование скрывает содержание. Хеширование создаёт цифровой отпечаток. Электронная подпись позволяет проверить целостность документа и соответствие подписи ключу подписанта.
Чтобы понять, откуда берутся открытый и закрытый ключи, сначала нужно разобраться с более простой схемой — когда у двух участников есть один общий секрет.
В следующей статье: «Один секрет на двоих: как работает симметричное шифрование».