Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основные математические принципы в реализации некоторых алгоритмов информационной безопасности. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
5.2.1. Тест Миллера на простоту
j
j
j
Тест Миллера основан на теореме Сэлфриджа.
Алгоритм построения простого числа с помощью теста Миллера следующий.
1. Строится таблица малых простых чисел q
(или используется го-
i
товая таблица).
2. Строится число m =
простые числа из таблицы,

12
qq q
12
– случайные целые числа), размер кото-
i
...
k
q
(где
k
– различные случайные
i
рого на 1 бит меньше требуемого размера для простого числа.
3. Вычисляется значение n = 2m + 1.
4. Построенное число n испытывается тестом Миллера с заданным
параметром надежности. Если результат проверки отрицательный, то следует вернуться на шаг 2 и построить новое число m.
Тест Миллера
Вход: n – число для проверки, n –

12
1 =
qq q
12
k
– каноническое
...
k
разложение, t – параметр надежности.
1. Выбрать t различных целых случайных чисел a
1
n
2. Для каждого
a вычислить
mod
an
j
. Если какой-либо из ре-
: 1< aj < n.
j
зультатов не равен единице, то идти на Выход с сообщением «n – со- ставное число».
q
3. Для каждого
выполнить следующую последовательность дей-
i
ствий.
1in
q
3.1. Для каждого
a вычислить
a
mod n. Если какой-либо из
j
результатов не равен единице, то идти на шаг 3, взять следующее Если все результаты равны единице, то идти на Выход с сообщением
«вероятно, n – составное число».
4. Идти на Выход с сообщением «n – простое число».
Выход.
Если число n было предварительно проверено на простоту вероят­ностным тестом Миллера–Рабина, то в тесте Миллера достаточно пе-
ребрать 4–6 значений .
a
.iq
71
Если n – нечетное простое число, то вероятность того, что n
j
по случайно выбранному основанию 1 < a < n пройдет проверку на шаге 3.1, есть (n – 1)/(n – 1).
5.2.2. Тест Поклингтона
Тест Поклингтона основан на теореме Поклингтона и позволяет проверять простоту числа n, если каноническое разложение числа (n – 1) известно лишь частично.
Алгоритм построения простого числа с помощью теста Поклинг­тона следующий.
1. Строится таблица малых простых чисел q
(или используется го-
i
товая таблица).
2. Строится число F =
простые числа из таблицы;

12
qq q
12
– случайные целые числа), размер кото-
i
...
k
k
(где
q
– различные случайные
i
рого на 1 бит больше половины требуемого размера для простого числа.
3. Вычисляется значение n = RF + 1, где R – случайное четное чис-
ло, размер которого на 1 бит меньше размера F.
4. Построенное число n испытывается тестом Поклингтона с задан-
ным параметром надежности. Если результат проверки отрицатель­ный, то
следует вернуться на шаг 2.
Тест Поклингтона (данные представлены в прил. А)
Вход: n – число для проверки: n – 1 = RF, F > R, F =

12
qq q
12
...
k
–
k
каноническое разложение; t – параметр надежности.
1. Выбрать t различных целых случайных чисел a
1
n
2. Для каждого
a вычислить
mod .
an
j
Если какой-либо из ре-
: 1 < ja < n.
j
зультатов не равен единице, то идти на Выход с сообщением «n – со- ставное число».
3. Для каждого
a
выполнить следующую последовательность дей-
i
ствий.
1jn

q

3.1. Для каждого q
вычислить
j
a

mod n. Если какой-либо
i
из результатов равен единице, то идти на шаг 3, взять следующее
.ia
72
Если все результаты не равны единице, то идти на Выход с сообщени­ем «n – простое число».
4. Идти на Выход с сообщением «вероятно, n – составное число».
Выход.
Если n = RF + 1 – нечетное простое число, F > n –1, F =
...
k
, НОД(R, F) = 1, то вероятность того, что случайно вы-
k

12
=
qq q
12
бранное 1 < a < n будет удовлетворять условиям теоремы Поклингто-
на, есть
k
i
1

1
 
1
.
q
i
Если известно полное разложение n–1, то в качестве F следует брать число, составленное из наибольших делителей n–1 для того, чтобы:
1) сократить число проверок для каждого a;
2) уменьшить степени, в которые возводится a на этапе проверки;
3) повысить вероятность того, что случайно выбранное a будет
удовлетворять условиям теоремы Поклингтона, а значит, уменьшить количество перебираемых a.
Пример
Вход: n = 4021. n – 1 < 63.
2
n – 1 = 4020 = 2
3 5 67. F = 67, R = 22 3 5 = 60.
Проверка условий:
a = 2.
4020
1) 2
2) 2
mod 4021 = 1.
4020/67
mod 4021 = 260 mod 4021 = 1452.
Выход: n = 4021 – простое число.
(Заметим, что вероятность того, что наугад выбранное a будет удо­влетворять условиям теоремы Поклингтона для данного примера, есть (1 – 1/67) ≈ 0,985).
73
5.2.3. Процедура генерации простых чисел ГОСТ Р 34.10–94

