Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Шифрование с помощью датчика случайных чисел (ПСЧ)

Это довольно распространенный криптографический метод, прин­цип которого заключается в генерации гаммы шифра с помощью датчика ПСЧ и наложении полученной гаммы на открытые данные обратимым образом (например, при использовании логической операции "исключающее ПЛИ").

Процесс расшифрования данных сводится к повторной генерации гаммы шифра при известном ключе и наложению такой гаммы на зашиф­рованные данные. Полученный зашифрованный текст достаточно труден для раскрытия в том случае, когда гамма шифра не содержит повторяю­щихся битовых последовательностей. Фактически если период гаммы превышает длину всего зашифрованного текста и неизвестна никакая часть исходного текста, то шифр можно раскрыть только прямым перебором (подбором ключа).

 

На основе теории групп разработано несколько типов датчиков ПСЧ. Наиболее доступны и эффективны конгруэнтные генераторы ПСЧ. Напри­мер, линейный конгруэнтный датчик ПСЧ вырабатывает последовательно­сти псевдослучайных чисел T(i), описываемые соотношением

T(i+l) = [AT(i) + C]mod M,

Где А и С - константы; Т(0) - исходная величина, выбранная в качестве порождающего числа.

Такой датчик ПСЧ генерирует псевдослучайные числа с определен­ным периодом повторения, зависящим от выбранных значений А и С. Значение М обычно устанавливается равным 25, где b - длинна слова ЭВМ в битах.

Одноключевая модель использует для шифрования и дешифрования один и тот же секретный ключ, который должен быть неизвестен криптоаналитику противника. Поэтому такая система называется одноключевой криптосистемой с секретными ключами. Проблема распространения этих секретных ключей является одной из главных трудностей при практиче­ском использовании такой криптосистемы. Для распространения секрет­ных ключей требуются защитные каналы связи. Стоимость и сложность распространения этих ключей оказываются очень большими.

 

ШИФР ПЛЭЙФЕРА

Блок схемы

ПП SHIFR_PLEYFER

ПП SHIFR_PLEYFER для определения координат символов матрицы Плэйфера.

SHIFR_PLEYFER(Alfavit, INDEX)


Список формальных параметров:

Alfavit, INDEX

 

Входные параметры:

INDEX - матрица символов Плэйфера, величина символьная.

Выходные параметры:

Alfavit - хранит координаты символов матрицы Плэйфера, величины целого типа.

 

Алгоритм

Начало ПП SHIFR_PLEYFER (Alfavit, INDEX)

Описание массивов: Alfavit[255], INDEX[6, 6]

I = 1

нет

I <= 6

J = 1

нет

J <= 6

Alfavit[Ord(INDEX[I, J])].Strok = I

Alfavit[Ord(INDEX[I, J])].Stolb = J

J = J + 1

 

I = I + 1

Конец ПП SHIFR_PLEYFER

 

Обозначения

1. Описание массивов Alfavit, INDEX

2.. 5, 7, 8 Организация цикла заполнения массива Alfavit типа запись

6. Определение строк и столбов для символов матрицы INDEX

 

ПФ SHIFR_TXT

ПФ SHIFR_TXT производит шифрование строки открытого текста.

SHIFR_TXT(Str, Alfavit, INDEX)

 

Список формальных параметров:

Str, Alfavit, INDEX

 

Входные параметры:

Str - строка открытого текста, величина строка.

Alfavit - хранит координаты символов матрицы Плэйфера, величины целого типа.

INDEX - матрица символов Плэйфера, величина символьная.

Выходные параметры:

SHIFR_TXT - принимает значение зашифрованной строки, величины строка.

 

Обозначения

1. Описание массивов Alfavit, INDEX.

2.. 7 В открытом тексте вставляется “-”между одинаковыми символами.

8.. 9 Добавление “-” в конец открытого текста, в случае нечет. кол-ва символов в строке.

