ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.06.2021
Просмотров: 3563
Скачиваний: 3
Криптографическая
система
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;
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);
Криптографическая
система
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
о
d
n)
.
Отправим
сообщение
двойной
длины
вида
m||c
.
Получатель
имеет
возможность
про
-
верить
нашу
подпись
,
поскольку
после
возведения
c
в
степень
e
должно
получаться
зна
-
чение
s = m
(
при
истинной
подписи
)
и
значение
s
≠
m
в
противном
случае
.
Для
нашего
примера
m =(3, 1, 2)
,
c = (27, 1, 8)
,
m ||
с
= (3, 1, 2, 27, 1, 8)
.
На
практике
удвоение
длины
сообщения
,
очевидно
,
является
нежелательным
.
Это
яв
-
ляется
одной
из
причин
,
по
которым
вместо
c = m
d
(mod n)
используются
данные
вида
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
оо
k
Мо
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
i
= 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
,
обратной
начальной
.
Результат
принимается
в
качестве
блока
шифртекста
.
Стандарт
шифрования
данных
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
Процедура
формирования
подключей