Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы криптологии. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
11.08.2026
Размер:
570 Кб
Скачать

 

x5= x10

= x

 

 

 

x

 

 

 

6

11

 

 

 

x

= x

 

 

7

12

x

=

x13

 

3

x8

 

 

x2

 

 

 

 

x0 x1

Рис. 5.1. ρ -алгоритм

6.АТАКА ВИНЕРА НА RSA

Валгоритме RSA для ускорения процесса расшифрования необходимо использовать небольшие расшифровывающие

экспоненты (секретные ключи) kc . Однако слишком малый секретный ключ использовать нельзя, так как его можно определить простым

перебором. Кроме того, при малых kc применима атака Винера,

основанная на цепных дробях. Пусть

α1

 

положительное

 

 

действительное

число. Положим

q1 = [α1 ]

− целая

часть

α1 , тогда

α = q + (α − q ) = q +

1

 

= q +

 

1

,

 

 

 

 

 

 

1

 

1

 

 

 

 

 

 

 

 

 

1

1

1

1

1

1

α

 

 

 

α2

=

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

α1 q1

 

 

 

 

 

где

α1

q1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

положительное действительное число. Положим q2 = [α2 ] , тогда

34

α = q + (α − q ) = q +

 

 

1

 

 

 

= q +

1

,

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

2

 

 

2

 

2

 

 

2

2

 

 

 

 

 

 

 

 

 

2

α3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

α2 q2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

α3

=

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

α2

q2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

 

и т. д.;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

α

 

= q +

1

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

αi+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qi

= [αi ] ,αi+1

=

 

 

1

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

αi qi

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Окончательно имеем:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

α1 = q1 +

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

q2 +

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

q3

+ L

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qi +

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

αi qi .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Представление

числа α1

 

в

вышеуказанном виде

называется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

α = m

разложением его в цепную дробь. При рациональном

1

n цепная

дробь будет конечной, при иррациональном – бесконечной. Пусть имеем разложение числа α1 в цепную дробь.

δ

1

= q1

=

P1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выражение

1

 

Q1

называется первой подходящей дробью

 

 

числа α1 . Здесь P1 = q1,Q1 = 1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

δ

 

= q +

 

1

= q2 ×q1 +1

=

q2 ×P1 + P0

= P2

,

 

 

 

2

1

 

 

 

 

 

 

 

 

 

 

 

Выражение

 

 

 

 

q

 

q + 0

 

 

q ×Q + Q Q

где

 

 

 

 

 

 

2

2

 

 

2

1

0

2

 

 

 

 

 

 

 

 

 

 

P0 = 1,Q0 = 0, называется второй подходящей дробью.

35

δ

 

= q +

1

 

 

 

= q +

 

q3

 

 

=

q1q2q3 + q1 + q3

=

 

 

1

 

 

 

 

 

 

 

 

3

1

q2 +

1

q2q3 +1

 

q2q3 +1

 

 

 

 

q3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= q3 (q1q2 +1) + q1

=

 

 

q3P2 + P1

=

P3

 

 

 

 

 

q3q2 +1

 

q3Q2 + Q1

Q3

− третья подходящая дробь. При

этом P3 = q3P2

+ P1,Q3 = q3Q2 + Q1.

 

 

 

По аналогии имеем i – подходящая дробь.

 

 

 

 

 

 

 

 

 

 

 

 

δ

 

 

=

P

 

=

 

q P

+ P

2

,

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

i

 

 

 

 

1

i 1

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Q

 

 

q Q

+ Q

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

i

i 1

 

i

 

 

 

 

где

 

P = q P

+ P

,Q = q Q

+ Q

2 .

 

 

 

 

 

 

 

 

 

 

 

i

 

i i 1

 

i 2

i

i i 1

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Одним из важных свойств цепных дробей является тот факт, что

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

если несократимая дробь Q удовлетворяет неравенству

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

α

1

P

 

 

1

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Q

 

2Q2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

P

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

то

 

Q − одна из подходящей дробей числа α1 . Виннер предложил

использовать цепные дроби для атаки на RSA. Оказывается, что если

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

kc <

1 ×n4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

секретный ключ

 

3

 

 

(n –

модуль), то выполняется неравенство

 

 

 

 

 

k0

k

 

<

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

kc

 

 

2k02

и,

следовательно,

 

kc

 

 

 

 

подходящая

дробь для

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= 1+ kϕ(n) ),

рациональной дроби

