Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Diskr_Mat(Fadeev(21)).docx
Скачиваний:
161
Добавлен:
25.02.2016
Размер:
2.37 Mб
Скачать

Курсовая работа по курсу «Модулярная арифметика»

Студент Фадеев М.А.

Группа А-06-08

Преподаватель Набебин А.А.

Москва 2010

Задача №23.21

. Зашифровать и расшифровать сообщение с помощью криптосистемы RSA (R. Rivest, A. Shamir, L. Adleman). Простые числа p и q определяются вариантом задания. В качестве исходного текста взять три первых латинских буквы своей фамилии.

p = 5879, q = 5503.

Решение.

Вычисление ключей. Каждый адресат вычисляет свой открытый ключ и ему соответствующий секретный ключ. Адресат должен выполнить следующее:

  1. Выбрать два больших различных простых числа p и q примерно одного размера.

  2. Найти n = pq и функцию Эйлера φ = φ(n) = (p - 1)(q - 1).

  3. Взять случайное число e, 1<e< φ такое, что нод(e, φ) = 1.

  4. Найти такое целое a (1, φ), что ea ≡ 1 (mod φ). Для этого с помощью расширенного алгоритма Евклида найти такие целые a, x, что ea + φx = 1. Тогда ea ≡ 1 (mod φ). Пусть произвольное k Z. Сложив ea ≡ 1 (mod φ) и ekφ ≡ 0 (mod φ), получим e(a + kφ) ≡ 1 (mod φ). Если a (1,φ), то найти такое целое k, что a + kφ (1, φ), и в качестве a взять a + kφ.

  5. Открытый ключ адресата есть пара чисел (n,e). Секретный ключ адресата есть число a.

Шифрование. Адресат A шифрует свой текст t и отправляет его адресату B. B дешифрует сообщение от A и получает исходный текст t. Адресат A должен выполнить следующее:

  1. Получить открытый ключ (n,e) адресата B.

  2. С помощью какого-либо метода M, который публикуется, представить своё письмо t как сообщение в виде натурального числа m из сегмента [0, n-1].

  3. Вычислить шифротекст c = me (mod n).

  4. Отправить свой шифротекст c адресату B.

Дешифрование. Чтобы извлечь текст t из шифротекста c, адресат B должен выполнить следующее:

  1. Взять свой секретный ключ a и вычислить сообщение m = ca (mod n).

  2. Вычислить текст t адресата A с помощью метода M.

Адресат A пишет письмо t = SAM адресату B.

Вычисление ключей. Адресат B выполняет следующее:

  1. Выбирает два разных простых числа p = 5879, q = 5503.

  2. Вычисляет n = pq = 32358581 и функцию Эйлера φ = (p - 1)(q - 1) = 32347200.

  3. Выбирает случайное число e = 402631 (1, φ) с нод(e, φ) = 1.

  4. С помощью расширенного алгоритма Евклида находит такое a = 7209271 (1, φ), что ea ≡ 1 (mod φ).

  5. Открытый ключ адресата B есть пара чисел (n = 32358581, e = 402631). Секретный ключ адресата B есть число a = 7209271.

Шифрование. Адресат А выполняет следующее:

  1. Получает открытый ключ (n = 32358581, e = 402631) адресата B.

  2. Представляет свой текст t = FAD в виде натурального числа m из [0, n-1] с помощью 27-ричной системы счисления следующим образом. Нумеруются буквы алфавита:

пробел

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

U

V

W

X

Y

Z

21

22

23

24

25

26

Текст FAD представляется в виде числа m = 6 * 272 + 1 * 27 + 4 = 14610

  1. Шифрует своё сообщение m = 13891 числом c = me (mod n) =14610402631 (mod 32358581) = 16028906.

  2. Посылает свой шифротекст c адресату B.

Дешифрование. Чтобы дешифровать шифротекст c от A, адресат B выполняет следующее:

  1. Находит (с помощью своего секретного ключа a) число m = ca (mod n) = 160289067209271 (mod 32358581) = 14610.

  2. Представляет число m в 27-ричной системе счисления: m = (19 1 13)27 и получает исходный текст FAD.

Замечание. Криптографическая стойкость криптосистемы RSA основана на трудной практической осуществимости проблемы факторизации больших чисел. На практике для криптографической стойкости модуль n задаётся двоичным числом с 1024 и более двоичными разрядами.

Текст t в компьютере представляется бинарным массивом, который рассматривается как бинарная запись некоторого числа m. Предложенный выше способ представления текста числом носит иллюстративный характер и выбран из желания оперировать небольшими числами.

Задача 24.21

Зашифровать и расшифровать сообщение с помощью криптосистемы RSA (R. Rivest, A. Shamir, L. Adleman). Простые числа p и q взять из задачи 29. В качестве исходного текста взять три первых латинских буквы своей фамилии.

p = 490663, q = 27259, t = FAD.

Вычисление ключей. Каждый адресат создает открытый ключ и ему соответствующий секретный ключ. Адресат должен выполнить следующее.

