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

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

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

Добавлен: 10.06.2021

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

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

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

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

 

система

 RSA     

391

 

Продолжение

 

листинга

 18.2

 

begin 
 for i := 0 to BIGNUM_DWORD do res[i] := 0; 
 for i := 0 to BIGNUM_DWORD do nzero[i] := 0; 
 for i := 0 to BIGNUM_DWORD do none[i] := 0; none[0] := 1; 
 BN_ab_GCD(a,b,n4); 
 if (BN_a_cmp_b(n4,none)<>0) then Exit; 
 Move(b,n1,sizeof(a)); 
 Move(a,n2,sizeof(a)); 
 Move(none,n7,sizeof(a)); 
 repeat 
  BN_a_div_b(n1,n2,n3); 
  BN_a_mod_b(n1,n2,n4); 
  Move(n2,n1,sizeof(n2)); 
  Move(n4,n2,sizeof(n2)); 
  BN_a_mul_b(n3,n7,n5); 
  BN_a_sub_b(res,n5,n6); 
  Move(n7,res,sizeof(n7)); 
  Move(n6,n7,sizeof(n6)); 
 until (BN_a_cmp_b(n4,nzero)=0); 
 if (res[BIGNUM_DWORD] and $80000000 <> 0) then 
 begin 
  BN_a_add_b(res,b,n7); 
  Move(n7,res,sizeof(n6)); 
 end; 
end; 

function BN_PrimeTest(var a: TBigNum): Integer; 
var i,j: Integer; 
var oldseed: LongInt; 
var nzero,none,nn: TBigNum; 
var n1,n2,n3,n4: TBigNum; 
begin 
 Result := 0; 
 for i := 0 to BIGNUM_DWORD do nzero[i] := 0; 
 for i := 0 to BIGNUM_DWORD do none[i] := 0; none[0] := 1; 
 for i := 0 to BIGNUM_DWORD do nn[i] := 0; nn[0] := 256; 
 if (BN_a_cmp_b(a,nzero)=0) then Exit;  
 if (BN_a_cmp_b(a,none)=0) then begin Result := 1; Exit; end;  
 if (BN_a_cmp_b(a,nn)<=0) then 
 begin 
  i := 0; 


background image

392

     

Глава

 18. 

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

 

защита

 

 

Продолжение

 

листинга

 18.2

 

  while (i<=53) and (Cardinal(primes[i])<>a[0]) do Inc(i); 
  if (i>53) then Exit;  
  Result := 1; 
  Exit;  
 end; 
 Move(nzero,n1,sizeof(nzero)); 
 i := 0; 
 n1[0] := primes[i]; 
 BN_a_mod_b(a,n1,n2); 
 while (i<=53) and (BN_a_cmp_b(n2,nzero)>0) do 
 begin 
  Inc(i); 
  if (i>53) then Break; 
  n1[0] := primes[i]; 
  BN_a_mod_b(a,n1,n2); 
 end; 
 if (i<=53) then Exit;  
 Move(nzero,n1,sizeof(nzero)); 
 BN_a_sub_b(a,none,n2); 
 i := 0; 
 n1[0] := primes[i]; 
 BN_a_exp_b_mod_c(n1,n2,a,n3); 
 BN_a_sub_b(n3,none,n4); 
 BN_a_mod_b(n4,a,n3); 
 while (i<=50) and (BN_a_cmp_b(n3,nzero)=0) do 
 begin 
  Inc(i); 
  if (i>50) then Break; 
  n1[0] := primes[i]; 
  BN_a_exp_b_mod_c(n1,n2,a,n3); 
  BN_a_sub_b(n3,none,n4); 
  BN_a_mod_b(n4,a,n3); 
 end; 
 if (i<=50) then Exit;  
 BN_a_sub_b(a,none,n2); 
 i := 0; 
 oldseed := RandSeed; 
 for j := 0 to BIGNUM_DWORD do 
 begin 
  n4[j] := Random(2); 


background image

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

 

система

 RSA     

393

 

Окончание

 

