ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.06.2021

Просмотров: 3572

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Криптографическая

 

система

 RSA     

371

 

Широко

 

известным

 

примером

 

криптосистемы

 

с

 

открытым

 

ключом

 

является

 

крипто

-

система

 

RSA

разработанная

 

в

 1977 

году

 

и

 

получившая

 

название

 

в

 

честь

 

ее

 

создателей

Ривеста

Шамира

 

и

 

Эйдельмана

Стойкость

 

этой

 

системы

 

основывается

 

на

 

сложности

 

обратимости

 

степенной

 

функции

 

в

 

кольце

 

вычетов

 

целых

 

чисел

 

по

 

составному

 

модулю

 

n

 

(

при

 

надлежащем

 

выборе

 

модуля

). 

Необходимые

 

сведения

 

из

 

элементарной

 

теории

 

чисел

 

1.

 

Простым

 

числом

 

называется

 

натуральное

 

число

имеющее

 

только

 

два

 

неравных

 

на

-

туральных

 

делителя

2.

 

Каждое

 

натуральное

 

число

 

единственным

 

образом

с

 

точностью

 

до

 

порядка

 

записи

 

сомножителей

представляется

 

в

 

виде

 

произведения

 

степеней

 

простых

 

чисел

3.

 

Наибольшим

 

общим

 

делителем

 

двух

 

целых

 

чисел

 

НОД

