- •Методические материалы
- •1. Основные понятия
- •2. Традиционные криптосистемы
- •2.1. Некоторые особенности криптосистем. Примеры традиционных криптосистем
- •2.2. Теоретическая стойкость криптосистем 2
- •2.2.1. Системы с совершенной секретностью
- •2.2.2. Шифр Вернама
- •2.2.3. Элементы теории информации
- •2.2.4. Расстояние единственности шифра с секретным ключом
- •2.3. Современные криптосистемы с секретным ключом 4
- •2.3.1. Основные положения
- •2.3.2. Блоковые шифры
- •2.3.2.1. Общие положения
- •2.3.2.2. Блоковый шифр гост 28147-89
- •2.3.2.3. Режимы функционирования блоковых шифров
- •2.3.3. Потоковые шифры
- •2.3.3.1. Общие положения
- •2.3.3.2. Режим ofb блокового шифра
- •2.3.3.3. Режим ctr блокового шифра
- •2.3.3.4. Алгоритм rc4 6
- •3. Криптосистемы с открытым ключом 7
- •3.1. Основные положения
- •3.2. Криптосистема Диффи-Хеллмана
- •3.3. Шифр Шамира
- •3.4. Шифр Эль-Гамаля
- •3.5. Шифр rsa. Односторонняя функция с "лазейкой"
- •3.6. Цифровая (электронная) подпись
- •3.6.1. Криптографические хеш-функции
- •3.6.2. Цифровая подпись rsa
- •3.6.3. Цифровая подпись на базе шифра Эль-Гамаля
- •3.6.4. Стандарты на цифровую подпись
- •3.7. Криптографические протоколы
- •3.7.1. Протокол для доказательства с нулевым знанием
- •3.7.2. Протокол для поддержки электронных денег
- •Рекомендуемая литература
3.6. Цифровая (электронная) подпись
Системы шифрования с открытыми ключами обеспечили возможность решения многих задач, считавшихся ранее нерешаемыми. Благодаря этому такие системы нашли широкое применение в бизнесе и, прежде всего, в финансовой сфере. Важным элементом соответствующих технологий является, так называемая цифровая (электронная) подпись. Во многих странах, в том числе и в России введены стандарты на цифровую подпись, а само понятие вошло в законодательство.
Сформулируем четыре основных свойства, которыми в идеале должна обладать любая, в том числе цифровая подпись:
(а) подписать документ может только законный владелец подписи (следовательно, никто не может подделать подпись);
(б) автор подписи не может от нее отказаться;
(в) никто не может так изменить содержание документа, сохранив под ним чужую подпись, что владелец подписи не сможет доказать факт изменения документа;
(г) в случае возникновения спора, возможно участие третьих лиц, например, суда, для установления подлинности подписи.
3.6.1. Криптографические хеш-функции
Криптографические хеш-функции играют существенную роль во многих разделах криптографии, в том числе и при формировании цифровой подписи.
Определение: хеш-функцией называется функция
y = h(x1, ..., xn),
которая строке (сообщению) x = x1...xn произвольной длины n ставит в соответствие целое число фиксированной длины.
Примером хеш-функции является так называемая контрольная сумма для сообщения:
h(x1, ..., xn) = (x1 + ... + xn) mod 2w,
где w – длина машинного слова. Длина слова, возвращаемого этой функцией, составляет w бит независимо от длины сообщения.
Контрольные суммы часто используются для обнаружения непреднамеренных ошибок в сообщении (при изменении одного символа контрольная сумма измениться). Однако вполне возможно внести преднамеренную ошибку в сообщение и сохранить при этом значение контрольной суммы. Если такую хеш-функцию использовать при формировании цифровой подписи, то появится возможность для несанкционированного изменения документа без разрешения владельца подписи, тем самым может быть нарушено свойство (в) подписи.
Сформулируем основные требования к криптографическим хеш-функциям:
для любого заданного x вычисление h(x) должно выполняться относительно быстро;
при известном y должно быть трудно (практически невозможно) найти x, для которого y = h(x);
при известном сообщении x должно быть трудно найти другое сообщение x' x такое, что h(x) = h(x');
должно быть трудно найти какую-либо пару различных сообщений x и x', для которых h(x) = h(x').
Первое из перечисленных требований является универсальным для всех криптографических приложений хеш-функций. Остальные требования важны для тех или иных приложений. Например, второе требование важно при формирования пароля доступа пользователя в компьютер, третье – при формировании цифровой подписи, четвертое – в некоторых криптографических протоколах.
Разработка хеш-функции, удовлетворяющей всем четырем требованиям, является сложной задачей. В настоящее время известны несколько функций, которые считаются отвечающими указанным требованиям (строго это не доказано). Мы рассмотрим один из универсальных способов построения хеш-функции на базе блоковых шифров, который представляет практический интерес, хотя получаемые хеш-функции и не являются очень быстро вычисляемыми (такой подход использован в российском стандарте ГОСТ Р34.11-94).
Пусть дан блоковый шифр EK, который для заданного блока Xi и ключа K формирует шифртекст Y = EK(Xi). Рассмотрим алгоритмы, которые формируют значение хеш-функции, имеющее длину, равную длине блока в шифре.
Один из алгоритмов получения возвращаемого значения хеш-функции таков:
все сообщение представляется в виде последовательности блоков: X = X1... Xn. Последний блок при необходимости дополняется нулями. Значение хеш-функции получают как результат следующего итерационного алгоритма:
h:=0;
FOR i = 1,2,...,n DO
h:= Eh(Xi)Xi.
В качестве начального значения h может использоваться не 0, а какое-то другое число, хотя это и не принципиально.
Таким образом, на каждом шаге цикла FOR в качестве ключа блокового шифра используется значение h, полученное на предыдущей итерации. Поэтому предполагается, что длина ключа в блоковом шифре не превышает длины блока. В том случае, если используется блоковый шифр, в котором длина ключа больше, чем длина блока, то можно использовать другой алгоритм:
все сообщение представляется в виде последовательности: X = X1... Xm, где длина элемента Xi равна длине ключа. Последний элемент при необходимости дополняется нулями. Значение хеш-функции получают как результат следующего итерационного алгоритма:
h:=0;
FOR i = 1,2,...,m DO
h:= EXi(h)h.
Таким образом, здесь элементы Xi сообщения X выполняют роль ключей на различных итерациях.
Рассмотренные алгоритмы удовлетворяют всем четырем основным требованиям, предъявляемым к криптографическим функциям, при условии, что используемые блоковые шифры криптостойки.
Отметим также, что возможны алгоритмы, позволяющие получать значения хеш-функции, длина которых не ограничена длиной блока используемого блокового шифра, а кратна этой длине.