1. Выбрать два больших различных случайных простых числа p и q примерно одного размера.

2. Найти n = pq и функцию Эйлера φ = φ(n) = (p − 1)(q − 1).

3. Взять случайное число e, 1 < e < φ, такое, что нод(e, φ) = 1.

4. Найти такое целое a (1,φ), что ea ≡ 1 (mod φ). С помощью расширенного алгоритма Евклида найти то единственное целое a, 1 < d < φ, для которого ea1 (mod φ).

5. Открытый ключ адресата есть пара чисел (n, e). Секретный ключ адресата есть число a.

Вычисление подписи. Адресат А подписывает свой текст t. Любой адресат B может проверить подпись A и извлечь из нее текст t. Адресат A должен выполнить следующее.

  1. Каким – либо методом M (который публикуется) представить свой текст t в виде целого числа m, 1 < m < n – 1.

  2. Найти число w = R(m) с помощью открытой функции

R : [0, n – 1] → MR , где MR есть некоторое числовое множество, например,

R(m) = m*m, где a*b есть результат приписывания слова b к слову a. Тогда MR = {w = m*m: m [0, n – 1]}.

3. Найти число s = w a(mod n).

4. Отправить подписанный шифротекст s адресату В.

Проверка подписи и вычисление сообщения. Чтобы проверить подпись s адресата A и извлечь из нее сообщение m, адресат B должен выполнить следующее.

  1. Получить открытый ключ (n, e) адресата A.

  2. Найти число w = s e(mod n).

  3. Проверить, что w MR . Если нет, отвергнуть подпись s.

  4. Найти число m = R–1(w).

  5. С помощью метода M найти отправленный текст t.

Решение:

Адресат A подписывает свой текст t. Любой адресат B может проверить подпись A.

Вычисление ключей. Адресат А выполняет следующее.

1. Выбирает разные простые числа p = 490663 и q = 27259.

2. Находим n = pq = 490663 * 27259 = 13374982717 и функцию Эйлера

φ = φ(n) = (p − 1)(q − 1) = 490662 * 27258 = 13374464796.

3. Выбирает случайное число e = 405577, 1 < e < φ, с нод(e, φ) = 1.

4. С помощью расширенного алгоритма Евклида находит то единственное целое a = 4233244969(1,φ), которое удовлетворяет сравнению

ea ≡ 1 (mod φ), это сравнение 405577d ≡ 1 (mod 13374464796).

  1. Открытый ключ для А есть пара (n = 13374982717, e = 405577).

  2. Секретный ключ для А есть число a = 4233244969.

Вычисление подписи. Адресат А подписывает свой текст t = FAD и выполняет следующее.

  1. Представим свой текст t = FAD числом каким – либо методом M, например, в 27 – ричной системе счисления числом

m = 6 * 272 + 1 * 27 + 4 = 14079.

Нумеруются буквы алфавита:

пробел

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

S

T

U

V

W

X

Y

Z

19

20

21

22

23

24

25

26

  1. Вычисляет w = R(m) = R(14079) = 14079*14079 = 1407914079.

3. Вычисляет подпись

s = w a(mod n) = 14079140794233244969 (mod 13374982717) = 16252024181622.

4. Отправляет подписанный шифротекст s адресату В.

Проверка подписи и вычисление сообщения. Адресат B получает от A подписанный шифротекст s и делает следующее.

  1. Получить открытый ключ (n = 13374982717, e = 405577) адресата A.

  2. С помощью открытого ключа (n, e) адресата А вычисляет:

w = s e(mod n) = 16252024181622405577 (mod 13374982717) = 1407914079.

  1. Так как w = 1407914079 = 14079*14079 и MR , то B принимает

подпись А.

  1. Вычисляет m = R–1(w) = 14079.

  2. Представляет число m = (14079)10 в 27 – ричной системе счисления

m = (6 1 4)27 и получает исходный текст t = FAD.

Замечание. Допустима цифровая подпись RSA,основанная на использовании криптографической хэш – функции h: {0, 1}* → n, где n есть число элементов в мультипликативной группе G. Предполагается, что каждый элемент r из G может быть представлен в бинарной записи f(r) с тем, чтобы можно было вычислить значение хэш – функции h(f(r)).

Алгоритм вычисления значений хэш – функции публикуется.

Заметим, что содержимое любого файла есть некоторый текст t, представляемый в компьютере как последовательность нулей и единиц, которая есть некоторое бинарное слово m (в алфавите {0, 1}), являющееся битовым набором m, составленным из кодов ASCII для последовательных символов текста t. Хэш – функция h сопоставляет бинарному набору m уникальный бинарный набор фиксированной длины (на практике это набор длины 128, 160 или 256 бит, в зависимости от выбранной хэш – функции), который может рассматриваться как двоичное число (в системе счисления по основанию 2) и которое затем, вообще говоря, можно представить числом в системе счисления по любому основанию h. В конечном итоге с помощью хэш – функции тексту t ставится в соответствие уникальное число в системе счисления по любому нужному основанию.