(a,b)

 (

или

 

(a,b)

называется

 

наибольшее

 

целое

на

 

которое

 

без

 

остатка

 

делится

 

как

 

a

,

 

так

 

и

 

b

4.

 

Пусть

 

a > b

 

и

 

d = (a,b)

.

 

Тогда

 

существуют

 

целые

 

x

 

и

 

у

являющиеся

 

решением

 

уравнения

 

xa + yb = d

Если

 

d = 1

то

 

a

 

и

 

b

 

называются

 

взаимно

 

простыми

5.

 

Наибольший

 

общий

 

делитель

 

двух

 

чисел

 

можно

 

найти

 

с

 

помощью

 

алгоритма

 

Эвкли

-

да

Для

 

этого

 

a

 

делится

 

с

 

остатком

 

на

 

b

т

.

е

а

 = q

1

b + r

1

Далее

 

вместо

 

a

 

и

 

b

рас

-

сматриваем

 

соответственно

 

b

 

и

 

r

1

b = q

2

r

1

+ r

2

На

 

следующем

 

шаге

 

роль

 

b

 

и

 

r

1

играют

 

r

1

 

и

 

r

2

r

1

 = q

3

r

2

 + r

3

 

и

 

т

.

д

Процесс

 

заканчивается

 

на

 

некотором

 

шаге

 

k+1

для

 

которого

 

r

k+1

= 0

Тогда

 

НОД

(a,b) = r

k

Рассмотрим

 

пример

Найти

 

НОД

(1547, 560) 

1547 = 2 

х

 560 + 427 

560 = 1 

х

 427 + 133 

427 = 3 

х

 133 + 28 

133 = 4 

х

 28 + 21 

28 = 1 

х

 21 + 7 

21 = 3 

х

 7 + 0  

НОД

(1547,560)=7 

6.

 

Для

 

решения

 

уравнения

 

xa + yb = d

 

можно

 

использовать

 

данные

полученные

 

в

 

ка

-

ждом

 

шаге

 

алгоритма

 

Эвклида

двигаясь

 

снизу

 

вверх

с

 

помощью

 

выражения

 

остатка

 

через

 

другие

 

элементы

используемые

 

в

 

соответствующем

 

шаге

Например

из

 

r

2

 = 

q

4

r

3

 + r

4

 

следует

 

r

4

 = r

2

 +q

4

r

3

В

 

последнем

 

равенстве

 

r

3

 

можно

 

заменить

исходя

 

из

 

соотношения

 

r

1

 = q

3

r

2

 + r

3

т

.

е

r

4

 = r

2

 – q

4

(q

3

r

2

 – r

1

)

Поэтому

 

r

4

 = (1 – q

4

q

3

)r

2

 

+ q

4

r

1

Таким

 

образом

мы

 

выразили

 

r

4

 

в

 

виде

 

целочисленной

 

комбинации

 

остатков

 

с

 

меньшими

 

номерами

которые

в

 

свою

 

очередь

могут

 

быть

 

выражены

 

аналогич

-

но

Продвигаясь

  “

снизу

 

вверх

”, 

в

 

конце

 

концов

мы

 

выразим

 

r

4

 

через

 

исходные

 

числа

 

a

 

и

 

b

Если

 

бы

 

мы

 

начали

 

не

 

с

 

r

4

а

 

с

 

r

k

то

 

получили

 

бы

 

r

k

 

= xa + yb = d

Рассмотрим

 

пример

.

 

Решить

 1547

х

 + 560y = 7 


background image

372

     

Глава

 18. 

Криптографическая

 

защита

 

 

7 = 28 – 1 

х

 

21 = 28 – 1

 

х

 (133 — 4 

х

 28) = 5 

х

 

28 - 1 

х

 

1

ЗЗ

 = 

= 5 

х

 

(427 - 3 

х

 

133) — 1 

х

 

13

З

 = 5 

х

 

427 – 16 

х

 

(560 - 1 

х

 

427)= 

= 21 

х

 

427 - 16 

х

 

560 = 21 

х

 

(1547 - 2 

х

 

560) - 16 

х

 

560 =  

= 21 

х

 547 - 58 

х

 560 

Решение

: x = 21, y = -58 

7.

 

Число

 

a

 

сравнимо

 

с

 

числом

 

b

 

по

 

модулю

 

n

,

 

если

 

a – b

 

делится

 

на

 

n

Запись

 

дан

-

ного

 

утверждения

 

имеет

 

следующий

 

вид

а

 = b(mod n)

Наименьшее

 

неотрица

-

тельное

 

число

 

а

такое

что

 

а

 = A(mod n)

 

называется

 

вычетом

 

числа

 

A

 

по

 

моду

-

лю

 

n

Если

 

(a,n) = 1

то

 

существует

 

x

такое

что

 

x = a

-1

 (mod n)

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

(a,n) = 1 = d = ax + ny

поэтому

 

ax = 1(mod n)

Такое

 

число

 

x

 

назы

-

вается

 

обратным

 

к

 

а

 

по

 

модулю

 

n

 

и

 

записывается

 

в

 

виде

 

a

-1

 (mod n)

8.

 

Пусть

 

функция

 

ϕ

(n)

где

 

n

 — 

натуральное

 

число

равна

 

количеству

 

натуральных

 

чи

-

сел

меньших

 

n

,

 

для

 

которых

 

(

а

,n)=1

Такая

 

функция

 

называется

 

функцией

 

Эйлера

Для

 

чисел

 

n

 

вида

 

n = 

  i

П

p

i

 (

p

i

 — 

простое

функция

 

Эйлера

 

определяется

 

как

 

φ

(n) = 

  i

П

(p

i – 1)

9.

 

Теорема

 

Эйлера

Пусть

 

(

а

,n) = 1

Тогда

 

a

φ

(n)

 = 1(mod n)

.  

Следствие

Если

 

ed = 1(mod 

φ

(n))

 

и

 

(a, n) = 1

то

 

(

а

e

)

d

 = 

а

(mod n)

10.

 

Для

 

большинства

 

вычетов

 

по

 

модулю

 

n = pq

 

показатель

 

степени

 

в

 

соотношении

 

a

φ

(n)

 

= 1(mod n) 

может

 

быть

 

уменьшен

но

 

в

 

этом

 

случае

 

он

 

зависит

 

от

 

a

Наименьший

 

показатель

 

k(a)

,

 

для

 

которого

 

a

k(a)

 = 1(mod n)

называется

 

порядком

 

числа

 

a

 

по

 

мо

-

дулю

 

n

 

и

 

обозначается

 

как

 

о

rd

n

(a)

Для

 

любого

 

a

 

значение

 

о

rd

n

(a)

 

является

 

делите

-

лем

 

значения

 

функции

 

Эйлера

 

φ

(n)

Алгоритм

 RSA 

Криптосистема

 RSA 

на

 

каждом

 

такте

 

шифрования

 

преобразует

 

двоичный

 

блок

 

от

-

крытого

 

текста

 

m

 

длины

 

size(n)

рассматриваемый

 

как

 

целое

 

число

в

 

соответствии

 

с

 

формулой

c = m

e

(mod n)

При

 

этом

 

n = pq

,

 

где

 

p

 

и

 

q

 — 

случайные

 

простые

 

числа

 

большой

 

разрядности

кото

-

рые

 

уничтожаются

 

после

 

формирования

 

модуля

 

и

 

ключей

Открытый

 

ключ

 

состоит

 

из

 

пары

 

чисел

 

e

 

и

 

n

.

 

Подключ

 

e

 

выбирается

 

как

 

достаточно

 

большое

 

число

 

из

 

диапазона

 

< e < 

φ

(n)

с

 

условием

НОД

(e, 

ϕ

(n)) = 1

где

 

ϕ

(n)

 — 

наименьшее

 

общее

 

кратное

 

чи

-

сел

 

p–1

 

и

 

q–1

.

 

Далее

решая

 

в

 

целых

 

числах

 

x

y

 

уравнение

 

xe + y

φ

(n) = 1

полагается

 

d = 

х

т

.

е

ed = 1(

ϕ

(n))

При

 

этом

 

для

 

всех

 

m

 

выполняется

 

соотношение

 

m

ed

 = m(n)

,

 

поэтому

 

знание

 

d

 

позволяет

 

расшифровывать

 

криптограммы

Чтобы

 

гарантировать

 

надежную

 

защиту

 

информации

к

 

системам

 

с

 

открытым

 

клю

-

чом

 

предъявляются

 

два

 

следующих

 

требования

1.

 

Преобразование

 

исходного

 

текста

 

должно

 

исключать

 

его

 

восстановление

 

на

 

основе

 

открытого

 

ключа


background image

Криптографическая

 

система

 RSA     

373

 

2.

 

Определение

 

закрытого

 

ключа

 

на

 

основе

 

открытого

 

также

 

должно

 

быть

 

вычисли

-

тельно

 

нереализуемым

При

 

этом

 

желательна

 

точная

 

нижняя

 

оценка

 

сложности

 (

ко

-

личества

 

операций

раскрытия

 

шифра

Алгоритмы

 

шифрования

 

с

 

открытым

 

ключом

 

получили

 

широкое

 

распространение

 

в

 

современных

 

информационных

 

системах

Рассмотрим

 

построение

 

криптосистемы

 RSA 

на

 

простом

 

примере

1.

 

Выберем

 

p = 3

 

и

 

q = 11

2.

 

Определим

 

n = 3 · 11 = 33

3.

 

Найдем

 

ϕ

(n) = (p – 1)(q – 1) = 20

4.

 

Выберем

 

e

взаимно

 

простое

 

с

 

20

например

e = 7

5.

 

Выберем

 

число

 

d

удовлетворяющее

 

7d = 1(m

о

d 20)

Легко

 

увидеть

что

 

d = 3(m

о

d 20)

Представим

 

шифруемое

 

сообщение

 

как

 

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

 

целых

 

чисел

 

с

 

помощью

 

соответствия

А

 = 1

B = 2

С

 = 3

, ..., 

Z = 26

Поскольку

 

size(n) = 6

,

 

то

 

наша

 

криптоси

-

стема

 

в

 

состоянии

 

зашифровывать

 

буквы

 

латинского

 

алфавита

рассматриваемые

 

как

 

блоки

Опубликуем

 

открытый

 

ключ

 

(e, n) = (7, 33)

 

и

 

предложим

 

прочим

 

участникам

 

системы

 

секретной

 

связи

 

зашифровывать

 

с

 

его

 

помощью

 

сообщения

направляемые

 

в

 

наш

 

адрес

.

 

Пусть

 

таким

 

сообщением

 

будет

 

CAB

,

 

которое

 

в

 

выбранном

 

нами

 

кодировке

 

принимает

 

вид

 

(3, 1, 2)

.

 

Отправитель

 

должен

 

зашифровать

 

каждый

 

блок

 

и

 

отправить

 

зашифрованное

 

сообщение

 

в

 

наш

 

адрес

RSA(C) = RSA(3) = 3

7

 = 2187 = 9(mod 33); 

RSA(A) = RSA(1) = 1

7

 = 1(mod 33); 

RSA(B) = RSA(1) = 2

7

 = 128 = 29(mod 33). 

Получив

 

зашифрованное

 

сообщение

 

(9, 1, 29)

мы

 

сможем

 

его

 

расшифровать

 

на

 

ос

-

нове

 

секретного

 

ключа

 

(d, n) = (3, 33)

возводя

 

каждый

 

блок

 

в

 

степень

 

d = 3

9

3

 = 729 = 3(m

о

d 33);  

1

3

 = 1(m

о

d 33); 

29

3

 = 24389 = 2(m

о

d 33). 

Для

 

нашего

 

примера

 

легко

 

найти

 

секретный

 

ключ

 

перебором

На

 

практике

 

это

 

невоз

-

можно

т

.

к

для

 

использования

 

на

 

практике

 

рекомендуются

 

в

 

настоящее

 

время

 

следую

-

щие

 

значения

 

size(n)

:

 

 

512–768 

бит

 — 

для

 

частных

 

лиц

 

1024 

бит

 — 

для

 

коммерческой

 

информации

 

2048 

бит

 — 

для

 

секретной

 

информации

Пример

 

реализации

 

алгоритма

 RSA 

представлен

 

в

 

листингах

 18.1 

и

 18.2 (

компилято

-

ры

 — Delphi, FreePascal). 


background image

374

     

Глава

 18. 

Криптографическая

 

защита

 

 

Листинг

 18.1.

 

Пример

 

реализации

 

алгоритма

 RSA 

на

 

языке

 Pascal 

program Rsa; 
{$APPTYPE CONSOLE} 
{$IFDEF FPC} 
 {$MODE DELPHI} 
{$ENDIF} 
 
uses SysUtils, uBigNumber; 
 
//

Генератор

 

случайных

 

чисел

  

var t: array[0..255] of Byte; 
var pos: Integer; 
var cbox: array[0..255] of Byte = 
(237, 240, 161, 1, 130, 141, 205, 98, 27, 169, 181, 202, 173, 
47, 114, 224, 35, 183, 79, 82, 153, 220, 172, 22, 17, 11, 200, 
131, 14, 154, 167, 91, 250, 31, 213, 112, 126, 241, 236, 155, 
198, 96, 87, 143, 244, 151, 134, 38, 129, 233, 186, 101, 41, 
94, 231, 115, 113, 199, 51, 145, 229, 37, 69, 180, 85, 33, 207, 
163, 102, 187, 4, 89, 7, 44, 75, 88, 81, 120, 10, 232, 221, 
168, 230, 158, 247, 211, 216, 156, 95, 64, 242, 215, 77, 165, 
122, 5, 15, 119, 100, 43, 34, 48, 30, 39, 195, 222, 184, 92, 
78, 135, 103, 166, 147, 32, 60, 185, 26, 251, 214, 90, 139, 45, 
73, 150, 97, 116, 136, 68, 219, 248, 191, 192, 16, 8, 243, 50, 
132, 105, 62, 201, 204, 65, 0, 99, 182, 121, 194, 108, 160, 
170, 56, 226, 206, 254, 117, 178, 9, 197, 234, 127, 58, 171, 
40, 29, 177, 142, 3, 228, 188, 162, 212, 157, 49, 175, 174, 
140, 70, 106, 123, 66, 196, 246, 179, 42, 218, 71, 217, 227, 
18, 164, 24, 67, 159, 25, 111, 255, 193, 245, 2, 238, 133, 21, 
137, 152, 109, 148, 63, 124, 203, 104, 54, 55, 223, 80, 107, 
210, 225, 149, 252, 76, 12, 189, 93, 46, 23, 13, 36, 209, 61, 
249, 110, 144, 86, 52, 253, 72, 28, 53, 57, 125, 59, 235, 84, 
128, 208, 146, 20, 74, 6, 239, 190, 83, 19, 138, 118, 176); 
 
procedure InicMyRandom; 
var i: Integer; 
var s: string; 
begin 
 WriteLn('

Введите

 

какой

-

либо

 

текст

 

для

 

инициализации

 

генератора

  

          

случайных

 

чисел

 (

до

 256 

символов

):'); 

 ReadLn(s); 
 i := 1; 
 while (i<=255) and (i<=Length(s)) do 


background image

Криптографическая

 

система

 RSA     

375

 

Продолжение

 

листинга

 18.1

 

 begin 
  t[i] := Ord(s[i]); 
  Inc(i); 
 end; 
 pos := 0; 
 WriteLn('OK'); 
 WriteLn; 
end; 
 
function MyRandom: Cardinal; 
var i: Integer; 
var l: Cardinal; 
begin 
 if (pos = 0) then 
 begin 
  for i := 1 to 255 do     t[i] := cbox[(t[i-1]+t[i]) and 255]; 
  for i := 254 downto 0 do t[i] := cbox[(t[i]+t[i+1]) and 255]; 
 end; 
 l := 0; 
 for i := 0 to 3 do l := l shl 8 + Cardinal(t[pos+i]); 
 Result := l; 
 pos := (pos+4) and 255; 
end; 
 
//------------------------------------------------------------- 
//

Главная

 

программа

 

var i,j: Integer; 
var maxbit: Integer; 
var none,ntwo: TBigNum; 
var n1,n2: TBigNum; 
var p,q,z: TBigNum; 
var n,e,d: TBigNum; 
var s1,s2: string; 
 
begin 
 WriteLn; 
 InicMyRandom(); 
 repeat 
  Write('

Введите

 

максимальный

 

размер

 

простых

 

чисел

 (p 

и

 q) 

в

  

         

битах

 (8-257): '); 

  ReadLn(maxbit);