| | Цифровая подпись на практике
Описанный в статье класс примитивов цифровой подписи (в качестве таких примитивов выступают алгоритм формирования подписи и алгоритм проверки подписи), вообще говоря, позволяет подписать текст (и любые другие данные, представимые в форме числа) любого размера. Однако на практике - по соображениям удобства реализации и производительности - бывает полезно ограничить размер объекта, к которому применяются эти преобразования, некоторой фиксированной, известной заранее величиной.
Поэтому практически используемые (и стандартизуемые) протоколы цифровой подписи включают еще один примитив, называемый криптостойким хэшированием.
Хэширующей функцией (или хэшем, или функцией расстановки, как иногда называют такие функции в отечественной литературе) называется функция, преобразующая число произвольной длины в число фиксированной длины, обычно - с равномерным распределением результата по множеству возможных значений, чтобы минимизировать так называемые коллизии - одинаковый результат функции, примененной к различным аргументам. К криптостойкому хэшированию предъявляется дополнительное требование: эта функция должна быть труднообратимой, чтобы по известному ее значению было трудно найти соответствующие аргументы. Самый распространенный метод хэширования - применение к объекту стойкого блочного шифра в особом режиме. Поскольку блочное шифрование - симметричный (одноключевой) примитив, а сама цифровая подпись - асимметричный, такой протокол в целом называют гибридным.
Протокол в целом выглядит таким образом.
А - Сторона А генерирует хэш от подписываемого объекта.
Б - Сторона А применяет примитив формирования подписи к результату хэширования.
В - Сторона А передает объект и подпись стороне Б.
Г - Сторона Б генерирует хэш от полученного объекта.
Д - Сторона Б применяет примитив проверки подписи к результату хэширования и полученной подписи.
Анализ стойкости гибридных протоколов более сложен, чем анализ стойкости примитива подписи, поскольку атака (попытка подделки подписи) может осуществляться как на примитив подписи, так и на примитив хэширования.
Если мы сформируем отдельный объект из результата хэширования и подписи, окажется, что он обладает интересными свойствами: третья сторона, не видя некого исходного объекта, может засвидетельствовать, что этот самый объект был подписан обладателем определенного ключа. Это может быть полезным, например, для нотариального подтверждения времени подписания определенного документа конфиденциального содержания. - М.О. | |