10.. 13 Организация по парного перебора символов строки открытого текста.

14.. 15 Пара символов находится в одной строке матрицы алфавита Плэйфкра.

16.. 17 Пара символов находится в одном столбце матрицы алфавита Плэйфера.

18. Пара символов находится в разных строках и столбцах матрицы алфавита Плэйфера.

19. Присваивание ПФ SHIFR_TXT значения новой строки

 

Продолжение следуетј

 

Алгоритм

 

Начало ПФ SHIFR_TXT (Str, Alfavit, INDEX)

Описание массивов: Alfavit[255], INDEX[6, 6]

New = “, Dlina_str = Length(Str), I = 1

нет

I <= Dlina_str

да нет

Str[I] = Str[I + 1]

New = (New + Str[I] + ‘-’) New = (New + Str[I])

I = I + 1

 

нет

Odd(Length(Str)) = TRUE

 

New = New + ‘-’

 

Str = “, Dlina_new = Length(New)div 2, I = 1

нет

I <= Dlina_new

 

SIM1 = New[2*I - 1], SIM2 = New[2*I] SHIFR_TXT = Str

I = I + 1 Конец ПФ SHIFR_TXT

 

нет

ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK

 

Str = Str + INDEX[(ALFAVIT[Ord(SIM1)].STROK), ((ALFAVIT[Ord(SIM1)].STOLB mod 6) + 1)]

+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), ((ALFAVIT[Ord(SIM2)].STOLB mod 6) + 1)]

 

нет

ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB

 