листинга

 18.2

 

  n4[j] := Cardinal(RandSeed); 
 end; 
 BN_a_mod_b(n4,a,n1); 
 BN_a_exp_b_mod_c(n1,n2,a,n3); 
 BN_a_sub_b(n3,none,n4); 
 BN_a_mod_b(n4,a,n3); 
 while (i<=50) and (BN_a_cmp_b(n3,nzero)=0) do 
 begin 
  Inc(i); 
  if (i>50) then Break; 
  for j := 0 to BIGNUM_DWORD do 
  begin 
   n4[j] := Random(2); 
   n4[j] := Cardinal(RandSeed); 
  end; 
  BN_a_mod_b(n4,a,n1); 
  BN_a_exp_b_mod_c(n1,n2,a,n3); 
  BN_a_sub_b(n3,none,n4); 
  BN_a_mod_b(n4,a,n3); 
 end; 
 RandSeed := oldseed; 
 if (i<=50) then Exit;  
 Result := 1;  
end; 
end. 

Цифровая

 (

электронная

подпись

 

на

 

основе

 

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

 RSA 

Асимметричная

 

криптография

 

позволяет

 

принципиально

 

решить

 

задачу

 

подтвержде

-

ния

 

истинности

 

электронного

 

документа

Эта

 

возможность

 

основана

 

на

 

том

что

 

зашиф

-

ровать

 

данные

используя

 

секретный

 

ключ

 

d

 

вместо

 

открытого

 

ключа

 

e

 

может

 

только

 

тот

кому

 

секретный

 

ключ

 

известен

При

 

этом

 

существует

 

возможность

 

проверки

 

при

-

менения

 

секретного

 

ключа

 

к

 

данным

 

без

 

его

 

раскрытия

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

пусть

 

нам

 

необходимо

 

заверить

 

блок

 

m

 

открытого

 

текста

Сам

 

от

-

крытый

 

текст

 

не

 

является

 

секретным

Зашифруем

 

m

 

используя

 

d

 

вместо

 

e

с

 = m

d

(m

о

n)

Отправим

 

сообщение

 

двойной

 

длины

 

вида

 

m||c

Получатель

 

имеет

 

возможность

 

про

-

верить

 

нашу

 

подпись

поскольку

 

после

 

возведения

 

c

 

в

 

степень

 

e

 

должно

 

получаться

 

зна

-

чение

 

s = m

 (

при

 

истинной

 

подписи

и

 

значение

 

 m

 

в

 

противном

 

случае

Для

 

нашего

 

примера

 

m =(3, 1, 2)

,  

c = (27, 1, 8)

m || 

с

 = (3, 1, 2, 27, 1, 8)

На

 

практике

 

удвоение

 

длины

 

сообщения

очевидно

является

 

нежелательным

Это

 

яв

-

ляется

 

одной

 

из

 

причин

по

 

которым

 

вместо

 

c = m

d

(mod n)

 

используются

 

данные

 

вида

 


background image

394

     

Глава

 18. 

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

 

защита

 

 

c = (h(m))

d

(mod n)

Здесь

 

функция

 

h

называемая

 

хеш

-

функцией

отображает

 

сообще

-

ния

 

произвольной

 

длины

 

в

 

короткие

 

блоки

 

фиксированной

 

длины

причем

 

так

что

 

кро

-

ме

 

блока

 

m

 

подобрать

 

другой

 

блок

 

z

 

со

 

свойством

 

h(m) = h(z)

 

практически

 

невозмож

-

но

.  

Стандарт

 

шифрования

 

данных

 DES 

Стандарт

 

шифрования

 

данных

 (DES — Data Encryption Standard) 

принят

 

в

 

США

 

в

 

1977 

году

 

в

 

качестве

 

федерального

В

 

стандарт

 

входит

 

описание

 

блочного

 

шифра

 

типа

 

шифра

 

Файстеля

а

 

также

 

различных

 

режимов

 

его

 

работы

как

 

составной

 

части

 

несколь

-

ких

 

процедур

 

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

 

преобразования

 

данных

Обычно

 

под

 

аббревиатурой

 

DES

 

понимается

 

именно

 

блочный

 

шифр

который

 

в

 

стандарте

 

соответствует

 

процедуре

 

шифрования

 

в

 

режиме

 

электронной

 

кодовой

 

книги

 (ECB —

Е

1

ес

tr

о

nic 

Со

d

е

b

оо

Мо

d

е

). 

Название

 

вызвано

 

тем

что

 

любой

 

блочный

 

шифр

 

является

 

простым

 

подстановочным

 

шифром

 

и

 

в

 

этом

 

отношении

 

подобен

 

кодовой

 

книге

Принцип

 

работы

 

блочного

 

шифра

 

Рассмотрим

 

принцип

 

работы

 

блочного

 

шифра

Входом

 

в

 

блочный

 

шифр

 

и

 

результа

-

том

 

его

 

работы

 

является

 

блок

 

длины

 

n

 — 

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

состоящая

 

из

 

n

 

бит

Чис

-

ло

 

n

 

постоянно

При

 

необходимости

 

шифрования

 

сообщения

 

длиной

большей

 

n

,

 

оно

 

разбивается

 

на

 

блоки

каждый

 

из

 

которых

 

шифруется

 

отдельно

Различные

 

режимы

 

ра

-

боты

 

связаны

 

с

 

дополнительными

 

усложнениями

 

блочного

 

шифра

 

при

 

переходах

 

от

 

блока

 

к

 

блоку

В

 

стандарте

 DES 

длина

 

блока

 

n = 64

В

 

режиме

 ECB 

шифрование

 

блока

 

открытого

 

текста

 

В

 

производится

 

за

 16 

однотип

-

ных

 

итераций

именуемых

 

циклами

Схема

 

преобразования

 

приведена

 

на

 

рис

. 18.7. 

Блок

 

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

 

как

 

конкатенация

 (

сцепление

двух

 

подблоков

 

равной

 

длины

B = (L , 

R)

На

 

каждом

 

цикле

 

применяется

 

свой

 

ключ

 (

X

i

), 

обычно

 

вырабатываемый

 

из

 

некото

-

рого

 

основного

 

ключа

 (

X

)

.

 

Ключи

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

 

в

 

циклах

называются

 

подключами

Основным

 

элементом

 

шифра

 

является

 

несекретная

 

цикловая

 

функция

 

вида

 

Y = 

f(R,X)

Входом

 

в

 

цикл

 

является

 

выход

 

из

 

предыдущего

 

цикла

Если

 

упомянутый

 

вход

 

имеет

 

вид

 

(L, R)

,

 

то

 

выход

 

имеет

 

вид

 

(R, L 

 f(R, X))

,

 

где

 

 — 

поразрядное

 

сложение

 

по

 

модулю

 2

Например

,

 

для

 

выхода

 

цикла

 

с

 

номером

 

i

 

это

 

означает

R

= L

i-1

 

 f(R

i-1

X

i

), L

i

 = R

i-1

 (i = 1,…,16)

В

 

режиме

 

ЕСВ

 

алгоритм

 DES 

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

 64-

битовый

 

блок

 

за

 16 

циклов

Биты

 

входного

 

блока

 

перед

 

первым

 

циклом

 

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

 

в

 

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

 

с

 

табл

. 18.1 

в

 

ходе

 

так

 

называемой

 

начальной

 

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

 (

IP

 — initial permutation). 

После

 

выхода

 

из

 

по

-

следнего

 

цикла

 

L

 

и

 

R

 

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

 

местами

после

 

чего

 

соединяются

 

в

 

блок

Биты

 

полученного

 

блока

 

снова

 

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

 

в

 

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

 

с

 

перестановкой

 

IP

-1

обратной

 

начальной

Результат

 

принимается

 

в

 

качестве

 

блока

 

шифртекста


background image

Стандарт

 

шифрования

 

данных

 DES     

395

 

 

Рис

. 18.7.

 

Блок

-

схема

 

работы

 

алгоритма

 DES

 

Таблица

 18.1.

 

Начальная

 

перестановка

 IP 

58 50 42

34

26

18

10  2 

60 52 44

36

28

20

12  4 

62 54 46

38

30

22

14  6 

64 56 48

40

32

24

16  8 

57 49 41

33

25

17

9  1 

59 51 43

35

27

19

11  3 

61 53 45

37

29

21

13  5 

63 55 47

39

31

23

15  7 

Процедура

 

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

 

подключей