Главная страница

Криптография 2е издание Протоколы, алгоритмы и исходные тексты на языке С


Скачать 3.25 Mb.
НазваниеКриптография 2е издание Протоколы, алгоритмы и исходные тексты на языке С
Дата29.04.2022
Размер3.25 Mb.
Формат файлаpdf
Имя файлаShnayer_Prikladnaya-kriptografiya.352928.pdf
ТипПротокол
#504484
страница46 из 78
1   ...   42   43   44   45   46   47   48   49   ...   78
Табл. 20-1.
Подписи DSA
Открытый ключ:
p простое число длиной от 512 до 1024 битов (может использоваться группой пользователей)
q
160-битовый простой множитель p-1 (может использоваться группой пользователей)
g
= h
(p-1)/q mod p, где h - любое число, меньшее p-1, для которого h
(p-1)/q mod p > 1 (может использоваться группой пользователей)
y
= g
N
mod p (p-битовое число)
Закрытый ключ:
x
< q (160-битовое число)
Подпись:
k выбирается случайно, меньшее q r
(подпись) = (g k
mod p) mod q s
(подпись) = (k
-1
(H(m) + xr)) mod q
Проверка:
w
= s
-1
mod q u
1
= (H(m) * w) mod q u
2
= (rw) mod q
v
= ((
g y
u u
1 2
*
) mod p) mod q
Если v = r, то подпись правильна.
Ускоряющие предварительные вычисления
В 18-й приведены примеры скорости работы программных реализаций DSA [918].
Табл. 20-2.
Скорость DSA для различных длин модулей с
160-битовым показателем степени (на SPARC II)
512 битов
768 битов
1024 бита
Подпись
0.20 с
0.43 с
0.57 с
Проверка
0.35 с
0.80 с
1.27 с
Практические реализации DSA часто можно ускорить с помощью предварительных вычислений . Обратите внимание, что значение r не зависит от сообщения. Можно создать строку случайных значений k, и затем рас- считать значения r для каждого из них. Можно также вычислить k
-1
для каждого из этих значений k. Затем, ко- гда приходит сообщение, можно вычислить s для заданных r и k
-1
Эти предварительные вычисления заметно ускоряют DSA. В 17-й приведены сравнения времени вычисления
DSA и RSA для конкретной реализации интеллектуальной карточки [1479].
Табл. 20-3.
Сравнение времени вычислений RSA и DSA
DSA
RSA
DSA с общими p, q, g
Глобальные вычисления
Off-card (P)
N/A
Off-card (P)
Генерация ключа
14 с
Off-card (S)

Предварительные вычисления
14 с
N/A
4 с
Подпись
0.03 с
15 с
0.03 с
Проверка
16 с l.5 с
10 с
1-5 с off-card (P)
1-3 с off-card (P)
Вычисления вне карточки (off-card) выполнялись на персональном компьютере i80386/33 МГц. (P) указыва- ет открытые параметры off-card, а (S) - на закрытые параметры off-card. В обоих алгоритмах используется 512- битовый модуль.
Генерация простых чисел DSA
Ленстра и Хабер указали, что взломать некоторые модули намного легче, чем другие [950]. Если кто-нибудь заставит пользователей сети использовать один из таких слабых модулей, то их подписи будет легче подделать .
Тем не менее это не представляет проблемы по двум причинам: такие модули легко обнаружить, и они так ре д- ки, что вероятность случайно использовать одного из них пренебрежимо мала , меньше, чем вероятность слу- чайно получить составное число на выходе вероятностной процедуры генерации простых чисел .
В [1154] NIST рекомендовал конкретный метод генерации двух простых чисел , p и q, где q является делите- лем p-1. Длина простого числа p - между 512 и 1024 и кратна 64 -битам. Пусть L-1= 160n+b, где L - это длина p,
а n и b - два числа, причем b меньше 160.
(1)
Выберем произвольную последовательность, по крайней мере, 160 битов и назовем ее S. Пусть g - это длина S в битах.
(2)
Вычислим U = SHA(S) ? SHA((S + 1) mod 2
g
), где SHA описан в разделе 18.7.
(3)
Образуем q, установив наибольший и наименьший значащие биты U в 1.
(4)
Проверим, является ли q простым.
(5)
Если q не является простым, то вернемся на этап (1) .