Str = Str + INDEX[((ALFAVIT[Ord(SIM1)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[((ALFAVIT[Ord(SIM2)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]

 

Str = Str + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)]

 

 

ПФ DESHIFR_TXT

ПФ DESHIFR_TXT производит расшифрацию строки открытого текста.

DESHIFR_TXT(Str, Alfavit, INDEX)

 

Список формальных параметров:

Str, Alfavit, INDEX

 

Входные параметры:

Str - строка открытого текста, величина строка.

Alfavit - хранит координаты символов матрицы Плэйфера, величины целого типа.

INDEX - матрица символов Плэйфера, величина символьная.

Выходные параметры:

DESHIFR_TXT- принимает значение расшифрованной строки, величины строка.

 

Обозначения

1. Описание массивов Alfavit, INDEX.

2.. 5 Организация по парного перебора символов строки открытого текста.

6.. 7 Пара символов находится в одной строке матрицы алфавита Плэйфкра.

8.. 9 Пара символов находится в одном столбце матрицы алфавита Плэйфера.

10. Пара символов находится в разных строках и столбцах матрицы алфавита Плэйфера.

11.. 15 Из расшифрованной строки создается новая строка без спец. знак “-”.

16. Присваивание ПФ DESHIFR_TXT значения новой строки

 

Продолжение следуетј

 

 

Алгоритм

 

Начало ПФ DESHIFR_TXT (Str, Alfavit, INDEX)

Описание массивов: Alfavit[255], INDEX[6, 6]

New = “, Dlina_str = Length(Str)div 2, I = 1

нет

I <= Dlina_str

 

SIM1 = Str[2*I - 1], SIM2 = Str[2*I]

I = I + 1

нет

ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK

 

New = New + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (((ALFAVIT[Ord(SIM1)].STOLB + 4)mod 6) + 1)]

+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), (((ALFAVIT[Ord(SIM2)].STOLB + 4)mod 6) + 1)]

 

нет

ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB

 

New = New + INDEX[(((ALFAVIT[Ord(SIM1)].STROK + 4)mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(((ALFAVIT[Ord(SIM2)].STROK + 4)mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]

 

New = New + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)]

 

Str = “, Dlina_new = Length(New), I = 1

нет

I <= Dlina_new

 

нет

New[I] № ‘-’

 

Str = Str + New[I]

I = I + 1

 

DESHIFR_TXT = Str

Конец ПФ DESHIFR_TXT

 

 

ОСНОВНАЯ ПРОГРАММА

Алгоритм

Начало основного блока программы

Описание массивов: Alfavit[255], INDEX[6, 6]

Вывод: “Выберите (S)ШИФРОВАТЬ или (D)ДЕШИФРОВАТЬ”

нет Ввод: K

нет

UpCase(K) = ‘S’ UpCase(K) = ‘D’

 

Вывод: “Путь к файлу: ”

Ввод: Name1

Assign (Var_file1, Name1)

Reset (Var_file1)

нет

IOResult = 0

Вывод: “Сохранить как: ”

Ввод: Name2

нет

Length(Name2) № 0

 

Assign (Var_file2, Name2)

ReWrite (Var_file2)

SHIFR_PLEYFER(ALFAVIT, INDEX)

нет

NOT EOF(Var_file1)

 

Ввод из файла Var_file1: Str

нет да

UpCase(K) = ‘S’

 

Str = DESHIFR_TXT(Str, ALFAVIT, INDEX) Str = SHIFR_TXT(Str, ALFAVIT, INDEX)

Вывод в файл Var_file2: Str

 

Close (Var_file1)

Close (Var_file2)

Конец основного блока программы


Обозначения

1. Описание массивов Alfavit, INDEX.

2.. 5 Выбор шифрование или расшифрация файла.

6.. 9 Определение файла ввода данных.

10.. 13 Определение файла вывода полученных результатов.

14. Обращение к ПП SHIFR_PLEYFER(ALFAVIT, INDEX).

15.. 16 Перебор строк из файла Var_file1.

17. Выбор действий шифрование либо расшифрация строки.

18. Обращение к ПФ DESHIFR_TXT(Str, ALFAVIT, INDEX).

19. Обращение к ПФ SHIFR_TXT(Str, ALFAVIT, INDEX).

20. Вывод результата в файл Var_file2.

21. Закрытие файлов ввода и вывода.

 

Программа

PROGRAM SHIFR_PLEYFERA;

USES Crt;

TYPE

path = STRING[14];

Stroca = STRING[255];

Simvol = array [1..6, 1..6] of CHAR;

MATR = array [1..255] of RECORD

STROK, STOLB: Byte;

END;

CONST INDEX: Simvol = (('А', 'Ж', 'Б', 'М', 'Ц', 'В'), {типизированные константы для матрицы Плэйфера}

('Ч', 'Г', 'Н', 'Ш', 'Д', 'О'),

('Е', 'Щ', ', ', 'Х', 'У', 'П'),

('. ', 'З', 'Ъ', 'Р', 'И', 'Й'),

('С', 'Ь', 'К', 'Э', 'Т', 'Л'),

('Ю', 'Я', ' ', 'Ы', 'Ф', '-'));

VAR

Var_file1,Var_file2: Text;

Name1, Name2: path;

ALFAVIT: MATR;

Str: Stroca;

K: Char;

 

{Определение координат символов матрицы Плэйфера}

PROCEDURE SHIFR_PLEYFER(Var ALFAVIT: MATR; INDEX: Simvol);

VAR I, J: Byte; {I, J - счетчики циклов}

BEGIN {Начало основного блока ПП SHIFR_PLEYFER}

FOR I:= 1 TO 6 DO for J:= 1 to 6 do

WITH ALFAVIT[Ord(INDEX[I, J])] DO

begin

STROK:= I; {строка символа}

STOLB:= J; {столбец символа}

end;

END; {Конец основного блока ПП SHIFR_PLEYFER}

{Производится шифрование строки открытого текста}

FUNCTION SHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;

VAR {Объявление переменных}

SIM1, SIM2: Char;

New: STRING;

I, Dlina_str, Dlina_new: Byte; {I - счетчик цикла}

 

BEGIN {Начало основного блока ПФ SHIFR_TXT}

{В открытом тексте вставляется спец. знак “-” между одинаковыми символами}

New:= '';

Dlina_str:= Length(Str);

FOR I:= 1 TO Dlina_str DO IF (Str[I] = Str[I+1]) THEN New:= (New + Str[I] + '-') ELSE New:= (New + Str[I]);

 

{Добавление спец. знака “-” в конец открытого текста в случае нечетного количества символов в строке }

IF Odd(Length(Str)) = TRUE THEN New:= New + '-';

 

{Шифрование открытого текста по матрице алфавита Плэйфера}

Str:= '';

Dlina_new:= Length(New)div 2;

FOR I:= 1 TO Dlina_new DO

begin

SIM1:= New[2*I - 1];

SIM2:= New[2*I];

IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN

{Пара символов находятся в одной строке матрицы}

Str:= Str + INDEX[(ALFAVIT[Ord(SIM1)].STROK), ((ALFAVIT[Ord(SIM1)].STOLB mod 6) + 1)]

+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), ((ALFAVIT[Ord(SIM2)].STOLB mod 6) + 1)]

ELSE

IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN

{Пара символов находятся в одном столбце матрицы}

Str:= Str + INDEX[((ALFAVIT[Ord(SIM1)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[((ALFAVIT[Ord(SIM2)].STROK mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]

ELSE

{Пара символов находятся в разных строках и столбцах матрицы}

Str:= Str + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];

end;

 

SHIFR_TXT:= Str;

END; {Конец основного блока ПФ SHIFR_TXT}

{Производится расшифрация строки }

FUNCTION DESHIFR_TXT(Str: Stroca; Alfavit: MATR; INDEX: Simvol): Stroca;

VAR {Объявление переменных}

SIM1, SIM2: Char;

NEW: STRING;

I, Dlina_str, Dlina_new: Byte; {I - счетчик цикла}

 

BEGIN {Начало основного блока ПФ DESHIFR_TXT}

{Дешифрование открытого текста по матрице алфавита Плэйфера}

New:= '';

Dlina_str:= Length(Str)div 2;

FOR I:= 1 TO Dlina_str DO

begin

SIM1:= Str[2*I - 1];

SIM2:= Str[2*I];

 

IF (ALFAVIT[Ord(SIM1)].STROK = ALFAVIT[Ord(SIM2)].STROK) THEN

{Пара символов находятся в одной строке матрицы}

New:= New + INDEX[(ALFAVIT[Ord(SIM1)].STROK), (((ALFAVIT[Ord(SIM1)].STOLB + 4) mod 6) + 1)]

+ INDEX[(ALFAVIT[Ord(SIM2)].STROK), (((ALFAVIT[Ord(SIM2)].STOLB + 4) mod 6) + 1)]

ELSE

IF (ALFAVIT[Ord(SIM1)].STOLB = ALFAVIT[Ord(SIM2)].STOLB) THEN

{Пара символов находятся в одном столбце матрицы}

New:= New + INDEX[(((ALFAVIT[Ord(SIM1)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(((ALFAVIT[Ord(SIM2)].STROK + 4) mod 6) + 1), (ALFAVIT[Ord(SIM2)].STOLB)]

ELSE

{Пара символов находятся в разных строках и столбцах матрицы}

New:= New + INDEX[(ALFAVIT[Ord(SIM2)].STROK), (ALFAVIT[Ord(SIM1)].STOLB)]

+ INDEX[(ALFAVIT[Ord(SIM1)].STROK), (ALFAVIT[Ord(SIM2)].STOLB)];

end;

 

{В открытом тексте убирается спец. знак “-”}

Str:= '';

Dlina_new:= Length(New);

FOR I:= 1 TO Dlina_new DO IF (New[I] <> '-') THEN Str:= (Str + New[I]);

 

DESHIFR_TXT:= Str;

END; {Конец основного блока ПФ DESHIFR_TXT}

{Начало основного блока программы}

BEGIN

ClrScr;

{Выбор шифрование или дешифрование файла}

WriteLn ('Выбери: (S)ШИФРОВАТЬ или (D)ДЕШИФРОВАТЬ?');

REPEAT

K:= ReadKey;

UNTIL (UpCase(K) = 'S') OR (UpCase(K) = 'D');

 

{Определение файла ввода}

{$I-}

REPEAT

Write ('Путь к файлу: ');

ReadLn (Name1);

Assign (Var_file1, Name1);

Reset (Var_file1);

UNTIL (IOResult = 0);

{$I+}

 

{Определение файла вывода}

REPEAT

Write ('Сохранить как: ');

ReadLn (Name2);

UNTIL (Length(Name2) <> 0);

Assign (Var_file2, Name2);

Rewrite(Var_file2);

 

{Обращение к ПП SHIFR_PLEYFER}

SHIFR_PLEYFER (ALFAVIT, INDEX);

 

{Цикл перебора строк открытого текста}

WHILE NOT EOF(Var_file1) DO

begin

ReadLn (Var_file1, Str);

 

{Обращение к ПФ SHIFR_TXT либо ПФ DESHIFR_TXT}

IF UpCase(K) = 'S' THEN Str:= SHIFR_TXT (Str, Alfavit, INDEX) ELSE Str:= DESHIFR_TXT (Str, Alfavit, INDEX);

 

WriteLn (Var_file2, Str);

end;

Close (Var_file2); {Закрытие файла Name2}

Close (Var_file1); {Закрытие файла Name1}

END. {Конец основного блока программы}

Результаты

 

{test.txt} - исходный открытый текст.

ШИФР ПЛЭЙФЕРА

 

МАЛЬЧИК НА КУХНЕ УКСУС НАШЕЛ.

С ЧАЙНОЙ ЧАШКОЙ К ДЕДУ ПРИШЕЛ.

ДЕДУШКА, МИЛЕНЬКИЙ, СДЕЛАЙ ГЛОТОК...

СТАРЕНЬКИЙ ДЕДУШКА НА ПОЛ ПОТЕК.

 

{test.plf} - зашифрованный файл (test.txt)

РДИЫ,-СТ-И.ХЮВ

 

БЫСВГСТЪБ,ЮБ,ТШ,Ю,Т,ЕТЮКБЧХЧЙС

КЮНЮ.ВШЧ-ЪЕЧЭНПЛБ НФЧУФ,ЙХДРСПЮЙ

НФЧУДХБСЪБРЦПСКГЪТПЪКЮУЧВС-ЪЬОЛДЛНЮЙЮЙЮЙ

КЮЦСХ.КГЪТ-ЪУЧУИЭНЮББЧ,-П-,-ЛДС,ЮЙ

 

{test.new} - расшифрованный файл (test.plf)

ШИФР ПЛЭЙФЕРА

 

МАЛЬЧИК НА КУХНЕ УКСУС НАШЕЛ.

С ЧАЙНОЙ ЧАШКОЙ К ДЕДУ ПРИШЕЛ.

ДЕДУШКА, МИЛЕНЬКИЙ, СДЕЛАЙ ГЛОТОК...

СТАРЕНЬКИЙ ДЕДУШКА НА ПОЛ ПОТЕК.

 

СПИСОК ЛИТЕРАТУРЫ

1. Защита информации в персональных ЭВМ/ А.В.Спесивцев, В.А.Вегнер, А.Ю.Крутяков и др. - М.: Радио и связь, МП 'Веста',1993.

2. 3ащита программного обеспечения: Перевод с английского./ Под редакцией Д.Гроувера. - М.: Мир 1992.

3. Рощин Б.В.Элементы криптозащиты информации: Учебное пособие. - М.: Издательство МАИ, 1995.

4. А.В.Петраков. Защита и охрана личности, собственности, информации: Справное пособие. - М.: Радио и связь, 1997.

 

И

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...