В отечественном стандарте на цифровую подпись ГОСТ Р34.10–94 рекомендована процедура генерации доказуемо простых чисел задан­ного размера. ГОСТ Р 34.10–2001 также предписывает использование этой процедуры. Данная процедура основана на теореме Диемитко.
Теорема Диемитко
Пусть n = qR + 1, где q – простое число, R – четное, R < 4(q + 1).
1n
Если найдется a < n: 1) a
n–1
≡ 1(mod n); 2)
q
a
1(mod n), то n –
простое число.
■
Итак, если имеем простое число q, то, перебирая четные числа R, строим числа n = qR + 1 и испытываем их на простоту согласно теоре­ме Диемитко, пока не получим простое число. По полученному числу можно построить еще одно простое число и т. д., пока не будет до­стигнут требуемый размер числа.
Приведем алгоритм перехода от меньшего простого числа q:
|q |=
к большему p: |p| = t, использующийся в ГОСТ. Фигурирую-

2

t

щая в процедуре ξ есть равномерно распределенная на (0,1) случайная величина, получаемая с помощью линейного конгруэнтного генерато­ра. Каждый раз на шаге 1 получают новое значение ξ.
Алгоритм перехода от меньшего простого числа к большему
Вход: t – требуемая размерность простого числа, q – простое
t

|q|=
.

2

1. Вычисляем N =
11
tt


22

qq


. Если N – нечетное, то N = N + 1.
число:
2. u = 0.
3. Вычисляем p = (N + u)q + 1 – кандидат в простые.
t
2,
4. Если
p
возвращаемся на шаг 1.
74
5. Если
p
()21mod
и
Nu
2
1(mod p), то идем на Выход.
1
p
6. Вычисляем u = u + 2. Возвращаемся на шаг 3.
Выход: p – простое число.
Первое слагаемое в построении числа N на шаге 1 обеспечивает минимальный требуемый размер числа p, а второе – вносит в процеду­ру поиска новых простых чисел необходимый элемент случайности.
Проверка на шаге 4 необходима, чтобы число p не
превышало сво­ей верхней границы, а проверка на шаге 5 есть проверка условия тео­ремы Диемитко при a = 2.
Пример
Вход: t = 4, q = 3 = [11]2
880,1
1.
2.
3.
4.
5.
 
N =
 
33
 