Значение хэш – функции есть большое число, выходящее за пределы величин целых чисел, допустимых в алгоритмических языках программирования. MatCad, например, допускает целые (10 – ричные) числа длины не более 18 цифр. Для работы с большими целыми числами с длиной десятеричной записи в 100 и более цифр приходится писать специальный программный процессор. Поэтому в последующих примерах значение хэш – функции записывается искусственно, для примера, небольшим числом.

Вычисление ключей. Пусть по-прежнему: пара (n = 13374982717, e = 405577) есть открытый ключ для А и число a = 4233244969 есть секретный ключ для A.

Вычисление подписи. Адресат А подписывает свой текст t произвольной длины. Любой адресат B может проверить подпись A под его текстом t. Адресат A должен выполнить следующее.

1. Вычислить значение хэш – функции h = h(t). Пусть для примера текст

t = FAD, m = 6 * 272 + 1 * 27 + 4 = 14079, h = h(m) = m = 14079.

2. Вычислить s = h a (mod n) = 140794233244969 (mod 13374982717). Число s есть подпись A под его текстом t.

Проверка подписи и вычисление сообщения. Чтобы проверить подпись s адресата A, адресат B должен выполнить следующее.

  1. Получить открытый ключ (n = 13374982717, e = 405577) адресата A.

  2. Вычислить значение хэш – функции h = h(t). Если текст t не изменялся, то h = 14079.

  3. Вычислить h1 = s e(mod n) = 16252024181622405577 (mod 13374982717) = = 14079.

  4. Принять подпись, если h = h1, и отвергнуть в противном случае. Так как h = h1 = 14079, то подпись принимается.

Задача 25.21

Зашифровать и расшифровать сообщение с помощью криптосистемы ЭльГамаля. В качестве простого числа p взять большее число варианта из задачи 29. В качестве исходного текста взять три первые латинские буквы совей фамилии.

p = 490663, t = FAD

Вычисление ключей. Каждый адресат создает свой открытый ключ и ему соответствующий секретный ключ. Адресат должен выполнить следующее.

1. Выбрать случайное простое число p и найти генератор α мультипликативной группы *р целых чисел по модулю p, используя алгоритм Гаусса.

2. Выбрать случайное число a [1, p – 2] и найти y = αa (mod p).

3. Открытый ключ адресата есть тройка чисел (p, α, y). Секретный ключ адресата есть число a.

Шифрование. Адресат А шифрует свой текст t и отправляет шифротекст адресату В. В дешифрует сообщение от А и получает исходный текст t. Адресат А должен выполнить следующее.

1. Получить открытый ключ (p, α, y) адресата В.

2. С помощью какого – либо метода М, который публикуется, представить свое письмо t как сообщение в виде натурального числа m из сегмента [0,p–1]

3. Выбрать случайное число k, 1 ≤ kp – 2.

4. Вычислить γ = αk (mod p) и δ = m · yk (mod p).

5. Отправить свой шифротекст c = (γ, δ) адресату В.

Дешифрование. Чтобы получить исходный текст t по c = (γ, δ), адресат В должен выполнить следующее.

  1. Взять свой секретный ключ a и вычислить целое число γ p – 1 – a (mod p).

  2. Вычислить m = (γ a · δ)(mod p), где γ a = (γ – 1 )а , а число γ – 1 есть решение сравнения х · γ ≡ 1(mod p) и вычисляется с помощью расширенного алгоритма Евклида.

  3. Вычислить исходный текст t от А с помощью метода M.

Решение:

Адресат А пишет письмо t = FAD адресату В.

Вычисление ключей. Адресат В выполняет следующее.

  1. Выбирает простое число p = 490663 и находит генератор α = 3 для мультипликативной группы *490663 .

  2. Выбирает случайное число а = 405577 1 ≤ ар – 2, и вычисляет

y = αa (mod p) = 3405577 (mod 490663) = 188403.

3. Открытый ключ адресата В есть тройка (р = 490663, α = 3, у = 188403). Секретный ключ адресата В есть число а = 405577.

Шифрование. Адресат А шифрует свой текст t = FAD и выполняет следующее.

  1. Получает открытый ключ (р = 490663, α = 3, у = 188403) для В.

  2. Представляет свой текст t = FAD в виде натурального числа m из

[0, p – 1], с помощью какого – либо метода, например, с помощью 27 – ричной системы счисления числом m = 6*272 + 1*27 + 4 = 14079.

3. Выбирает случайное число k = 1751, 1 ≤ kр – 2.

4. Вычисляет γ = αk (mod p) = 31751 (mod 490663) = 208275,

δ = m · yk (mod p) = 14079 · 1884031751 (mod 490663) = 87345.

5. Посылает шифротекст с = (γ = 208275, δ = 6008227329) адресату В.

Дешифрование. Чтобы дешифровать шифротекст c = (γ = 208275, δ = 87345) от А, адресат В выполняет следующее.

  1. Вычисляет

γ p – 1 – a (mod p) = 20827585085 (mod 490663) = 62974.

m = (γ p -1 - a · δ)(mod p) = ((γ p -1 - a)(mod p) · δ)(mod p) =

