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

 

x5∙= x10

= x

 

 

 

x

 

 

 

∙6

11

 

 

 

x

= x

 

∙

 

∙7

12

∙x

=

x13

 

3

x8

 

 

∙x2

 

 

 

 

x∙0 ∙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 bm−1 и n > b1 + b2 + K + bm . Такая последовательность называется быстрорастущей. На ее основе

построим

несекретную

(открытую)

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

a = { a1,a2 K am} ,

где

ai = (w×bi )modn

. Сообщение

T0

= { x1

, x2 K xm}

,

 

 

 

 

 

 

 

37

являющееся

набором

нулей

 

и единиц,

шифруется

по

 

правилу

Tа =x

 

 

a +x

 

 

+ Ka +x

 

 

 

m

 

 

 

 

 

 

 

 

 

1

2 2

 

m

m

=a x

 

i

 

 

 

 

 

 

 

ш

1

 

 

 

å i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i=1

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

вычисляет w−1mod n и находит

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

 

 

m

 

m

 

 

 

 

 

 

 

 

 

w−1 ×Tш = å(w−1ai )xi = å(w−1w)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 и xm−1 = 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 из условия (w−1 ´w)mod n = 1. Для w = 3 это w−1 = 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.

1´x + 2 ´x

+ 4´x

+ 8´x

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

 

1

2

3

 

4

 

5

.

 

 

 

 

 

 

 

Ь – 28.

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

 

 

 

 

 

 

 

 

1´x + 2 ´x

+ 4´x

 

+ 8´x

4

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

 

1

2

3

 

5

.

 

 

 

 

 

 

 

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

40

1´x + 2 ´x

+ 4 ´x + 8´x

+16´xЛ= 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