u = 0. p = 4 3 + 1 = 13.
13 < 2
2
4
12
mod 13 = 1, 2
= 16.
= 4. 4 – четное число.
4
mod 13 = 3.
Выход: р = 13 = [1011]
.
2
Поскольку на шаге 5 условие теоремы Диемитко проверяется не для всех a < p, а только для a = 2, то некоторые простые числа, сгене­рированных этим алгоритмом, не опознаются как простые. Но вероят­ность того, что для простого числа n наугад выбранное число a будет удовлетворять условиям теоремы Диемитко, есть (1 – 1/q), а q – доста­точно
большое число. Таким образом, проверки при a = 2 вполне до-
статочно, чтобы не отсеивать слишком много простых чисел.
Расширенные данные представлены в прил. А.
Задания для самостоятельного решения
1. Построить таблицу простых чисел, меньших 500, с помощью
решета Эратосфена. С использованием этой таблицы:
а) реализовать процедуру получения простых чисел заданной дли­ны на основе теста Миллера;
75
б) реализовать процедуру получения простых чисел заданной дли­ны на основе теста Поклингтона;
в) реализовать процедуру генерации простых чисел заданной дли­ны ГОСТ Р 34.10–94.
2. Построить 10 простых чисел с помощью полученной процедуры.
3. Каждое построенное число проверить на простоту вероятност-
ным тестом, реализованным в задании к разделу 2. Количество итера­ций вероятностного теста
должно быть таково, чтобы вероятность
ошибки не превышала 0,1.
4. Каждое отвергнутое тестом из пункта 1 число проверить вероят­ностным тестом. Подсчитать k – количество отвергнутых чисел, опре­деленных вероятностным тестом как простые.
5. Результат оформить в виде таблицы.
№ 1 2 … 10
p 101 …
Результат проверки вероятностным тестом + – …
k 2 …
Здесь № – номер эксперимента; p – построенное простое число, в третьей строке результат проверки построенного числа вероятност­ным тестом (+ или –); k – количество отвергнутых чисел, определен­ных вероятностным тестом как простые.
Количество итераций вероятностного теста должно быть таково, чтобы вероятность ошибки не превышала 0,1.
5.3. Криптографические протоколы распределения ключей
Криптопротокол 5.3.1. Обмен ключами, использующий крип-
тографию с открытым ключом
Алиса и Боб генерируют пары «открытый ключ / закрытый ключ»
и открытые ключи отправляют Тренту.
1. Алиса обращается к Тренту и запрашивает сеансовый ключ для
связи с Бобом.
76
2. Трент генерирует случайный сеансовый ключ K и зашифровыва-
A
R
R
ет две его копии открытыми ключами Алисы и Боба. Обе копии Трент отправляет Алисе.
3. Алиса расшифровывает свою копию сеансового ключа.
4. Алиса отсылает Бобу его копию сеансового ключа.
5. Боб расшифровывает свою копию сеансового ключа.
6. Алиса и Боб шифруют свои сообщения, используя
сеансовый
ключ K.
Криптопротокол 5.3.2. Обмен ключами, использующий крип-
тографию с открытым ключом
Боб генерирует пару «открытый ключ / закрытый ключ» и откры-
тый ключ отправляет Тренту.
1. Алиса получает от Трента открытый ключ Боба.
2. Алиса генерирует случайный сеансовый ключ K, шифрует его
открытым ключом Боба и отправляет Бобу.
3. Боб расшифровывает сообщение Алисы своим закрытым
ключом.
4. Алиса и Боб шифруют свои сообщения, используя
ключ K.
сеансовый
Криптопротокол 5.3.3. Взаимоблокировка («держась за руки»)
1. Алиса отправляет Бобу свой открытый ключ.
2. Боб отправляет Алисе свой открытый ключ.
3. Алиса генерирует случайное число
, шифрует его с помощью
открытого ключа Боба. Половину зашифрованного сообщения она от­правляет Бобу.
4. Боб генерирует случайное число
, шифрует его с помощью
B
открытого ключа Алисы. Половину зашифрованного сообщения он отправляет Алисе.
5. Алиса отправляет Бобу оставшуюся половину зашифрованного
сообщения.
6. Боб складывает две половины сообщения Алисы и расшифровы­вает сообщение Алисы своим закрытым ключом. Затем Боб отсылает Алисе вторую половину своего шифрованного сообщения.
7. Алиса складывает две половины сообщения Боба
и расшифро-
вывает сообщение Боба своим закрытым ключом.
77
8. Алиса и Боб вычисляют сеансовый ключ:
A
E
E
E
A
KR R
.
B
9. Алиса и Боб шифруют свои сообщения, используя сеансовый ключ K .
Криптопротокол 5.3.4. Протокол одновременной передачи
ключей и сообщений
Боб генерирует пару «открытый ключ / закрытый ключ» и откры-
тый ключ отправляет Тренту.
open
1. Алиса получает от Трента открытый ключ Боба:
K .
B
2. Алиса генерирует случайный сеансовый ключ K и шифрует со­общение М, используя
:K
.
K
()
M
3. Алиса зашифровывает K , используя открытый ключ Боба:
.
()
K
open
K
B
4. Алиса отправляет Бобу как зашифрованное сообщение, так и за­шифрованный ключ:
(), ()
ME K
K
K
open B
.
5. Боб расшифровывает сеансовый ключ Алисы K своим закры­тым ключом.
6. Боб расшифровывает сообщение Алисы с помощью сеансового ключа.
7. Алиса и Боб шифруют свои сообщения, используя сеансовый ключ K .
Криптопротокол 5.3.5. Протокол обмена зашифрованными
ключами (Encrypted Key Exchange (EKE))
Протокол включает в себя взаимную идентификацию участников.
Алиса и Боб имеют общий ключ P .
1. Алиса случайным образом генерирует пару «открытый ключ /
open
закрытый ключ». Далее Алиса шифрует открытый ключ
K с по-
мощью симметричного алгоритма, используя P в качестве ключа, и
,
посылает Бобу сообщение:
AE K ( A – это имя Алисы).
open
78
A
P
2. Боб знает P . Он расшифровывает сообщение, получая
A
E
A
R
K
E
A
R
R
K
E
A
R
R
A
R
R
K
E
R
R
Затем он генерирует случайный сеансовый ключ
зашифровывает
,K
open
K .
его открытым ключом, который он получил от Алисы, а затем еще и ключом P . Он посылает Алисе такое сообщение:
EK
P
K
open A
()
.
3. Алиса расшифровывает сообщение, получает K . Она генерирует случайное число
()
R
.
A
4. Боб расшифровывает сообщение, получая другое случайное число ет Алисе результат:
5. Алиса расшифровывает сообщение, получая строка
, полученная от Боба, – это та самая строка, которую она
послала Бобу, Алиса, используя K , шифрует строку
()
Бобу:
R
B
6. Боб расшифровывает сообщение, получая
, шифрует его с помощью K и посылает Бобу:
. Он генерирует
, шифрует оба числа ключом K и посыла-
B
(,)
RR
AB
.
и
и посылает ее
B
.
. Если строка
B
. Если
B
B
полученная от Алисы, – это та самая строка, которую он посылал ей, то происходит передача сообщений.
7. Алиса и Боб шифруют свои сообщения, используя сеансовый ключ K .
,
Криптопротокол 5.3.6. Протокол Диффи–Хелмана (Diffie–
Hellman)
Если рассматривать стойкость симметричного и асимметричного шифрования, то при одинаковой длине ключа сравнение будет не в пользу последних. Более того, для асимметричного шифрования тре­буется времени на порядки больше, чем симметричных. В то же время асимметричные методы шифрования позволяют достаточно безопасно выполнять действия, которые с помощью симметричного шифрования выполнить невозможно.
Обмен ключами Диффи–Хеллмана представляется более защищен­ным, так как установленный симметричный ключ никогда не покидает клиента или сервера и, соответственно, не может быть перехвачен зло­умышленником, даже если тот знает закрытый ключ сервера.
79
Этот алгоритм, предложенный в 1976 г. Уитфилдом Диффи и Мар-
A
Х
тином Хеллманом, стал первым в истории алгоритмом с открытым ключом [8] и привел к настоящей революции в криптографии и ее практических применениях. Это первая система, которая позволяла защищать информацию без использования секретных ключей, переда­ваемых по защищенным каналам. Для того чтобы продемонстрировать одну
из схем применения таких систем, рассмотрим сеть связи с N пользователями, где N – большое число. Пусть мы хотим организовать секретную связь для каждой пары из них. Если мы будем использовать обычную систему распределения секретных ключей, то каждая пара абонентов должна быть снабжена своим секретным ключом, т.е. всего
потребуется
2
C
N
NNN

2( 2)! 2
N

ключей.
!(1)
Если абонентов 100, то требуется 5000 ключей, если же абонентов
4
10
, то ключей должно быть 5 107.Мы видим, что при большом числе
абонентов система снабжения их секретными ключами становится очень громоздкой и дорогостоящей.
Диффи и Хеллман решили эту проблему за счет открытого распро­странения и вычисления ключей. Перейдем к описанию предложенной ими системы.
Пусть строится система связи для абонентов А (Алиса), В (Боб). У каждого абонента
есть своя секретная и открытая информация. Для организации этой системы выбирается большое простое число р и некоторое число g, 1 < g < р – 1, такое, что все числа из множества {1, 2, …, р – 1} могут быть представлены как различные степени g mod р. Числа р и g известны всем абонентам. Говорят, что g является прими­тивным корнем
Абоненты Алиса и Боб выбирают большие числа
по модулю p.
,,
Х
кото-
B
рые хранят в секрете (обычно такой выбор рекомендуется проводить случайно, используя датчики случайных чисел). Каждый абонент вы­числяет соответствующее число Y, которое открыто передается другим абонентам,
X
Yg p
A
Yg p
B
A
X
B
mod ,
mod .
 
В результате получаем следующую табл. 5.2.
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]