Цифровая подпись
Дополнительная терминология
Криптографы придумали множество алгоритмов цифровой подписи. Все они основаны на криптосистемах с открытым ключом. При этом секретная информация используется для того, чтобы поставить подпись под документом, а общедоступная – чтобы проверить подлинность этой подписи. Поэтому часто процесс подписания документа называют шифрованием на тайном ключе, а процесс проверки подлинности подписи – расшифрованием на открытом ключе. Однако это справедливо только для одного алгоритма шифрования с открытым ключом – RSA, а подавляющее большинство остальных алгоритмов цифровой подписи совершенно непригодны для шифрования сообщений.
По этой причине в ходе дальнейшего изложения о процессах подписания документа и проверки подлинности подписи будет говориться без упоминания конкретных алгоритмов, которые используются для этих целей. Подписание документа Р при помощи тайного ключа К будет обозначаться SK(P), а проверка подлинности подписи с использованием соответствующего открытого ключа – VК(P).
Битовая строка, которая присоединяется к документу при его подписании (например, хэш-значение файла, зашифрованное на тайном ключе) будет именоваться цифровой подписью. И наконец, протокол, при помощи которого получатель сообщения убеждается в подлинности и целостности этого сообщения, будет называться аутентификационным протоколом.
Несколько подписей под одним документом
Каким образом Антон и Борис могут поставить свои цифровые подписи под одним и тем же документом? Если не задействовать однонаправленные хэш-функции, существуют 2 способа сделать это.
- Первый заключается в создании двух идентичных копий документа, одну из которых подписывает Антон, а другую – Борис. Однако тогда придется хранить документ, длина которого в 2 раза превышает размер исходного документа, предназначенного для совместного подписания Антоном и Борисом.
- Второй способ состоит в том, чтобы сначала документ подписал Антон, а затем подпись Антона заверил своей подписью Борис. Но в этом случае будет невозможно убедиться в подлинности подписи Антона, не проверив подпись Бориса.
Если использовать однонаправленную хэш-функцию, от перечисленных недостатков можно легко избавиться:
- Антон подписывает хэш-значение документа.
- Борис подписывает хэш-значение того же самого документа.
- Борис отсылает свою подпись Антону.
- Антон шлет документ вместе со своей подписью и подписью Бориса Владимиру.
- Владимир проверяет подлинность подписей Антона и Бориса.
Неоспоримость
Вполне возможна ситуация, при которой Антон, подписав некоторый документ, впоследствии попытается ее оспорить – заявит о том, что подпись под документом поставил не он. Причиной может послужить, например, потеря Антоном своего тайного ключа в людном месте или намеренная его публикация Антоном в разделе частных объявлений популярной газеты. Эта ситуация называется отказ от обязательств.
Уменьшить ущерб отказа от обязательств помогает введение в подпись даты и времени, когда она была поставлена под документом. Конечно, ничего нельзя поделать в случае, если Антон заранее предпринял определенные действия для создания условий, при которых его подпись под документом должна будет признана недействительной. Но можно, по крайней мере, сделать так, чтобы эти действия не позволили Антону объявить поддельными все остальные его подписи, которые он ранее поставил под другими документами:
- Антон подписывает документ.
- Антон генерирует заголовок, в который помещает свои личные данные, присоединяет этот заголовок к подписанному им документу, еще раз подписывает итоговый документ и посылает его Дмитрию.
- Дмитрий проверяет вторую подпись Антона, добавляет к его сообщению отметку о дате и времени получения этого сообщения, подписывает его, а затем отправляет Антону и Борису.
- Борис проверяет подпись Дмитрия, персональные данные Антона и его подпись.
- Антон знакомится с содержанием сообщения, присланного Дмитрием. Если Антон обнаруживает в этом сообщении что-то подозрительное, он должен немедленно заявить об этом во всеуслышание.