18.8. Цифровая подпись

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

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

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

В этом случае цифровая подпись документа обычно создается так: из документа генерируется так называемый дайджест (message digest) и к нему добавляется информация о том, кто подписывает документ, штамп времени и прочее. Получившаяся строка далее зашифровывается личным ключом подписывающего с использованием того или иного алгоритма. Получившийся зашифрованный набор бит и представляет собой подпись. К подписи обычно прикладывается открытый ключ подписывающего.

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

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