(20827585085 (mod 490663) 87345)(mod 490663) = 131800.

  1. Представляет число m 27– ричной системе счисления: m = (6 1 4)27 и получает исходный текст FAD.

Замечание. Криптографическая стойкость криптосистемы ЭльГамаля основана на трудной практической осуществимости проблемы нахождения дискретного логарифма в группе *р при больших простых числах р. На практике для криптографической стойкости простое число р задается двоичным числом с 1024 и более двоичными разрядами.

Программный код:

См. Приложение.

Вычисление ключей.

1.

2.

3. (р = 490663, α = 3, у = 188403)

Шифрование.

1. (р = 490663, α = 3, у = 188403)

2. t := FAD

3.

4.

5. c = (γ = 208275, δ = 87345)

Дешифрование.

1.

2.

m = (6 1 4)

Задача 26.21

Вычислить и проверить подпись под сообщением с помощью криптосистемы ElGamal для электронной подписи. В качестве простого числа р взять большое число из задачи 23. В качестве исходного текста взять слова своего полного имени: фамилия, имя, отчество.

p = 5897 t = FMA

При использовании схемы цифровой подписи ЭльГамаля по тексту письма t вычисляется значение хэш – функции h(t), которое затем используется при вычислении и проверке цифровой подписи под текстом сообщения.

Вычисление ключей. Каждый адресат создает открытый ключ и ему соответствующий секретный ключ. Далее адресат должен выполнить следующее.

1. Выбрать случайное простое число p и найти генератор α мультипликативной группы *р .

2. Выбрать произвольное число a, 1 ≤ a р – 1.

3. Вычислить y = αa (mod p).

4. Открытый ключ адресата есть тройка чисел (p, α, y). Секретный ключ адресата есть число a.

Вычисление подписи. Адресат А подписывает свой текст t (произвольной длины). Любой адресат B может проверить подпись адресата A под его текстом t. Адресат A должен выполнить следующее.

  1. Вычислить значение хэш – функции h(t).

2. Выбрать случайное секретное целое число k из [1, p – 2] такое, что нод(k, p – 1) = 1.

3. Вычислить k – 1 (mod (p – 1)).

4. Вычислить r = αk (mod p).

5. Вычислить s = k – 1 (h(t) ar) (mod (p – 1)).

6. Подпись адресата А под его текстом t есть пара (r, s).

Проверка подписи. Чтобы проверить подпись (r, s) адресата A под его текстом t, адресат B должен выполнить следующее.

  1. Вычислить значение хэш – функции h(t).

  2. Получить открытый ключ (p, α, y) адресата А.

  3. Проверить, что r [1, p – 1]; если нет, отвергнуть подпись.

  4. Вычислить v1 = yr rs (mod p).

  5. Вычислить v2 = αh(m)(mod p).

  6. Принять подпись, если v1 = v2 и опровергнуть в противном случае.

Решение:

Адресат А подписывает свой текст t. Любой адресат В может проверить подпись А.

Вычисление ключей. Адресат А выполняет следующее.

1. Выбирает простое число p = 5897 и находит генератор α = 3 мультипликативной группы *р целых чисел по модулю р.

2. Выбрать случайное целое a = 1751, 1 ≤ a р – 1.

3. Вычисляет y = αa (mod p) = 31751 (mod 5897) = 3818.

4. Открытый ключ адресата A есть тройка чисел (p = 5897, α = 3, y = 3818). Секретный ключ адресата A есть число a = 1751.

Вычисление подписи. Адресат А подписывает свой текст t и для этого выполняет следующее.

  1. Вычисляет значение хэш – функции h(t). Пусть для примера h(t) =1550.

2. Выбрать случайное секретное целое число k = 1579 из [1, p – 2] такое, что нод(k, p – 1) = 1.

3. Вычислят k – 1 (mod (p – 1)) = 1579 – 1 (mod 5896) = 1369.

4. Вычисляет r = αk (mod p) = 31579 (mod 5897) = 5032.

5. Вычисляет s = k – 1 (h(t) ar) (mod (p – 1)) =

= 1369 (1550 – 17515032)(mod 5897) = 3825.

6. Подпись адресата А есть пара (r = 5032, s = 3825).

Проверка подписи. Чтобы проверить подпись (r = 5032, s = 3825) адресата A под его текстом t, адресат B должен выполнить следующее.

  1. Вычисляет значение хэш – функции h(t). Если текст t не изменялся, то h(t) =1550.

  2. Получает открытый ключ (p = 5897, α = 3, y = 3818) адресата А.

  3. Проверяет, что r = 5032 [1, p – 1] = [1, 5896].

  4. Вычисляет число v1 = yr rs (mod p) = 38185032 50323825 (mod 5897) = 1582.

  5. Вычисляет число v2 = αh(t)(mod p) = 31550 (mod 5897) = 1582.

  6. Принимает подпись, ибо если v1 = v2 .

Для Криптографической стойкости рекомендуется брать р длиной между 512 бит (лучше 768) и 1024 бит включительно.

