Одним из важнейших вопросов в современном мире является вопрос доверия к полученным данным. Например, пользователь А отправляет по почте пользователю В данные D. Может ли пользователь В быть уверенным, что полученные им данные являются теми же самыми данными, которые отправил пользователь А? Одним из способов решения этой проблемы является цифровая подпись. На цифровую подпись налагаются следующие требования:
- содержание подписи должно зависеть от подписываемого сообщения;
- в подписи должна использоваться уникальная информация отправителя;
- подпись должна легко создаваться;
- подпись вычислительно невозможно подделать;
- подпись должна иметь небольшой размер.
В этой статье будет рассмотрен пример реализации цифровой подписи для проверки целостности бинарного файла в Linux (64-битный ELF). Мы будем использовать прямую цифровую подпись при которой взаимодействие осуществляется только между отправителем и получателем (без арбитра). Для этого нам понадобятся закрытый ключ шифрования и открытый ключ (сертификат). Оба ключа создаются отправителем. Пользователь А подписывает исполняемый файл и передаёт сертификат пользователю B, используя надёжные средства доставки. После этого пользователь А отправляет пользователю B подписанный файл. Пользователь B запускает полученный файл: если бинарный файл был повреждён, то пользователь B получит сообщение о том, что проверка цифровой подписи завершилась неудачей. Для реализации этого подхода нам понадобится программа, которая подписывает бинарный файл и код, который проверяет цифровую подпись.
Автор статьи – Кирилл Бражников, инженер-разработчик в Ауриге.
Вы можете скачать эту статью в формате PDF.