Защита информации: Цифровая подпись
Страница 3
В 1991 г. в США был опубликован проект федерального стандарта цифровой подписи - DSS (Digital Signature Standard, [DSS91], описывающий систему цифровой подписи DSA (Digital Signature Algorith). Одним из основных критериев при создании проекта была его патентная чистота.
Предлагаемый алгоритм DSA, имеет, как и RSA, теоретико-числовой характер, и основан на криптографической системе Эль-Гамаля в варианте Шнорра . Его надежность основана на практической неразрешимости определенного частного случая задачи вычисления дискретного логарифма. Современные методы решения этой задачи имеют приблизительно ту же эффективность, что и методы решения задачи факторизации; в связи с этим предлагается использовать ключи длиной от 512 до 1024 бит с теми же характеристиками надежности, что и в системе RSA. Длина подписи в системе DSA меньше, чем в RSA, и составляет 320 бит.
С момента опубликования проект получил много критических отзывов, многие из которых были учтены при его доработке. Одним из главных аргументов против DSA является то, что, в отличие от общей задачи вычисления дискретного логарифма, ее частный случай, использованный в данной схеме, мало изучен и, возможно, имеет существенно меньшую сложность вскрытия. Кроме того, стандарт не специфицирует способ получения псевдослучайных чисел, используемых при формировании цифровой подписи, и не указывает на то, что этот элемент алгоритма является одним из самых критичных по криптографической стойкости.
Функции DSA ограничены только цифровой подписью, система принципиально не предназначена для шифрования данных. По быстродействию система DSA сравнима с RSA при формировании подписи, но существенно (в 10-40 раз) уступает ей при проверке подписи.
Вместе с проектом DSS опубликован проект стандарта SHS (Secure Hash Standard), описывающий однонаправленную хэш-функцию SHA (Secure Hash Algorith), рекомендованную для использования вместе с DSA. Хэш-функция SHA является модификацией алгоритма MD4, хорошо известного в криптографической литературе.
При генерации ЭЦП используются параметры трех групп:
- общие параметры
- секретный ключ
- открытый ключ
Общие параметры необходимы для функционирования системы в целом. Секретный ключ используется для формирования ЭЦП, а открытый – для проверки ЭЦП. Общими параметрами системы являются простые целые числа p,q,g, удовлетворяющие следующим условиям:
p: 2^511<p<2^512
q: простой делитель числа (p-1), который удовлетворяет условию
2^159<q<2^160
g: так называемый генератор,удовлетворяющий
равенству g=h^((p-1)/q)mod p >1.
Парараметры p,q,g публикуются для всех участников обмена ЭД с ЭЦП.
Секретный ключ x случайно выбирается из диапазона [1,q] и держится в секрете.
Открытый ключ вычисляется: y=g^x mod p.
Также при описании данной схемы будут использоваться следующие обозначения и доролнительные параметры: m – входное сообщение пользователя для схемы с ЭЦП; k - случайное число, удовлетворяющее условию 0<k<q, хранящееся в секрете и меняющееся от одной подписи к другой; H – хэш-функция, h – хэш-код сообщения.
Процесс генерации ЭЦП состоит из нескольких этапов:
1.Вычисляется хэш-код сообщения m h=H(m)
2.Из диапазона [1,q] случайным образом выбирается значение k и вычисляется r= (g^k mod p) mod q
3. Вычисляется S= (k^-1(h+xr)) mod q, где k^-1 удовлетворяет условию
(k^-1*k) mod q =1
Значения r,s являются ЭЦП сообщения m и передаются вместе с ним по каналам связи.
Пусть принято сообщение m1 и его подпись s1,r1.
Проверка ЭЦП происходит следующим образом:
- проверяется выполнений условий 0<r1<q, 0<s1<q, и если хотя бы одно из них нарушено, подпись отвергается.
- Вычисляются значения:
w= s1^-1 mod q
u1 = (H(m1)w) mod q
u2 = ((r1/w) mod q
v = (( g^u1y^u2) mod p ) mod q
- проверяется равенство v = r1
Если последнее равенство выполняется, то подпись принимается. В данном стандарте специфицируется также процедура генерации основных параметров системы и проводится доказательство того, что если v=r1, то m1=m, r1=r, s1=s.
Отечественным стандартом на процедуры выработки и проверки ЭЦП является ГОСТ Р 34.10-94. Схема ЭЦП, предложенная в данном стандарте, во многом напоминает подпись в DSA.
Цифровая подпись представляет собой два больших целых простых числа. Общедоступные параметры схемы ЭЦП (p,q,a) должны удовлетворять следующим условиям:
p: 2^501<p<2^512 или 2^1020<p<2^1020
q: простой делитель числа (p-1), который удовлетворяет
условию 2^254<q<2^256
a: 1<a<p-1, a^q(mod p) =1
Секретный ключ x случайно выбирается из диапазона [1,q] и держится в секрете.
Открытый ключ вычисляется: y=a^x mod p.
Процесс генерации ЭЦП состоит из нескольких этапов:
1.Вычисляется хэш-код сообщения m h=H(m)
(хэш-функция, используемая в данном стандарте в соответствии с
ГОСТ Р 34.10-94), если h(m)(mod p) = 0, то h(m) присваевается значение 0…02551
2.Из диапазона [1,q] случайным образом выбирается значение k
3. вычисляется r= (a^k mod p) , r1=r(mod p); если r1=0, следует вернуться к предыдущему этапу и выработать другое значение k.
3. Вычисляется s= (xr1+kh(m))(mod p); если s=0, то необходимо выработать другое значение k.
Значения r1,s1 являются ЭЦП сообщения m и передаются вместе с ним по каналам связи.
Проверка ЭЦП происходит следующим образом:
- проверяется выполнений условий 0<r<q, 0<s<q, и если хотя бы одно из них нарушено, подпись отвергается.
- Вычисляется хэш-код данного сообщения h=H(m); Если h(m)(mod p) = 0, то битовое представление h(m): 0…02551
- Вычисляется значение v=(h(m))^q-2(mod p).
- Вычисляется значения z1=sv(mod p); z2=(q-r1)v(mod p).
- Вычисляется значение u=(a^z1y^z2(mod p))(mod q)
- проверяется равенство u = r1
Если последнее раенство выполняется, то подпись принимается.
На первый взгляд, сама эта идея может показаться абсурдом. Действительно, общеизвестно, что так называемая «современная», она же двухключевая криптография возникла и стала быстро развиваться в последние десятилетия именно потому, что ряд новых криптографических протоколов типа протокола цифровой подписи не удалось эффективно реализовать на базе традиционных криптографических алгоритмов, широко известных и хорошо изученных к тому времени. Тем не менее, это возможно. И первыми, кто обратил на это внимание, были родоначальники криптографии с открытым ключом У. Диффи и М. Хеллман, опубликовавшие описание подхода, позволяющего выполнять процедуру цифровой подписи одного бита с помощью блочного шифра. Прежде чем изложить эту идею, сделаем несколько замечаний о сути и реализациях цифровой подписи.
Стойкость какой-либо схемы подписи доказывается обычно установлением равносильности соответствующей задачи вскрытия схемы какой-либо другой, о которой известно, что она вычислительно неразрешима. Практически все современные алгоритмы ЭЦП основаны на так называемых «сложных математических задачах» типа факторизации больших чисел или логарифмирования в дискретных полях.
Однако, доказательство невозможности эффективного вычислительного решения этих задач отсутствует, и нет никаких гарантий, что они не будут решены в ближайшем будущем, а соответствующие схемы взломаны – как это произошло с «ранцевой» схемой цифровой подписи. Более того, с бурным прогрессом средств вычислительных техники «границы надежности» методов отодвигаются в область все больших размеров блока.