n (здесь k0

− открытый ключ, k0kc

но тогда один из знаменателей подходящих дробей

36

 

 

Q = q Q

+ Q ,Q = 0,Q = 1,α = k0

,q = [α

]

, αi+1 =

1

 

 

 

 

 

 

αi qi

 

 

 

 

 

 

i

 

i

i 1

 

i 2

 

0

1

1

n

i

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

является секретным ключом kc .

 

 

 

 

 

 

 

 

 

 

 

 

 

Рассмотрим работу этого алгоритма на простом примере. Пусть

n

=

7387

=

 

×

 

k

0

= 2405

. Зная p,

q, можно

определить

k

c

= 3

.

 

 

83 89 и

 

 

 

 

Проверим, является ли один из знаменателей подходящих дробей секретным ключом:

k0 =

2405 = 0 +

1

= 0 +

 

1 .

n

7387

7387

 

3 +

172

 

 

 

 

2405

2405

 

 

На этом этапе Q2

= q2 ×Q1 + Q0 = 3×1+ 0 = 3 − секретный ключ.

Замечание: при

определении

секретного ключа kc каждый

знаменатель подходящей дроби Qi проверяется при расшифровании

известного сообщения T0 : Tc = T0k0 modn . Если TcQi modn = T0 , то Qi секретный ключ, иначе выбирается следующий знаменатель.

7. РЮКЗАЧНЫЙ МЕТОД ШИФРОВАНИЯ

Выберем пару натуральных взаимно простых чисел w, n и будем считать их секретными. Число w назовем множителем, n – модуль НОД(w,n)=1. Дополнительно выберем секретную последовательность

положительных чисел { b1,b2 ,K bm} = b − рюкзачный вектор, такую, что b2 > b1,b3 > b1 + b2 ,K bm > b1 + b2 + K bm1 и n > b1 + b2 + K + bm . Такая последовательность называется быстрорастущей. На ее основе

построим

несекретную

(открытую)

последовательность

a = { a1,a2 K am} ,

где

ai = (w×bi )modn

. Сообщение

T0

= { x1

, x2 K xm}

,

 

 

 

 

 

 

 

37

являющееся

набором

нулей

 

и единиц,

шифруется

по

 

правилу

=x

 

 

a +x

 

 

+ Ka +x

 

 

 

m

 

 

 

 

 

 

 

 

 

1

2 2

 

m

m

=a x

 

i

 

 

 

 

 

 

 

ш

1

 

 

 

å i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для нахождения открытого текста получатель по имеющемуся w

вычисляет w1mod n и находит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

m

 

m

 

 

 

 

 

 

 

 

 

w1 ×Tш = å(w1ai )xi = å(w1w)bi xi = åbi xi = S.

 

 

 

 

 

 

 

 

 

 

i=1

 

 

 

 

i=1

 

i=1

 

 

 

 

 

 

Так как получатель знает секретную последовательность b , то

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

ему

остается

 

только

решить

уравнение

åbi xi = S

относительно

 

i=1

 

неизвестных

 

x1, x2 K xm ,

т.

 

е.

найти открытый

текст

T0 .

Быстрорастущая последовательность чисел { b1,b2 K bm}

позволяет

легко осуществить это по следующему алгоритму: если

S ³ bm , то

x =1

,

иначе

 

(S < b ) x = 0

. Далее, если

S - b ³ b

 

x = 1,

m

 

 

 

m

 

m

 

m

m

1 , то

m 1

 

иначе

 

x

= 0.

В общем виде если

 

 

 

 

 

 

 

 

m 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S - å bj xj ³ bi ,

то xi = 1, иначе xi = 0.

 

 

 

 

 

 

 

 

 

 

j=i+1

 

 

 

 

 

 

 

 

Индекс i принимает значения m,m 1,K 2,1.

 

 

 

 

 

 

 

Этот

метод можно

пояснить

на простом

примере: если

из

рюкзака весом S можно достать груз весом bm , то xm = 1 (иначе xm = 0

), тогда вес рюкзака уменьшится и станет равным S - bm . Далее мы

пытаемся извлечь груз весом

b

. Если это удается сделать, то вес

m

1

рюкзака станет равным

S - b

- b

, т. е.

x

= 1.

В противном случае

m

m

1

m 1

 

38

он останется прежним S bm и xm1 = 0. Процесс продолжается до тех

пор, пока рюкзак не станет пустым (S = 0).

Для шифрования сообщения на русском языке будем использовать буквы алфавита, кроме буквы ё.

А Б В Г Д Е Ж З И Й К

Л М Н О П

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Р С Т У Ф Х Ц Ч Ш Щ Ъ

Ы

Ь Э Ю Я

16

17

18

19

20

21

22

23

24

25

26

27 28

29

30

31

 

Модуль n возьмем равным 32, множитель wНОД= 3(

 

(3,32) = 1),

буквы сообщения представляются 5-битовыми словами, из-за этого

буква ё не рассматривается. В качестве рюкзачного вектора b возьмем быстрорастущую последовательность {1,2,4,8,16} , которая

должна храниться в секрете. Используя

ее, находим координаты

открытого

(несекретного)

вектора

a = { a1,a2 ,a3

,a4

,a5}

по формуле

 

 

 

 

 

ai = (wbi )mod n :

 

 

 

 

 

 

 

 

 

 

a1 = (3×1)mod32 = 3,

a2 = (3×2)mod32 = 6 , a3 = (3×4)mod32 = 12;

 

 

a4 = (3×8)mod32 = 24 , a5 = (3×16)mod32 = 16.

 

 

 

 

 

 

В итоге a = { 3,6,12,24,16} .

 

 

 

 

 

 

 

 

 

 

 

 

 

TПЧЕЛА= {

}

 

 

 

 

 

Зашифруем

сообщение

0

 

 

.

Представим

буквы

 

 

 

сообщения

5-битовыми

словами, используя

нумерацию

букв

в алфавите:

П 15 = { 01111} ; Ч 23 =

{10111} ;

Е 5 = { 00101} ;

 

 

 

 

 

 

 

 

 

 

 

Л 11 = { 01011} ;

А 0 = { 00000} .

 

 

 

 

 

 

 

39

5

Tш = åai xi .

Шифруем сообщение:

i=1

 

П: (3×0 + 6×1+12×1+ 24×1+16 ×1)mod32 = 58mod32 = 26 Ъ ;

Ч: (3×1+ 6 ×0 +12 ×1+ 24 ×1+16 ×1)mod32 = 55mod32 = 23 Ч ;

Е: (3×0 + 6×0 +12×1+ 24×0 +16×1)mod32 = 28mod32 = 28 Ь;

Л: (3×0 + 6×1+12×0 + 24×1+16×1)mod32 = 46mod32 = 14 О ;

А: 0 А.

Витоге

Тш = { ЪЧЬОА} .

Расшифруем полученное сообщение: Tш . Для этого найдем

мультипликативную инверсию для w из условия (w1 ´w)mod n = 1. Для w = 3 это w1 = 11.

 

Ъ – 26.

(11×26)mod32 = 286mod32 = 30.

 

 

 

 

 

 

 

Первую букву открытого текста (5-битовое слово) находим из

решения уравнения:

 

 

 

 

 

1×x1 + 2 ×x2 + 4 ×x3 + 8 ×x4 +16 ×x5 = 30.

 

 

Согласно

алгоритму т. к. 30>16, то

x5

= 1.

Вычисляем

 

 

30 16 = 14 > 8,

тогда x4 = 1. Далее аналогично: 14 8 = 6 > 4 , x3 = 1;

6 4 = 2 = 2 , x2 = 1; 2 2 = 0 < 1, x1 = 0.

 

 

 

Получаем { 01111} = 15П. По аналогии:

Ч – 23. (11×23)mod32 = 253mod32 = 29.

x + 2 ´x

+ 4´x

+ 8´x

+16´= 29 Þ {10111} = 23 -

 

1

2

3

 

4

 

5

.

 

 

 

 

 

 

 

Ь – 28.

(11×28)mod32 = 308mod32 = 20.

 

 

 

 

 

 

 

 

x + 2 ´x

+ 4´x

 

+ 8´x

4

+16´= 20 Þ { 00101} = 5 -

 

1

2

3

 

5

.

 

 

 

 

 

 

 

О – 14. (11×14)mod32 = 154mod32 = 26.

40

x + 2 ´x

+ 4 ´x + 8´x

+16´= 26 Þ { 01011} =11-

 

1

2

3

4

5

.

 

 

 

 

 

А – 0. Þ { 00000} = 0 - А. Открытый текст ПЧЕЛА.

8.КРИПТОСИСТЕМА ЭЛЬ-ГАМАЛЯ

Воснову схемы Эль-Гамаля (1985 г.) положен алгоритм шифрования, базирующийся на трудности дискретного

логарифмирования, т. е. для amodx n = b при больших а, п невозможно решить обратную задачу: найти x = loga b . Для того чтобы получить пару ключей ko ,kc (асимметричная криптосистема), необходимо:

1)выбрать большие простые числа р, п ( p < n);

2)выбрать случайное число kc (kc < n) , которое является секретным ключом;

3)вычислить открытый ключ ko = pmodkc n ;

4)для шифрования сообщения T0 выбрать случайное целое число к: 0 < k < n, НОД(k,n 1) = 1;5

5)вычислить два числа а = pmodk n ,b = k0kT0mod n , которые являются шифротекстом Tш (a,b).

Для того чтобы расшифровать Tш , используя секретный ключ kc ,

находят отношение

 

 

 

 

 

 

 

 

æ

b

ömod n =

æ k0k

´T0

ömod n =

æ

pkkc ´T0

ömod n = T .

ç

 

ç

 

 

kc ¸

ç

p

kkc

¸

p

kkc

¸

0

è a

ø

è

 

ø

è

 

ø

 

41