(6)
Пусть C=0 и N=2.
(7)
Для k=0,l,...,n, пусть V
k
=SHA((S+N+k) mod 2
g
)
(8)
Пусть W - целое число
W = V
0
+ 2 160
V
1
+. . .+ 2 160(n-1)
V
n-1
+ 2 160
(V
n mod 2
b
)
и пусть
X = W + 2
L-1
Обратите внимание, что X - это L-битовое число.
(9)
Пусть p = X - ((X mod 2q) - 1). Обратите внимание, что p конгруэнтно 1 mod 2q.
(10)
Если p < 2
L-1
, то перейдем на этап (13).
(11)
Проверим, является ли p простым числом.
(12)
Если p - простое, перейдем к этапу (15).
(13)
Пусть C=C+1 и N=N+n+l.
(14)
Если C = 4096, вернемся к этапу (1). В противном случае перейдем на этап (7).
(15)
Сохраним значения S и C, использованные для генерации p и q.
В [1154] переменная S называется стартовой, переменная C - счетчиком, а N - смещением.
Смысл этого упражнения в том, что оно является опубликованным способом генерации p и q. Для всех прак- тических применений этот метод позволяет избежать слабых значений p и q. Если кто-то вручит вам какие-то p и q, вас может заинтересовать, как получены эти числа . Однако, если вы получите значения S и C, использован- ные при генерации случайных p и q, вы сможете повторить всю процедуру самостоятельно . Использование од- нонаправленной хэш-функции (в стандарте используется SHA) не позволяет получить S и C по значениям p и q.
Эта безопасность лучше, чем обеспечиваемая RSA. В RSA простые числа хранятся в секрете. Любой может генерировать фальшивое простое число или число, форма которого упрощает разложение на множители . Не зная закрытого ключа, это никогда не проверишь . В DSA, даже если закрытый ключ неизвестен, можно уб е- диться, что p и q генерировались случайным образом.
Шифрование ElGamal с DSA
Утверждалось, что DSA так нравится правительству, потому что его нельзя использовать в качестве алг о- ритма шифрования. Однако можно использовать вызов функции DSA для шифрования EIGamal. Пусть алго- ритм реализован как вызов одной функции
DSAsign(p,q,g,k,x,h,r,s)
Задав входные значения p, q, g, k, x и h, можно получить параметры подписи: r и s.
Для шифрования сообщения m алгоритмом EIGamal с помощью открытого ключа y выберем случайное чис- ло k и вызовем
DSAsign(p,p,g,k,0,0,r,s)
Возвращенное значение r и будет a из схемы EIGamal. Отбросим s. Затем вызовем, call
DSAsign(p,p,y,k,0,0,r,s)
Переименуем значение r в u, отбросим s. Вызовем
DSAsign(p,p,m,1,u,0,r,s)
Отбросим r. Возвращенное значение s и будет b в схеме EIGamal. Теперь у вас есть шифротекст, a и b. Де- шифрирование также просто. Используя закрытый ключ x и шифротекст сообщений, a и b, вызовем
DSAsign(p,p,a,x,0,0,r,s)
Значение r - это a x
mod p. Назовем его e. Затем вызовем
DSAsign(p,p,1,e,b,0,r,s)
Значение s и будет открытым текстом сообщения, m.
Этот способ работает не со всеми реализациями DSA - в некоторых из них могут быть зафиксированы зн а- чения p и q или длины некоторых других параметров . Тем не менее, если реализация является достаточно о б- щей, то можно шифровать сообщение, не используя ничего, кроме функции цифровой подписи .

