Электронные цифровые подписи

 

Цифровая подпись (ЦП) представляет собой строку данных, которая зависит от некоторого секретного параметра (ключа), известного только подписыва­ющему лицу, и от содержания подписы­ваемого сообщения, представленного в цифровом виде. Таким образом, цифро­вая подпись связывает сообщение с не­которым порождающим или подписывающим его объектом.

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

1. Цифровая подпись доказывает, что подписавший согласен с со­держанием документа.

2. Она является неотъемлемой частью документа и не может быть перенесена на другой документ.

3. После того как документ подписан, его невозможно изменить.

4. От подписи нельзя отказаться, то есть подписавший не сможет впоследствии утверждать, что документ подписан без его ведома.

Изложим основные идеи, на которых основан механизм цифровой подписи.

Пусть по-прежнему преобразования Е и D обладают перечислен­ными ранее свойствами и, кроме того, преобразование D сложно обра­тить, то есть, зная D и х, трудно найти у такое, что D(y) = x.

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

 

Рис. 4. Обмен ключами расшифрования в режиме цифровой подписи

 

Чтобы подтвердить подлинность сообщения х абонент А должен отправить вместе с ним значение E1(x), полученное в результате шифро­вания сообщения на своем секретном ключе. Это значение и является цифровой подписью х. Абонент В, получив пару х, Е1(х), применяет пре­образование D1и убеждается в том, что D1(E1(x)) = x. Если А держит пре­образование Е1в секрете, то никто кроме него не сможет подобрать такое у, чтобы D1(y) совпадало с х.

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

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

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

Чтобы обойти данную проблему, подписывают не само сообщение, а значение хэш-функции от него. Функция хэширования (хэш-функция)– преобразования, которые отображают строки переменной длины во множество строк фиксированной длины, как правило, меньшей, чем у исходных строк. Значение хэш-функции h от сообщения х будем называть хэш-кодом и обозначать h(x).

Таким образом, чтобы подписать документ х, необходимо сначала вычислить его хэш-код h(x), а затем преобразовать его с помощью секрет­ного ключа. В этом случае подписанный документ выглядит как пара x, E(h(x)). Хэш-функция h, с помощью которой определяется хэш-код под­писываемого документа, является общеизвестной. Поэтому для того что­бы убедиться в подлинности документа, достаточно вычислить значения h(x) и D(E(h(x))) и сравнить их между собой.

Очевидно, что не любая функция, отображающая сообщение про­извольной длины в хэш-код фиксированной длины, может быть использо­вана в алгоритме цифровой подписи. Рассмотрим, например, функцию s, значением которой является сумма по модулю 2 всех байтов сообще­ния. В этом случае несложно для заданного сообщения х подобрать сооб­щение у, для которого s(y) = s(x). Следовательно, перехватив подлинное сообщение х и его цифровую подпись E(s(x)), злоумышленник может подменить его сообщением у, используя в качестве цифровой подписи E(s(x)) = E(s(y)).

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

1. Хэш-функция должна иметь возможность обрабатывать сообще­ния произвольной длины.

2. Результатом применения хэш-функции является хэш-код фикси­рованной длины.

3. Вычисление хэш-функции от заданного сообщения должно про­изводиться относительно быстро.

4. Обратная операция, то есть нахождение сообщения х, имеющего заданный хэш-код, должна быть трудно выполнимой.

Из последнего требования вытекает, что для имеющегося сообще­ния х сложно найти несовпадающее с ним сообщение у такое, что h(y) = h(x) (наличие такой пары называют коллизией). Следовательно, перехва­тив сообщение х с цифровой подписью E(h(x)), злоумышленник не сможет подобрать другое сообщение, имеющее ту же цифровую подпись.

Функции, удовлетворяющие требованиям 1–4, называют слабыми хэш-функциями.

Чтобы функцию h(x) можно было назвать сильной, необходимо вы­полнение следующего дополнительного условия:

5. Очень сложно подобрать пару сообщений х, у таких, что h(x) = = h(y).

Предположим, что последнее требование не выполняется и имеется алгоритм подбора сообщений с совпадающими хэш-кодами. Пусть х, у такие, что h(x) = h(y). Вполне возможно, что одно из этих сообщений окажется вполне безобидным, а второе очень выгодным злоумышленнику. Например, в первом содержится указание о переводе 100 долл. в благо­творительный фонд, а во втором 100 000 долл. на счет злоумышленника. Тогда злоумышленник может каким-либо образом добиться подписания без­обидного сообщения х, а затем использовать полученную цифровую под­пись E(h(x)) для подтверждения сообщения у, пользуясь тем, что цифро­вые подписи этих сообщений совпадают.

Российский стандарт на хэш-функцию (ГОСТ Р 34.11-94) удовле­творяет требованиям, предъявляемым к сильной хэш-функции. Длина хэш-кода согласно этому стандарту составляет 256 бит.

Если имеется необходимость в обеспечении и целостности, и сек­ретности сообщения, то целесообразно сначала подписать сообщение, а затем уже зашифровать его вместе с подписью. При такой последователь­ности действий удастся избежать подписывания “кота в мешке”, каким является зашифрованное сообщение. Кроме того, будет скрыта цифровая подпись, по которой можно установить автора сообщения. Здесь уместна аналогия с письмом. Роль подписи под письмом берет на себя цифровая подпись, а шифрование обеспечивает секретность послания вместо кон­верта. Естественно, что в этом случае необходимо иметь две пары откры­тых и секретных ключей: одну использовать для генерации цифровой подписи, а вторую для шифрования (либо для пересылки ключа симмет­ричной криптосистемы, используемой для шифрования сообщения).

Следует отметить, что приведенная схема построения алго­ритма цифровой подписи на основе системы шифрования с открытым ключом, хотя и удобна для изложения основных идей, но не отражает все­го многообразия реальных систем цифровой подписи. Например, система шифрования и цифровой подписи RSA (Rivest, Shamir, Adleman) хорошо соответствует данной схеме. А Российский стандарт цифровой подписи – ГОСТ Р 34.10-94 не совсем точно укладывается в приведенную схему. Здесь также имеется секретный ключ для выработки цифровой подписи и открытый ключ для ее проверки. Однако процесс получения цифровой подписи не является шифрованием.

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