Шифрование с помощью датчика случайных чисел (ПСЧ)
Это довольно распространенный криптографический метод, принцип которого заключается в генерации гаммы шифра с помощью датчика ПСЧ и наложении полученной гаммы на открытые данные обратимым образом (например, при использовании логической операции "исключающее ПЛИ"). Процесс расшифрования данных сводится к повторной генерации гаммы шифра при известном ключе и наложению такой гаммы на зашифрованные данные. Полученный зашифрованный текст достаточно труден для раскрытия в том случае, когда гамма шифра не содержит повторяющихся битовых последовательностей. Фактически если период гаммы превышает длину всего зашифрованного текста и неизвестна никакая часть исходного текста, то шифр можно раскрыть только прямым перебором (подбором ключа).
На основе теории групп разработано несколько типов датчиков ПСЧ. Наиболее доступны и эффективны конгруэнтные генераторы ПСЧ. Например, линейный конгруэнтный датчик ПСЧ вырабатывает последовательности псевдослучайных чисел 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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|