Шифрование RSA с DSA
Шифрование RSA еще проще. Используя модуль n, сообщение m и открытый ключ e, вызовем
DSAsign(n,n,m,e,0,0,r,s)
Возвращенное значение r и есть шифротекст. Дешифрирование RSA является точно таким же. Если d - за- крытый ключ, то
DSAsign(n,n,m,d,0,0,r,s)
возвращает открытый текст как значение r.
Безопасность DSA
С 512 битами DSA недостаточно надежен для длительной безопасности, но он вполне надежен при 1024 б и- тах. В своем первом заявлении на эту тему NSA так комментировало утверждение Джо Эбернети ( Joe Aber- nathy) из The Houston Chronicle по поводу лазейки в DSS [363]:
Что касается предполагаемой лазейки в DSS. Мы считаем, что термин "лазейка" вводит в заблуждение, так он предпол а- гает, что через лазейку можно как-то расшифровать (прочитать) зашифрованные сообщения, подписываемые с помощью
DSS, без разрешения отправителя.
DSS не шифрует никаких данных. По сути вопросом является, не может ли кто-то при помощи DSS подделать подпись, и,
таким образом, дискредитировать всю систему . Мы категорически заявляем, что вероятность, что кто-нибудь - включая NSA - сможет подделать подпись DSS, при правильном использовании стандарта бесконечно мала.
Более того, предположение о чувствительности к лазейке справедливо для любой системы проверки подлинности с от- крытыми ключами, включая RSA. Утверждение, что это влияет только на DSS (аргумент, популярный в прессе), полностью неверно. Вопрос в реализации и способе выбора простых чисел . Мы призываем вас уделить внимание недавней конференции
EUROCRYPT, где "за круглым столом" обсуждался вопрос лазеек в DSS. Одним из участников обсуждения был один из и с- следователей из Bellcore, утверждавший о возможности лазейки , и по нашему пониманию участники дискуссии - включая этого исследователя из Bellcore - пришли к выводу, что вопрос о лазейке в DSS не представляет проблемы. Более того, всеми было признано, что вопрос о лазейке является тривиальным и был раздут прессой . Однако, пытаясь по просьбе NIST ответить на обвинение о лазейке, мы разработали процесс генерации простых чисел, позволяющий избежать выбора одного из относ и- тельно небольшого числа слабых простых чисел, использование которых ослабляет DSS. Кроме того, NIST настаивает на ис- пользовании модулей большей длины, вплоть до 1024, что позволяет не пользоваться разработанным процессом генерации простых чисел, избегая слабых простых чисел . Очень важным дополнительным моментом, на который часто не обращают внимание, является то, что при использовании DSS простые числа общедоступны и, следовательно, могут быть предметом открытого изучения. Не все системы с открытыми ключами способны пройти подобную проверку .
Целостность любой системы защиты информации требует обратить внимание на реализацию. Учитывая уязвимость си с- тем с миллионами равноправных пользователей , NSA по традиции настаивает на использовании централизованных довере н- ных центров как на способе минимизировать риск в системе . Хотя мы по просьбе NIST и разработали ряд технических моди- фикаций DSS, позволяющих реализовать менее централизованный подход, все же нужно выделить ту часть объявления о
DSS в Federal Register, в которой говорится:
"Хотя этот стандарт должен обеспечить общие требования безопасности генерации цифровых подписей , соответствие стандарту не обеспечивает безопасность конкретной реализации. Ответственное лицо в каждом департаменте или управл е- нии должно гарантировать, что общая реализация гарантирует приемлемый уровень безопасности . NIST продолжит работу с правительственными пользователями, обеспечивая правильность реализ аций."
Наконец мы изучили все утверждения о небезопасности DSS, и они нас не убедили. DSS был тщательно изучен в NSA,
что позволило нашему Директору по безопасности информационных систем разрешить использовать этот стандарт для по д- писи несекретных данных, обрабатываемых в определенных разведывательных системах, и даже для подписи секретных да н- ных в ряде систем. Мы считаем, что подобное признание свидетельствует о невозможности какого-либо вероятного вскрытия безопасности, обеспечиваемой DSS при его правильных реализации и использовании. Основываясь на требованиях прави- тельства США к технике и безопасности цифровых подписей , мы считаем, что DSS является лучшим выбором. В действи- тельности, DSS выступает в качестве пилотного проекта Системы защиты сообщений (Defense Message System), призванного гарантировать подлинность электронных сообщений для жизненно важных команд и контрольной информации . Эта началь- ная демонстрация включает участие Комитета начальников штабов , военных служб и оборонных ведомств и проводится в кооперации с NIST.
Я не собираюсь комментировать истинность заявления NSA. Принимать его на вру или нет - зависит от в а- шего к нему отношения.
Вскрытия k
Для каждой подписи нужно новое значение k, которое должно выбираться случайным образом . Если Ева уз- нает k, которое Алиса использовала для подписи сообщения, может быть воспользовавшись некоторыми сво й- ствами генератора случайных чисел, который выдает k, она сможет раскрыть закрытый ключ Алисы, x. Если
Ева добудет два сообщения, подписанных с помощью одного и того же k, то, даже не зная значение k, она смо- жет раскрыть x. А с помощью x Ева сможет тайно подделывать подпись Алисы. В любой реализации DSA для безопасности системы очень важен хороший генератор случайных чисел [1468].
Опасности общего модуля
Хотя DSS не определяет применение пользователями общего модуля, различные реализации могут воспол ь- зоваться такой возможностью. Например, Налоговое управление рассматривает использование DSS для элек- тронной налогов. Что если эта организация потребует, чтобы все налогоплательщики страны использовали о б- щие p и q? Общий модуль слишком легко становится мишенью для криптоанализа . Пока слишком рано обсуж- дать различные реализации DSS, но причины для беспокойства есть.