Код программы:

См. Приложение

Вычисление ключей.

1.

2.

3.

4. (p = 5897, α = 3, y = 3818)

Вычисление подписи.

1.

2.

3.

4.

5.

s = 3825

6. (r = 5032, s = 3825)

Проверка подписи.

1.

2. (p = 5897, α = 3, y = 3818)

3. r = 5032

4.

v1 = 1582

5.

6. v1 = v2

Задача 27.21

Зашифровать и расшифровать сообщение с помощью (обобщенной) криптосистемы ЭльГамаля над (конечным) полем Галуа GF(pm). Взять простое число р = 31, натуральное m = 3. Неприводимый полином над р определяется номером варианта. В качестве исходного текста взять три первые латинские буквы своей фамилии.

23х3 + 6, р = 31, m = 3, t = FAD.

Решение:

Числовая схема шифрования ЭльГамаля может быть обобщена для работы в любой конечной циклической группе G . Криптографическая стойкость схемы ЭльГамеля в группе G основана на трудности решения проблемы дискретного логарифма в G. Группа G должна удовлетворять следующим условиям.

  1. Эффективность, то есть групповые операции в G должны вычисляться относительно просто.

  2. криптографическая стойкость, то есть решение проблемы дискретного логарифма в Gдолжно быть практически неосуществимой.

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

1. Мультипликативная группа *р целых чисел по модулю простого числа р.

2. Мультипликативная группа *2s конечного поля 2s характеристики два.

3. Группа точек эллиптической кривой над конечным полем.

4. Мультипликативная группа *q конечного поля |Fq , где q = p s , р есть простое число, s есть положительное простое число.

5. Группа обратимых элементов *n , где n есть составное целое число.

6. Якобиан гиперэллиптической кривой над конечным полем.

7. Класс групп мнимого квадратичного числового поля (imaginary quadratic number field).

Адресат А шифрует свой текст t и отсылает шифротекст адресату В. В дешифрует сообщение от А и получает исходный текст t.

Вычисление ключей. Каждый адресат создает свой открытый ключ и ему соответствующий секретный ключ. Далее адресат должен выполнить следующее.

1. Выбрать подходящую (мультипликативную) циклическую группу G порядка n.

2. Найти генератор α группы G.

3. Выбрать случайное целое число a, 1 ≤ a n – 1.

4. Вычислить элемент y = αa группы G.

5. Открытый ключ адресата есть пара чисел (α, y) элементов группы G. Открыто также описание умножения элементов в G. Секретный ключ адресата есть число a.

Шифрование. Адресат А шифрует свой текст t и отправляет шифротекст адресату В. Адресат А должен выполнить следующее.

1. С помощью какого – либо метода М, который публикуется, представить свое письмо t как элемент m группы G.

2. Получить открытый ключ (α, y) адресата В.

3. Выбрать случайное целое число k, 1 ≤ kn – 1.

4. Вычислить γ = αk и δ = m · yk .

5. Отправить свой шифротекст c = (γ, δ) адресату В.

Дешифрование. Чтобы получить исходный текст t по c = (γ, δ), адресат В должен выполнить следующее.

  1. Взять свой секретный ключ a и вычислить целое число γa и найти γa = (γ a ) – 1.

  2. Вычислить m = (γ a · δ).

  3. Вычислить исходный текст t от А с помощью метода M.

Замечание. Все адресаты могут выбрать одну и ту же циклическую группу G и ее генератор α.

Криптосистема ЭльГамаля с мультипликативной группой конечного поля |Fpm , р = 35, m = 3. Пусть для удобства элемент поля а2 х2 + а1 х + а0 представляется р – ричной стрингом (а2 а1 а0).

Адресат А подписывает свой текст t = FAD и отправляет шифротекст адресату В. В дешифрует сообщение от А и получает исходный текст t.

Вычисление ключей. Адресат В выполняет следующее.

1. Выбирает мультипликативную группу G конечного поля (Е335 , {+, }), элементы которого представляются полиномами из 35 [х] над 35 степени меньше 3 и умножение в котором выполняется по модулю неприводимого полинома f(x) = (23 0 0 6) = 23х3 + 6 из 35 [х]. Группа G имеет порядок

n = pm – 1 = 353 – 1 = 42874.

2. Находит генератор α = х + 5 = (0 1 5) группы G.

3. Выбрать случайное целое число a = 2, 1 ≤ a n – 1.

4. Вычислить элемент y = αa (mod f(x)) = (х + 5)2 (mod f(x)) = х2 + 10х + 25 = (1 10 25) группы G.

5. Открытый ключ адресата для В есть пара чисел (α = (0 1 5),

y = (1 10 25)) вместе с полиномом f(x), который определяет умножение в G, если f(x) и α не есть параметры, общие всем адресатам. Секретный ключ для В есть число a = 2.

Шифрование. Адресат А шифрует свой текст t и отправляет шифротекст адресату В. Адресат А должен выполнить следующее.

