Смекни!
smekni.com

Защита информации в ПЭВМ. Шифр Плейфера (стр. 2 из 3)

Y, = а хi + b( mod g),

а - некоторый постоянный десятичный коэффициент;

b - коэффициент сдвига;

g - длина используемого алфавита;

хi -i-й символ открытого текста (номер буквы в алфавите). Основным недостатком рассмотренного метода является то, что статистические свойства открытого текста (частоты повторения букв) сохраняются и в шифротексте.

Шифр перестановки (транспозиции) с фиксированным d (блок d -группа символов).

Это блочный метод. Текст делят на блоки и в каждом производится перестановка символов открытого текста. Правило перестановки задается секретным ключом. Пусть перестановка задается таблицей:

123456

316524

Тогда открытый текст преобразуется в закодированный так: первый символ становится вторым, второй - пятым и так далее

MICROC OMPUTE R - открытый текст
CMCOIR POETMU R - закодированный текст

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

Шифр Вижинера

Шифр, задаваемый формулой

уi = хi + ki(mod g),

где ki - i-я буква ключа, в качестве которого используется слово или фраза, называется шифром Вижинера. Воспользуемся таблицей кодирования букв русского алфавита:

Буква А Б В Г Д Е Ж 3 И И К Л
Код 01 02 03 04 05 06 07 08 09 10 11 12
Буква М Н О П Р С Т У Ф X Ц Ч
Код 13 14 15 16 17 18 19 20 21 22 23 24
Буква Ш Щ Ъ Ы Ь Э Ю Я (пробел)
Код 25 26 27 28 29 30 31 32 33

Пусть имеется открытый текст "ЗАМЕНА" и подстановка шифра Вижинера задана таблицей:

3 А М Е Н А
К Л Ю Ч К Л

По формуле шифра Вижинера находим:

Y1= 8 + ll (mod33) = 19 Ю T;

Y2= l + 12 (mod33) = 13 Ю M;

Y3= 13 + 31 (mod 33) = 11 Ю К;

Y4= 6 + 24 (mod 33) = 30 Ю Ю;

Y5= 14 + 11 (mod 33) = 25 Ю Ш;

Y6 = 1 + 12 (mod 33) = 13 Ю М.

Шифротекст: "ТМКЭШМ".

Шифры Бофора используют формулы:

yi = ki - xi(mod g) и

yi = Xi - ki(mod g).

Гомофоническая замена одному символу открытого текста ставит в соответствие несколько символов шифротекста. Этот метод применяется для искажения статистических свойств текста.

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

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

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

На основе теории групп разработано несколько типов датчиков ПСЧ. Наиболее доступны и эффективны конгруэнтные генераторы ПСЧ. Напри­мер, линейный конгруэнтный датчик ПСЧ вырабатывает последовательно­сти псевдослучайных чисел 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)]

нет