Подсознательный канал в DSA
Гус Симмонс (Gus Simmons) открыл в DSA подсознательный канал [1468, 1469] (см. раздел 23.3). Этот под- сознательный канал позволяет встраивать в подпись тайное сообщение, которое может быть прочитано только тем, у кого есть ключ. Согласно Симмонсу, это "замечательное совпадение", что "все очевидные недостатки подсознательных каналов, использующих схему ElGamal, могут быть устранены" в DSS, и что DSS "на сегодня обеспечивает наиболее подходящую среду для подсознательных коммуникаций ". NIST и NSA не комментиро- вали этот подсознательный канал, никто даже не знает, догадывались ли они о такой возможности . Так как этот подсознательный канал позволяет при недобросовестной реализации DSS передавать с каждой подписью часть закрытого ключа. Никогда на пользуйтесь реализацией DSS, если вы не доверяете разработчику реализ ации.
Патенты
Дэвид Кравиц (David Kravitz), ранее работавший в NSA, владеет патентом DSA [897]. Согласно NIST [538]:
NIST в интересах общества стремится сделать технологию DSS доступной бесплатно по всему миру. Мы считаем, что эта технология может быть запатентована, и что никакие другие патенты не применимы к DSS, но мы не можем дать твердых га- рантий этого до получения патента.
Несмотря на это, три владельца патентов утверждают, что DSA нарушает их патенты: Diffie-Hellman (см.
раздел 2.2.1) [718], Merkle-Hellman (см. раздел 19.2.) [720] и Schnorr (см. раздел 21.3) [1398]. Патент Schnorr является источником наибольших сложностей . Срок действия двух других патентов истекает 1997 году, а патент
Schnorr действителен до 2008 года. Алгоритм Schnorr был разработан не на правительственные деньги. В отл и- чие от патентов PKP у правительства США нет прав на патент Schnorr, и Шнорр запатентовал свой алгоритм по всему миру. Даже если суды США вынесут решение в пользу DSA, неясно, какое решение примут суды в дру- гих странах. Сможет ли международная корпорация принять стандарт, который законен в одних странах и н а- рушает патентное законодательство в других ? Нужно время, чтобы решить эту проблему, к моменту написания этой книги этот вопрос не решен даже в Соединенных Штатах .
В июне 1993 года NIST предложил выдать PKP исключительную патентную лицензию на DSA [541]. Со- глашение провалилось после протестов общественности и стандарт вышел в свет без всяких соглашений . NIST
заявил [542]:
• . . NIST рассмотрел заявления о возможном нарушении патентов и сделал вывод, что эти заявления несправедливы .
Итак стандарт официально принят, в воздухе пахнет судебными процессами , и никто не знает, что делать.
NIST заявил, что он поможет защититься людям, обвиненным в нарушении патентного законодательства при использовании DSA в работе по правительственному контракту . Остальные, по видимому, должны заботиться о себе сами. Проект банковского стандарта, использующего DSA, выдвинут ANSI [60]. NIST работает над введе- нием стандарта DSA в правительственном аппарате. Shell Oil сделала DSA своим международным стандартом.
О других предложенных стандартах DSA мне неизвестно.
20.2 Варианты DSA
Этот вариант делает проще вычисления, необходимые для подписи, не заставляя вычислять k
-1
[1135]. Все используемые параметры - такие же, как в DSA. Для подписи сообщения m Алиса генерирует два случайных числа, k и d, меньшие q. Процедура подписи выглядит так r = (g k
mod p) mod q s = (H(m) + xr) * d mod q t = kd mod q
Боб проверяет подпись, вычисляя w = t/s mod q u
1
= (H(m) * w) mod q u
2
= (rw) mod q
Если r = ((
g y
u u
1 2
*
) mod p) mod q, то подпись правильна.
Следующий вариант упрощает вычисления при проверке подписи [1040, 1629]. Все используемые парамет- ры - такие же, как в DSA. Для подписи сообщения m Алиса генерирует случайное число k, меньшее q. Процеду- ра подписи выглядит так r = (g k
mod p) mod q s = k (H(m) + xr)
-1
mod q