1. Представляет свой текст t = FAD как элемент m1 группы G. Чтобы зашифровать письмо t, адресат А кодирует текст t каким – либо способом, например, в 27 – ричной системе счисления 10 – ричным числом

u = 6 * 272 + 1 * 27 + 4 = 1407910 , а затем вычисляет 35 – ричное представление числа u в виде сообщения m1 = (6 1 4)35 , рассматриваемом как полином 6х2 + 1х + 4 из 35 [х].

2. Получить открытый ключ (α = (0 1 5), y = (1 10 25)) адресата В.

3. Выбрать случайное целое число k = 1575, 1 ≤ kn – 1.

4. Вычислить γ = αk = (х + 5)1575 (mod f(x)) = 5х2 + 25х + 23 = (5 25 23),

yk = (х2 + 10х + 25)1575 (mod f(x)) = 15х2 + 25х + 24=(15 25 24) δ = m1 · yk = (11 17 9) · (15 25 24) = (11х2 + 17х + 9) (15х2 + 25х + 24)

(mod f(x)) = 19х2 + 33х + 26 = (19 33 26).

5. Отправить свой шифротекст c = (γ =(5 25 23), δ =(19 33 26)) адресату В.

Дешифрование. Чтобы получить исходный текст t по c = (γ, δ), адресат В должен выполнить следующее.

  1. Пользуясь своим секретным ключом a, адресат В вычисляет следующие элементы группы

γ a = (5 25 23)2 = (5х2 + 25х + 23)2 (mod f(x)) = 15х2 + 25х + 24 = (15 25 24),

γ – a = (γ a ) – 1 = (15 25 24)– 1 = (15х2 + 25х + 24) – 1 (mod f(x)) = (7 6 11) .

  1. Вычислить m1 = (γ – a · δ) = (7 6 11) (19 33 26) (mod f(x)) =

= (7х2 + 6х + 11) (19х2 + 33х + 26) (mod f(x)) = 11х2 + 17х + 9 = (11 17 9).

  1. Чтобы получить текст t по элементу m, адресат В производит следующие вычисления.

m1 = (11 17 9)35 = 11*352 + 17*32 + 9 = 1407910 = (19 8 12)27 , откуда текст

t = FAD.

Программный код:

См. Приложение

Вычисление ключей.

1. f(x) := (23 0 0 6)

2.

3. a := 2

4.

5. (α = (0 1 5), y = (1 10 25))

Шифрование.

1.

2. (α = (0 1 5), y = (1 10 25))

3.

4.

5. c = (γ = (5 25 23), δ = (19 33 26))

Дешифрование.

1.

=

2.

3.

Задача 28.21.

Вычислить и проверить подпись под сообщением с помощью (обобщенной) криптосистемы ЭльГамаля для электронной подписи над (конечным) полем Галуа GF(pm). Взять простое число р = 31, натуральное

m = 3. Неприводимый полином над р взять из задачи 27. В качестве исходного текста взять слова своего полного имени: фамилия, имя, отчество.

23х3 + 6, р = 31, m = 3, t = FMA.

Решение:

Схема электронной цифровой подписи ЭльГамаля, основанная на мультипликативной группе *р , может быть обобщена на любую конечную абелеву группу G. Алгоритм подписи использует криптографическую хэш – функцию h: {0, 1}*→ n , где n есть число элементов в G. Предполагается, что каждый элемент r из G может быть представлен в бинарной записи f(r) c тем, чтобы можно было вычислить значение хэш – функции h(f(r)).

Алгоритм вычисления хэш – функции публикуется.

Криптографическая стойкость подписи основана на трудной осуществимости проблемы нахождения дискретного логарифма в группе G большого порядка.

При использовании схемы цифровой подписи ЭльГамаля по тексту письма t вычисляется значение хэш – функции h(t), которое затем используется при вычислении и проверке цифровой подписи под текстом письма.

Вычисление ключей. Каждый адресат создает свой открытый ключ и ему соответствующий секретный ключ. Далее адресат должен выполнить следующее.

1. Выбрать подходящую (мультипликативную) циклическую группу G порядка n.

2. Найти генератор α группы G.

3. Выбрать случайное целое число a, 1 ≤ a n – 1.

4. Вычислить элемент y = αa группы G.

5. Открытый ключ адресата есть пара чисел (α, y) элементов группы G. Открыто также описание умножения элементов в G. Секретный ключ адресата есть число a.

Вычисление подписи. Адресат А подписывает свой текст t (произвольной длины). Любой адресат B может проверить подпись адресата A под его текстом t. Адресат A должен выполнить следующее.

  1. Вычислить значение хэш – функции h(t).

2. Выбрать случайное секретное целое число k из [1, n – 1], для которого нод(k, n) = 1.

3. Вычислить целое число k – 1 (mod (n)).

4. Вычислить элемент r = αk группы G.

5. Вычислить значение хэш – функции h(r).

6. Вычислить число m = k – 1 (h(t) ar(r)) (mod (n)).

7. Подпись адресата А под его текстом t есть пара (r, m).

