Цифровая подпись
Подписание документов при помощи криптосистем с открытым ключом
Протокол подписания документа при помощи криптосистемы с открытым ключом достаточно незатейлив:
- Антон шифрует документ с использованием тайного ключа, тем самым проставляя под этим документом свою подпись, и отправляет его Борису.
- Борис расшифровывает документ с использованием открытого ключа Антона, тем самым проверяя подлинность подписи.
От Дмитрия здесь совершенно не требуется вести обширную шифрованную переписку с участниками протокола. Он даже не нужен, чтобы проверять подлинность подписи. Если Борис не сможет расшифровать документ с использованием открытого ключа, принадлежащего Антону, значит, подпись под этим документом недействительна. Тем не менее, Дмитрий понадобится, чтобы удостовериться, что открытый ключ Антона действительно принадлежит именно Антону.
Отметка о времени подписания документа
К сожалению, при некоторых обстоятельствах Борис может обмануть Антона, если воспроизведет точную копию документа вместе с подписью, поставленной под ним Антоном. Еще одна копия документа, который представляет собой обычный деловой договор между двумя сторонами, погоды не сделает. Однако если у Бориса в руках окажется точная копия чека на кругленькую сумму, выписанного Антоном, последний может понести значительный материальный ущерб.
Поэтому, как и в обыденной жизни, на все документы обычно ставятся даты и время их подписания, которые, в свою очередь, также снабжаются цифровой подписью наравне с самим документом. В результате банк сможет разоблачить попытку дважды обналичить один и тот же чек, а у смошенничавшего Бориса в тюрьме будет много свободного времени, которое он сможет посвятить более тщательному изучению криптографических протоколов.
Использование однонаправленных хэш-функций для подписания документов
На практике криптосистемы с открытым ключом не всегда эффективны при подписании документов значительного объема. В целях экономии времени можно подписывать не сам документ, а хэш-значение, вычисленное для этого документа при помощи однонаправленной хэш-функции. Участники протокола должны только заранее условиться о том, какой алгоритм шифрования с открытым ключом и какую однонаправленную хэш-функцию они будут использовать для подписания документов:
- Антон подвергает документ хэшированию при помощи однонаправленной хэш-функции.
- Антон шифрует вычисленное хэш-значение с использованием собственного тайного ключа, тем самым ставя под документом свою подпись, и отправляет это хэш-значение Борису в зашифрованном виде вместе с документом.
- Борис вычисляет хэш-значение документа, расшифровывает хэш-значение, присланное ему Антоном, с использованием открытого ключа Антона. Если два полученных хэш-значения совпадают, то подпись Антона под документом верна.
Для подписания документа непременно должна быть использована однонаправленная хэш-функция, поскольку в противном случае злоумышленник Зиновий окажется в состоянии сгенерировать множество документов, хэш-значения которых совпадут. А тогда подписание Антоном одного конкретного документа станет равносильно подписанию им всех документов, имеющих такие же хэш-значения.
Кроме того, при использовании однонаправленных хэш-функций для подписания документов подпись можно хранить отдельно. А следовательно в архиве, в котором данный протокол применяется для проверки подлинности подписи, достаточно хранить только зашифрованные хэш-значения файлов. При возникновении разногласий относительно авторства документа достаточно найти в архиве соответствующее шифрованное хэш-значение, расшифровать его и проверить, совпадает ли оно с хэш-значением, вычисленным для спорного документа.