Боб проверяет подпись, вычисляя u
1
= (H(m) *s) mod q u
2
= (sr) mod q
Если r = ((
g y
u u
1 2
*
) mod p) mod q, то подпись правильна.
Еще один вариант DSA разрешает пакетную проверку, Боб может проверять подписи пакетами [1135]. Если все подписи правильны, то работа Боба закончена. Если одна из них неправильна, то ему еще нужно понять,
какая. К несчастью, это небезопасно. Либо подписывающий, либо проверяющий может легко создать набор фальшивых подписей, который удовлетворяет критерию проверки пакета подписей [974].
Существует также вариант генерации простых чисел для DSA, который включает q и используемые для ге- нерации простых чисел параметры внутрь p. Влияет ли эта схема на безопасность DSA, все еще неизвестно.
(1)
Выберем произвольную последовательность, по крайней мере, 160 битов и назовем ее S. Пусть g - это длина S в битах.
(2)
Вычислим U = SHA(S) ? SHA((S + 1) mod 2
g
), где SHA описан в разделе 18.7.
(3)
Образуем q, установив наибольший и наименьший значащие биты U в 1.
(4)
Проверим, является ли q простым.
(5)
Пусть p - это объединение q, S, C и SHA(S ). C представляет собой 32 нулевых бита.
(6) p=p-(p mod q)+l.
(7) p=p+q.
(8)
Если C в p равно 0x7fffffff, вернемся на этап (1).
(9)
Проверим, является ли p простым.
(10)
Если p - составное, вернемся на этап (7).
Преимуществом этого варианта является то, что вам не нужно хранить значения C и S, использованные для генерации p и q. Они включены в состав p. Для приложений, работающих в условиях нехватки памяти, напр и- мер, для интеллектуальных карточек, это может быть важно .
20.3 Алгоритм цифровой подписи ГОСТ
Это русский стандарт цифровой подписи, Официально называемый ГОСТ Р 34.10-94 [656]. Алгоритм очень похож на DSA, и использует следующие параметры p = простое число, длина которого либо между 509 и 512 битами, либо между 1020 и 1024 битами.
1   ...   42   43   44   45   46   47   48   49   ...   78


написать администратору сайта