Проверка подписи. Чтобы проверить подпись (r, m) адресата A под его текстом t, адресат B должен выполнить следующее.

  1. Вычислить значение хэш – функции h(t).

  2. Получить открытый ключ (α, y) для адресата А.

  3. Вычислить значение хэш – функции h(r).

  4. Вычислить в группе G элементы: v1 = yh(r) rm, v2 = αh(t).

  5. Принять подпись, если v1 = v2 и опровергнуть в противном случае.

Схема электронной (цифровой) подписи ЭльГамаля с мультипликативной группой конечного поля |Fpm , р = 31, m = 3. Пусть для удобства элемент поля а2 х2 + а1 х + а0 представляется р – ричной стрингом (а2 а1 а0).

Адресат А подписывает свой текст t = FMA. Любой адресат В может проверить подпись А.

Вычисление ключей. Адресат А выполняет следующее.

1. Выбирает мультипликативную группу G = 313 – {0} конечного поля (313 , {+, }), элементы которого представляются полиномами из 31 [х] над 31 степени меньше 3 и умножение в котором выполняется по модулю неприводимого полинома f(x) = (23 0 0, 6) = 23х3 + 6 из 31 [х]. Группа G имеет порядок n = pm – 1 = 313 – 1 = 29790.

2. Находит генератор α = х + 5 = (0 1 5) группы G.

3. Выбрать случайное целое число a = 2, 1 ≤ a n – 1.

4. Вычислить элемент y = αa (mod f(x)) = (х + 5)2 (mod f(x)) = х2 + 10х + 25 = (1 10 25) группы G.

5. Открытый ключ адресата для А есть пара чисел (α = (0 1 5),

y = (1 10 25)) вместе с полиномом f(x), который определяет умножение в G, если f(x) и α не есть параметры, общие всем адресатам). Секретный ключ для А есть число a = 2.

Вычисление подписи. Адресат А подписывает свой текст t. Адресат А выполняет следующее.

  1. Вычисляет значение хэш – функции h(t). Пусть для примера h(t) =1550.

2. Выбрать случайное секретное целое число k = 1579 из [1, n – 1], такое, что нод(k, n) = 1.

3. Вычисляет целое число k – 1 (mod (n)) = 1579 – 1 (mod 29790) = 5869.

4. Вычисляет в группе G элемент r = αk = (0 1 5)1579 = (х + 5)1579 (mod f(x)) = (3 21 18).

5. Вычисляет значение хэш – функции h(r), например, следующим образом. По r = (3 21 18) вычисляет в n 10-ричное число (3 21 18)31 = 3х2 + 21х + 18 = 3*312 + 21*31 + 18 = 355210. Пусть для примера h(r) = 355210.

6. Вычисляет в n число m = k – 1 (h(t) ah(r)) (mod (n)) = 1579 – 1 · (1550 – - 2*3552) (mod (n)) = 23624.

7. Подпись адресата А под его текстом t есть пара(r=(3 21 18), m=2362410).

Проверка подписи. Чтобы проверить подпись (r, m) адресата A под его текстом t, адресат B выполняет следующее.

1. Вычислить значение хэш – функции h(t). Если текст t не изменялся, то h(t) = 155010 .

2. Получить открытый ключ (α = (0 1 5), y = (1 10 25)) адресата А.

3. Вычислить значение хэш – функции h(r). Если вектор r не менялся, то h(r) = 355210.

  1. Вычислить в группе G элементы:

v1 = yh(r) rm = (1 10 25)3552 (3 21 18)23624 =(х2 + 10х +25)3552 · (3х2 + 21х + 18)23624 (mod (f(x))) = (21 8 12),

v2 = αh(t) = (0 1 5)1550 = (x + 5)1550 (mod (f(x))) = (21 8 12).

  1. Так как v1 = v2 , то В принимает подпись адресата А.

Программный код:

См. Приложение

Вычисление ключей.

1. f(x) = (23 0 0 6)

2.

3.

4.

5. α = (0 1 5), y = (1 10 25)

Вычисление подписи.

1. h1 := 1550

2. n := 29790

3. = 5869

4.

5.

6.

m = 23624

7. r = (3 21 18), m = 23624

Проверка подписи.

1. h1 := 1550

2. (α = (0 1 5), y = (1 10 25))

3. h2 = 3552

4.

=

5. v1 = v2

Задача 29.21.

Вычислить и проверить подпись под сообщением с помощью криптосистемы DSA (Digital Signature Algorithm) для электронной подписи. Простые числа p и q определяются вариантом задания. В качестве исходного текста взять слова своего полного имени: фамилия, имя, отчество.

р = 490663, q = 27259, t = FMA

Вычисление ключей. Каждый адресат создает свой открытый ключ и ему соответствующий секретный ключ. Адресат должен выполнить следующее.

  1. Выбрать простое число q, 2159 < q < 2160 .

  2. Выбрать число t, 0 ≤ t ≤ 8, и простое число р, 2511 + 64 t < p < 2512 + 64 t такое, что q делит p – 1.

  3. Найти генератор α *р для циклической подгруппы порядка q в группе *р . Для этого адресат должен выполнить следующее.

    1. Выбрать элемент g *р и найти α = g(p – 1)/q (mod p).

    2. Если α = 1, то перейти к шагу 3.1 с другим g.

  4. Выбрать произвольное число а, 1 ≤ а ≤ q – 1.

  5. Вычислить y = α a (mod p).

  6. Открытый ключ адресата есть (p, q, α, y); секретный ключ адресата есть число а.

Вычисление подписи. Адресат А подписывает свой текст t (произвольной длины). Любой адресат В может проверить подпись А под текстом t с помощью открытого ключа адресата А. Адресат А выполняет следующее.

  1. Вычисляет значение хэш – функции h(t).

  2. Выбрать произвольное секретное число k, 0 < k < q.

  3. Вычислить k – 1 (mod q).

  4. Вычислить r = (αk (mod p)) (mod q).

  5. Вычислить s = k – 1 (h(t) + ar) (mod q).

  6. Подпись адресата А есть пара чисел (r, s).

Проверка подписи. Чтобы проверить подпись (r, s) адресата А под его текстом t, адресат В должен выполнить следующее.

  1. Вычислить значение хэш – функции h(t).

  2. Взять открытый ключ (p, q, α, y) адресата А.

  3. Проверить, что 0 < r < q и 0 < s < q. Если нет, то отвергнуть подпись.

  4. Вычислить w = s – 1 (mod q) и h(m).

  5. Вычислить u1 = w · h(m) (mod q) и u2 = r w (mod q).

  6. Вычислить v = (α u1 y u2 (mod p)) (mod q).

  7. Принять подпись, если v = r и отвергнуть в противном случае.

Решение:

Адресат А подписывает свой текст t и всякий адресат В может проверить подпись А.

Вычисление ключей. Адресат должен выполнить следующее.

1. Выбрать простое число q = 27259.

  1. Выбрать простое число р = 490663, для которого q делит (p – 1). Пусть (p – 1)/ q = 18.

  2. Выбрает случайное число g=2575*р и вычисляет α = g(p – 1)/q (mod p) = = 257518 (mod 490663) = 459706. Так как α ≠ 1, то α есть генератор для единственной циклической подгруппы порядка q в группе *р . (Если α = 1, то следует выбрать другое g).

  3. Выбрать случайное число а = 75 [1, q – 1].

  4. Вычислить y = α a (mod p) = 45970675 (mod 490663) = 169635.

  5. Открытый ключ адресата есть (p = 490663, q = 27259, α = 459706,

y = 169635); секретный ключ адресата А есть число а = 75.

Вычисление подписи. Чтобы подписать свой текст t (произвольной длины), адресат А делает следующее.

  1. Вычисляет значение хэш – функции h(t). Пусть для примера h(t) =1557.

  2. Выбирает случайное секретное число k = 57[0, q].

  3. Вычисляет k – 1 (mod q) = 16738.

  4. Вычисляет r = (αk (mod p)) (mod q) = (45970657 (mod 490663))

(mod 27259) = 25077.

  1. Вычисляет s = k – 1 (h(t) + ar) (mod q) = 16738 (1557 + 75 25077)

(mod 27259) = 2895.

  1. Подпись адресата А под его текстом t есть пара чисел (r = 25077,

s = 2895).

Проверка подписи. Чтобы проверить подпись (r = 25077, s = 2895)

адресата А под его текстом t, адресат В должен выполнить следующее.

  1. Вычисляет значение хэш – функции h(t). Если текст t не изменялся, то

h(t) = 1557.

  1. Берет открытый ключ адресата А: (p = 490663, q = 27259, α = 459706,

y = 169635).

  1. Проверяет, что r = 25077 [0, q] = [0, 27259] и s = 2895 [0, q] =

= [0, 27259]. Если проверка не проходит, то подпись отвергнут.

  1. Вычисляет w = s – 1 (mod q) = 25244.

  2. Вычисляет u1 = w · h(t) (mod q) = 25244 1557(mod 27259) = 24689,

u2 = r w (mod q) = 25077 25244(mod 27259) = 8031.

  1. Вычисляет v = (α u1 y u2 (mod p)) (mod q) = (45970624689 1696358031

(mod 490663))(mod 27259) = 25077.

  1. Так как v = 25077 = r , то В принимает подпись А.

Для криптографической стойкости рекомендуется брать q длиной 160 бит, размер р при любом кратном 64 лежит между 512 (лучше 768) и 1024 бит включительно.

Текст программы:

См. Приложение

Вычисление ключей.

1.

2.

3.

4.

5.

6. (p = 490663, q = 27259, α = 459706, y = 169635)

Вычисление подписи.

1. h(t) := 1557

2.

3.

4.

5.

6. (r = 25077, s = 2895)

Проверка подписи.

1. h(t) := 1557

2. (p = 490663, q = 27259, α = 459706, y = 169635)

3. r = 25077[0, q] s = 2895[0, q]

4.

5.

6.

7. v = 25077 r = 25077

Московский энергетический институт

(технический университет)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]