Криптографические методы защиты информации

Лабораторная работа по предмету «Информатика»
Информация о работе
  • Тема: Криптографические методы защиты информации
  • Количество скачиваний: 11
  • Тип: Лабораторная работа
  • Предмет: Информатика
  • Количество страниц: 31
  • Язык работы: Русский язык
  • Дата загрузки: 2018-06-28 16:49:15
  • Размер файла: 83.42 кб
Помогла работа? Поделись ссылкой
Информация о документе

Документ предоставляется как есть, мы не несем ответственности, за правильность представленной в нём информации. Используя информацию для подготовки своей работы необходимо помнить, что текст работы может быть устаревшим, работа может не пройти проверку на заимствования.

Если Вы являетесь автором текста представленного на данной странице и не хотите чтобы он был размешён на нашем сайте напишите об этом перейдя по ссылке: «Правообладателям»

Можно ли скачать документ с работой

Да, скачать документ можно бесплатно, без регистрации перейдя по ссылке:

Содержание



Содержание

1.  Простая замена.

2.  Шифр Цезаря

3.  Шифр Цезаря с ключевым словом

4.  Шифр Цезаря многоалфавитный.

5.  Шифры сложной замены

6.  Схема шифрования Вижинера

7.  Диск Альберти

8.  Шифр Гронсфельда

9.  Аффинная система подстановок Цезаря

10.  Криптосистема Хилла и её частный случай шифр Плэйфеpа

11.  Шифры гаммирования

12.  Шифр Вернама

13.  Полибианский квадрат

14.  Шифрующие таблицы Трисемуса

15.  Шифр Уинстона




  1. Простая замена.

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

Самой простой разновидностью является прямая (простая) замена, когда буквы шифруемого сообщения заменяются другими буквами того же самого или некоторого другого алфавита. Таблица замены может иметь следующий вид (таблица 1):


Таблица 1 - Таблица простой замены

Исходные символы шифруемого
текста
a b c d e f g h i j k l m n o р q r s t u v w x y z
Заменяющие символы s р x l r z i m a y e d w t b g v n j o c f h q u k

Используя эту таблицу, зашифруем текст: «So ist das Leben. Eilen tut nicht gut. Das Leben ist schoen. Sie ist zu kurz wie Augenblick». Получим следующее зашифрованное сообщение: «Jb ajo lsj Drprt. Radrt oco taxmo ico. Lsj Drprt ajo jxmbrt. Jar ajo kc ecnk har Scirtpdaxe». Однако такой шифр имеет низкую стойкость, так как зашифрованный текст имеет те же статистические характеристики, что и исходный. Дальнейшая расшифровка не составляет труда. Если бы объем зашифрованного текста был намного больше, чем в рассмотренном примере, то частоты появления букв в зашифрованном тексте были бы еще ближе к частотам появления букв в английском или немецком алфавите и расшифровка была бы еще проще. Поэтому простую замену используют редко и лишь в тех случаях, когда шифруемый текст короток.

Является частным случаем шифра простой замены (одноалфавитной подстановки). При шифровании исходного текста каждая буква заменялась на другую букву того же алфавита путем смещения по алфавиту от исходной буквы на К букв. При достижении конца алфавита выполнялся циклический переход к его началу. Цезарь использовал шифр замены при смещении К = 3. Например, послание Цезаря VENI VIDI VICI (в переводе на русский означает "Пришел, Увидел, Победил"), направленное его другу Аминтию после победы над понтийским царем Фарнаком, сыном Митридата, выглядело бы в зашифрованном виде так:

YHQL YLGL YLFL

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

Рассматривая алфавит криптосистемы как множество целых чисел Zm, мы можем записать функцию шифрования Еk для k=3 в шифре Цезаря как


Еk : x→ (x + 3) mod m, x Zm,


где x – числовой код буквы открытого текста;

x+3 – числовой код соответствующей буквы шифртекста;

m – количество символов в алфавите.

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

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

Этот шифр также является одноалфавитным. Особенностью его является использование ключевого слова для смещения и изменения порядка символов в алфавите подстановки.

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


Пример. Правило подстановки для k =3 и ключа «информация»:

исходный текст: абвгдежзийклмнопрстуфхцч...

шифрованный текст: эюинформацябвгдежзйклоп...


Несомненным достоинством системы Цезаря с ключевым словом является то, что количество возможных ключевых слов практически неисчерпаемо. Недостатком этой системы является возможность взлома шифртекста на основе анализа частот появления букв.

В отличие от простого шифра Цезаря, многоалфавитный образуется множеством одноалфавитных подстановок, определяемых функциями шифрования Еk для различных значений ключа k, причем 0<k<m, где m – количество символов алфавита.

В соответствии с этой системой буква xZm открытого текста преобразуется в букву yZm шифртекста согласно следующему правилу:


Еk : y = (x + k) mod m,


где x - числовой код буквы открытого текста; y -числовой код соответствующей буквы шифртекста.

Концепция, заложенная в систему шифрования Цезаря, оказалась весьма плодотворной, о чем свидетельствуют ее многочисленные модификации.

Шифры сложной замены называют многоалфавитными. Многоалфавитная подстановка последовательно и циклически меняет используемые алфавиты. При r-алфавитной подстановке символ х0 исходного сообщения заменяется символом из алфавита В0, символ х1 символом из алфавита B1, и так далее, символ хr-1 заменяется символом из алфавита Br-1, символ хr заменяется символом снова из алфавита В0, и т.д.

Общая схема многоалфавитной подстановки (r=4):

Входной символ    х0  х1  х2  х3  х4  х5  х6  х7  х8  х9

Алфавит подстановки  B0 B1 B2  B3 B0 B1  B2 B3 B0  B1

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

Степень обеспечиваемой защиты теоретически пропорциональна длине периода r в последовательности используемых алфавитов В.

В случае блочного шифра эта подстановка шифрует n-грамму (блок) открытого текста (х0, х1, х2, … , хn-1) в n-грамму (y0, y1, y2, … , yn-1) шифртекста в соответствии с формулой:


yi = πi (хi), 0 < i < n, n = 1, 2, 3, ... .


При n∞ мы приближаемся к теоретически стойкой одноразовой системе шифрования.

Данный шифр может быть использован и для потокового шифрования, где открытый текст шифруется побуквенно (буква за буквой).

При этом i-ая буква шифртекста является функцией только i-ой компоненты πi ключа К и i-ой буквы хi; открытого текста.

Схема шифрования Вижинера впервые была опубликована в 1586 г. и является одной из старейших и наиболее известных многоалфавитных систем. Свое название она получила по имени французского дипломата XVI века Блеза Вижинера. Этот шифр многоалфавитной замены можно описать таблицей шифрования, называемой таблицей (квадратом) Вижинера. Размер таблицы Вижинера равен длине алфавита. Таблица Вижинера представляет собой квадратную матрицу с n2 элементами, где n - число символов используемого алфавита. В таблице 4 показана верхняя часть таблицы Вижинера для кириллицы.







Таблица 2 - Таблица Вижинера

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я
б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а
в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б
г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в
д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г
е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г д
И т.д. до 33-ей строки

Первая строка имеет цифровой ключ «0» и заполняется всеми символами по алфавиту, вторая имеет цифровой ключ «1» и заполняется теми же символами, сдвинутыми вправо на один символ по кругу, и далее k - ая имеет цифровой ключ «k -1» и заполняется теми же символами, сдвинутыми вправо на (k -1) символ по кругу.

Таблица Вижинера используется для зашифрования и расшифрования. Она имеет два входа: верхнюю строку подчеркнутых символов, используемую для считывания очередной буквы исходного открытого текста; крайний левый столбец ключа. Ключ представляет собой последовательность цифр или слово (чтобы ключ легче было запомнить), в последнем случае буквы ключевого слова заменяют на их порядковые номера в алфавите.

Осуществляется это следующим образом. Из полной таблицы выбирается первая строка и те строки, первые буквы которых соответствуют буквам ключа. Первой размещается первая строка, а под нею - строки, соответствующие буквам ключа в порядке следования этих букв в ключе шифрования. Пример такой рабочей матрицы для ключа «книга» приведен в таблице 3.



Таблица 3 - Рабочая матрица шифрования для ключа «книга»

а б в г д е ё ж з и й к л м н о п р с т у Ф х ц ч ш щ ъ ы ь э ю я
к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г д е ё ж з и й
н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г д е ё ж з и й к л м
и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в г д е ё ж з
г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я а б в
а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я

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

Пусть, например, требуется зашифровать сообщение:

«максимально допустимой ценой».

В соответствии с первым правилом записываем под буквами шифруемого текста буквы ключа. Получаем (таблица 4):


Таблица 4 – Первый этап шифрования для ключа «книга»

м а к с и м а л ь н о д о п у с т и м о й ц е н о й
к н и г а к н и г а к н и г а к н и г а к н и г а к

Дальше осуществляется непосредственное шифрование в соответствии со вторым правилом, а именно: берем первую букву шифруемого текста (М) и соответствующую ей букву ключа (К); по букве шифруемого текста (М) входим в рабочую матрицу шифрования и выбираем под ней букву, расположенную в строке, соответствующей букве ключа (К),— в нашем примере такой буквой является Ч; выбранную таким образом букву помещаем в зашифрованный текст. Эта процедура циклически повторяется до зашифрования всего текста.

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

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

Нетрудно видеть, что процедуры как прямого, так и обратного преобразования являются строго формальными, что позволяет реализовать их алгоритмически. Более того, обе процедуры легко реализуются по одному и тому же алгоритму.

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

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

С целью повышения стойкости шифрования можно использовать усовершенствованные варианты таблицы Вижинера. Рассмотрим один из них. Во всех (кроме первой) строках таблицы буквы располагаются в произвольном порядке. В качестве ключа используется случайность последовательных чисел. Из таблицы Вижинера выбираются десять произвольных строк, которые кодируются натуральными числами от 0 до 10. Эти строки используются в соответствии с чередованием цифр в выбранном ключе.

Шифры Вижинера с коротким периодическим ключом используются и в наши дни в системах шифрования, от которых не требуется высокая криптостойкость. Так, например они использовались в программе-архиваторе ARJ и в программе Word версии 6.

С развитием математики необходимость в таблицах шифрования отпала. Если заменить буквы на числа, то операции шифрования и дешифрования легко выражаются простыми математическими формулами. Так в шифре Вижинера используются операции циклического или модульного сложения (при шифровании) и вычитания (при дешифровании).

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


π =( π0, π1, … , πr-1),


Функция шифрования Вижинера Еπ: хy преобразует открытый текст х=(х0,х1,х2,…,хn-1) в шифртекст y = (y0, y1, y2, … , yn-1) согласно правилу:

y = (y0, y1, y2, … , yn-1) = (π0(х0), π1(х1), … , πn-1(хn-1)),

где πi =π(i mod r).


Многоалфавитные шифры замены предложил и ввел в практику криптографии Леон Батист Альберти, который также был известным архитектором и теоретиком искусства. Он же впервые выдвинул идею повторного шифрования, которая в виде идеи многократного шифрования лежит в основе всех современных шифров с секретным ключом. Кроме шифра многоалфавитной замены, Альберти также подробно описал устройства для его реализации. Диск Альберти представляет собой систему из внешнего неподвижного и внутреннего подвижного дисков, на которые нанесены символы алфавита и цифры. На внешнем в алфавитном порядке, на внутреннем в произвольном. Ключом шифрования являются порядок букв на внутреннем диске и начальное положение внутреннего диска относительно внешнего. После шифрования слова внутренний диск сдвигался на один шаг. Количество алфавитов r в нем равно числу символов на диске.

Шифр Гронсфельда представляет собой модификацию шифра Цезаря числовым ключом. Для этого под буквами исходного сообщения записывают цифры числового ключа. Если ключ короче сообщения, то его запись циклически повторяют.

Шифртекст получают аналогично, как в шифре Цезаря, но отсчитывают по алфавиту не третью букву (как это делается в простом шифре Цезаря), а выбирают ту букву, которая смещена по алфавиту на соответствующую цифру ключа (таблица 5).





Таблица 5 – Пример использования шифра Гронсфельда

Сообщение В О С Т О Ч Н Ы Й
Э К С П Р Е С С
Ключ 2 7 1 8 2 7 1 8 2
7 1 8 2 7 1 8 2
Шифртекст Д Х Т Ь Р Ю О Г Л
Д Л Щ С Ч Ж Щ У

Чтобы зашифровать первую букву сообщения В, используя первую цифру ключа 2 , нужно отсчитать вторую по порядку букву от В, получается первая буква шифртекста Д.

Следует отметить, что шифр Гронсфельда вскрывается относительно легко, если учесть, что в числовом ключе каждая цифра имеет только десять значений, а значит, имеется лишь десять вариантов прочтения каждой буквы шифртекста. Модификация шифра Гронсфельда с буквенным ключом предполагает смещение на величину, равную номеру буквы ключа в алфавите. При этом улучшается стойкость, за счет увеличения размерности ключевого пространства. Шифр Гронсфельда представляет собой по существу частный случай системы шифрования Вижинера.

Аффинная система шифрования относится к классу шифров, основанных на аналитических преобразованиях шифруемых данных. В системе шифрования Цезаря использовались только аддитивные свойства множества целых Zm, то есть оно рассматривалось как группа с операцией сложения.

Рассматривая множество целых чисел Zm с двумя операциями сложения и умножения по модулю m, являющееся кольцом, можно получить систему подстановок, которую называют аффинной системой шифрования Цезаря.

Определим в такой системе преобразование Еa,b: ZmZm:


Еa,b(x)= ax+b mod m,


где в качестве ключа k = (a, b) используется пара целых чисел, удовлетворяющих условиям 0 a,b < m, и НОД(а,m)=1.

В данном преобразовании буква, соответствующая числу x в открытом тексте, заменяется на букву шифртекста, соответствующую числовому значению y =(ax +b) mod m (например m=26 в латинском алфавите).

Следует заметить, что преобразование Еa,b(x) является взаимно однозначным отображением на множестве Zm только в том случае, если НОД(а,m)=1, т.е. а и m должны быть взаимно простыми числами.

Это условие взаимной простоты необходимо для обеспечения инъективности отображения Еa,b(x) = ax+b mod m. Если оно не выполняется, возможна ситуация, когда две разные буквы отображаются в одну (возникает неоднозначность расшифрования), а некоторые буквы отсутствуют в шифртексте, так как никакие буквы в них не отображаются.

Достоинством аффинной системы является удобное управление ключами - ключи шифрования и расшифрования представляются в компактной форме в виде пары чисел (а, b). По сравнению с простой системой шифрования Цезаря, количество возможных ключей значительно больше и алфавитный порядок слов при шифровании не сохраняется.

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

Эти криптосистемы также относятся к классу шифров, основанных на аналитических преобразованиях шифруемых данных как и аффинная система шифрования. Они основаны на подстановке не отдельных символов, а n - гpамм (шифр Хилла) или 2-гpамм (шифр Плэйфеpа). При более высокой криптостойкости они значительно сложнее для реализации и требуют достаточно большого количества ключевой информации.

Алгебраический метод, обобщающий аффинную подстановку Цезаря для шифрования n-грамм, был сформулирован Лестером С.Хиллом.

Шифрование ведется путем выполнения умножения вектора на матрицу. Матрица является ключом шифрования. Открытый текст разбивается на n-граммы - блоки длиной n, равной размерности матрицы и каждая n-грамма х = (х0, х1, х2, … , хn-1) рассматривается как вектор.

Ключевая матрица Т размером п×п вида Т={ti,j}, i,j = 0,1, … ,n-1 задает отображение, являющееся линейным преобразованием:


Т: Zm,nZm,n,  Т: ху;   у=Тх,


где .

Для расшифрования шифртекста необходимо выполнить обратное преобразование:


х = Т-1 у.


Для того, чтобы линейное преобразование Т, заданное своей матрицей, могло быть криптографическим преобразованием необходимо чтобы оно было обратимым (или невырожденным), то есть должна существовать обратная матрица Т-1: такая, что:


Т Т-1 = Т-1 Т = I, где I - единичная матрица.


Доказано, что для этого необходимо, чтобы определитель матрицы det Т, не делился на любое простое р, которое делит m.

Суть этого метода состоит в том, что символы шифруемого текста последовательно складываются с символами некоторой специальной последовательности, которая называется гаммой. Такой метод представляют как наложение гаммы на исходный текст, поэтому он получил название «гаммирование».

Гамма шифра - это псевдослучайная последовательность, выработанная по заданному алгоритму для шифрования открытых данных и дешифрования зашифрованных данных. Под гаммированием понимают процесс наложения по определенному закону гаммы шифра на открытые данные, он может выполняться как в режиме блочного, так и потокового шифрования. Он является типичным и наиболее простым примером реализации абсолютно стойкого шифра (при использовании бесконечного ключа п = ).

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

Следует отметить, что при блочном шифровании открытые данные разбивают на блоки Т0(i) одинаковой длины, обычно по 64 бита. Гамма шифра вырабатывается в виде последовательности блоков γi аналогичной длины.

Уравнение зашифрования можно записать в виде


ci = γimi ,   i=1,…,M,


где ci - i-ый блок шифртекста; γi - i-ый блок гаммы шифра; mi - i-ый блок открытого текста; М - количество блоков открытого текста.

Процесс дешифрования сводится к повторной генерации гаммы шифра и наложению этой гаммы на зашифрованные данные. Уравнение расшифрования имеет вид


mi = γi  ci,   i=1,…,M.


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

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


γi+1 = (аγi + b) mod m,


где а и b – константы; γ0 - исходная величина, выбранная в качестве порождающего числа. Очевидно, что эти три величины и образуют ключ.

Такой датчик генерирует псевдослучайные числа с определенным периодом повторения, зависящим от выбранных значений а и b. Необходимо выбирать числа a и b такие, чтобы период был максимальным. Как показано Д. Кнутом, это возможно тогда и только тогда, когда b - нечетное и взаимно простое с m, и величина а mod 4 = 1. По другим рекомендациям b - взаимно простое с m, и а нечетное.

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


Ri = ( Si + G ) mod (k –1),


где Ri, Si, G — символы соответственно зашифрованного, исходного текста и гаммы.

При втором методе символы исходного текста и гаммы представляются в виде двоичного кода, затем соответствующие разряды складываются по модулю 2. Вместо сложения по модулю 2 при гаммировании можно использовать и другие логические операции, например преобразование по правилу логической эквивалентности и неэквивалентности .

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

Таблица 6 - Пример шифрования гаммированием

Шифруемый текст Б У Д Ь …
010010 100000 110010 100000
Знаки гаммы 7 1 8 2 …
000111 000001 001000 000010
Шифрованный текст 010101 1000001 111010 100010





Стойкость шифрования методом гаммирования определяется главным образом свойством гаммы - длительностью периода и равномерностью статистических характеристик. Последнее свойство обеспечивает отсутствие закономерностей в появлении различных символов в пределах периода.

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

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

Метод гаммирования становится бессильным, если злоумышленнику становится известен фрагмент исходного текста и соответствующая ему шифрограмма. Простым вычитанием по модулю получается отрезок псевдослучайной последовательности (ПСП) и по нему восстанавливается вся последовательность. Злоумышленники может сделать это на основе догадок о содержании исходного текста. Так, если большинство посылаемых сообщений начинается со слов “СОВ.СЕКРЕТНО”, то криптоанализ всего текста значительно облегчается. Это следует учитывать при создании реальных систем информационной безопасности.

Этот метод является частным случаем шифрования гаммированием для двоичного алфавита (при значении модуля m=2).

Конкретная версия этого шифра, предложенная в 1926 году сотрудником фирмы AT&T Вернамом, использует двоичное представление символов исходного текста. Каждая буква исходного текста в алфавите, расширенном некоторыми дополнительными знаками, сначала переводилась с использованием телеграфного кода Бодо в пятибитовый символ. То есть алфавит криптосистемы представляет собой множество Z32 всех пятибитовых последовательностей.

Ключ k = (k0 ,k1 ,...,kn-1), где ki Z32 записывался на бумажной ленте. При шифровании ключ добавлялся к исходному тексту суммированием по модулю 2.

В общем случае система шифрования Вернама осуществляет побитовое сложение п -битового открытого текста и п-битового ключа:


yi = xi ki, i=1,…,n


Здесь х1 х2 ... xп - открытый текст, k1 k2 ... kп - ключ, y1 y2 ... yп - шифрованный текст.

Расшифрование состоит в сложении по модулю 2 символов у шифртекста с той же последовательностью ключей k:


yk = x.

Метод Вернама использует длинную случайную ключевую последовательность и при его реализации возникают проблемы, связанные с необходимостью передачи ключа.

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

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

В 1508 г. аббат из Германии Иоганн Трисемус написал печатную работу по криптологии под названием "Полиграфия". В этой книге он впервые систематически описал применение шифрующих таблиц, заполненных алфавитом в случайном порядке. Для получения такого шифра замены обычно использовались таблица для записи букв алфавита и ключевое слово. В таблицу сначала вписывалось по строкам ключевое слово, причем повторяющиеся буквы отбрасывались. Затем эта таблица дополнялась не вошедшими в нее буквами алфавита по порядку.

При шифровании находят в этой таблице очередную букву открытого текста и записывают в шифртекст букву, расположенную ниже ее, в том же столбце. Если буква текста оказывается в нижней строке таблицы, тогда для шифртекста берут самую верхнюю букву из того же столбца.

Пример. Для русского алфавита шифрующая таблица может иметь размер 4x8. Выберем в качестве ключа слово БАНДЕРОЛЬ. Шифрующая таблица примет вид:



Таблица 7 - Пример использования Шифрующей таблицы Трисемуса

Б А Н Д Е Р О Л
Ь В Г Ж 3 И И К
М П С Т У Ф X Ц
Ч Ш Щ Ы Ъ Э Ю Я

При шифровании с помощью этой таблицы

сообщения        В Ы Л Е Т А Е М П Я Т О Г О

получаем шифртекст    П Д К З Ы В З Ч Ш Л Ы Й С Й

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

Перед шифрованием исходное сообщение разбивают на биграммы. Каждая биграмма шифруется отдельно. Первую букву биграммы находят в левой таблице, а вторую букву - в правой таблице. Затем мысленно строят прямоугольник так, чтобы буквы биграммы лежали в его противоположных вершинах. Другие две вершины этого прямоугольника дают буквы биграммы шифртекста. Если обе буквы биграммы сообщения лежат в одной строке, то и буквы шифртекста берут из этой же строки. Первую букву биграммы шифртекста берут из левой таблицы в столбце, соответствующем второй букве биграммы сообщения. Вторая же буква биграммы шифртекста берется из правой таблицы в столбце, соответствующем первой букве биграммы сообщения.

Пример. Пусть имеются две таблицы размером со случайно расположенными в них русскими алфавитами. Две таблицы со случайно расположенными символами русского алфавита для шифра "двойной квадрат Уинстона" приведены в таблице 8.


Таблица 8 - Пример использования шифра Уинстона

Ж Щ Н Ю Р
И Ч Г Я Т
И Т Ь Ц Б
1 Ж Ь М О
Я М Е . С
3 Ю Р В Щ
В Ы П Ч

Ц : П Е Л
: Д У О К
Ъ А Н . X
3 Э Ф Г Ш
Э К С Ш Д
X А 1 Л Ъ
Б Ф У Ы

Предположим, что шифруется биграмма исходного текста ИЛ. Буква И находится в столбце 1 и строке 2 левой таблицы. Буква Л находится в столбце 5 и строке 4 правой таблицы. Это означает, что прямоугольник образован строками 2 и 4, а также столбцами 1 левой таблицы и 5 правой таблицы. Следовательно, в биграмму шифртекста входят буква О, расположенная в столбце 5 и строке 2 правой таблицы, и буква В, расположенная в столбце 1 и строке 4 левой таблицы, т.е. получаем биграмму шифртекста ОВ.

Если обе буквы биграммы сообщения лежат в одной строке, например ТО, то биграмма сообщения ТО превращается в биграмму шифртекста ЖБ. Аналогичным образом шифруются все биграммы сообщения:

Сообщение ПР ИЛ ЕТ   АЮ  _Ш  ЕС ТО   ГО

Шифртекст ПЕ ОВ ЩН ФМ  ЕШ  РФ БЖ  ДЦ

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




Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение высшего образования

Волгоградский государственный технический университет

Кафедра ЭВМ и систем




Лабораторная работа №1

  по курсу:  

«Методы и средства защиты информации»





Волгоград  2017г.

Вариант № 2.


Реализовать афинную криптографическую систему, выполняющую шифрование по формуле

Aa,b(j)=(a*j+b)(mod n)

В качестве переменных должны использоваться а, b и алфавит. Допускается взаимную простоту a и n при вводе пользователем не проверять, условившись сделать это условие входным при вводе данных. Предусмотреть возможность дешифрования ранее зашифрованного текста.


#include <iostream>

#include <stdio.h>

#include <clocale>

#include <stdlib.h>

#include <fstream>

#include <vector>

#include <algorithm>

#include <cstdlib>

#include <iterator>

#include <string>

using namespace std;

//взаимно простые числа

int euclid (int x, int y) {

  while (x!=y) {

    if (x>y)

      x-=y;

    else

       y-=x;

  }

   return x;

}

int main()

{

  setlocale(LC_ALL,"Russian");

  int shifr = 0;

  char alfvt = ' ';

  int n = 0;

  cout <<"Афинная криптосистема" << endl;

  cout <<"Aa,b(j)=(a*j+b)(mod n)" << endl << endl;

  //выбор операции (шифрование/дешифрование) и алфавита

  cout<< "Выбирите тип операции:\n"

          "        1 - Шифрование, \n"

          "        2 - Дешифровка" <<endl;

  int err = 0;

  do {

    cin>> shifr;

    if ((shifr == 1) || (shifr == 2))

      err = 1;

      getch();

    else {

      cerr << "Wrong number!" << endl;

    }

  }

  while (err == 0);

  cout<< "Выбирите алфавит:\n"

          "        e - English, \n"

          "        r - Русский" <<endl;

  do {

    cin>> alfvt;

    if ((alfvt == 'e') || (alfvt == 'r'))

      err = 2;

    else

      cerr << "Wrong number!" << endl;

  }

  while (err == 1);


  //выбор а и b

  if (alfvt == 'e') n = 66;

  else n = 78;

  cout <<"n = " <<n <<endl;

  int a = 0;

  int b = 0;

  cout <<"Введите а и b" <<endl <<endl

      <<"Внимание: для однозначности операций шифрования-дешифрирования"<<endl

      <<"          необходимо, чтобы a и n были взаимно просты!        "<<endl;

  do {

    cin >> a;

    cin >> b;

    if ((a <= 0) ||(b <= 0)) {

      cerr << "a и b должны быть неотрицательными числами!" << endl;

      cout << "Повторите ввод а и b:" <<endl;

      cin.clear();   //сброс всех ошибок потока

      cout <<err;

    }

    if (euclid (a, n) != 1) {

      cerr <<"a и n должны быть взаимно простыми!" <<endl;

      cout <<err;

      cin.clear();   //сброс всех ошибок потока

      cout <<err;

    }

    else

      err = 3;

  }

  while (err == 2);

  //формируем алфавит

  string abc_e = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  string abc_r = "абвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

  string abc_s = "1234567890.,- ";

  string abc = " ";

  if (alfvt == 'e') {

    abc = abc_e + abc_s;

  }

  else {

    abc = abc_r + abc_s;

  }

  vector <char> vecCharAbc(abc.begin(), abc.end());

  const int vecSizeAbc = vecCharAbc.size();

  copy(vecCharAbc.begin(), vecCharAbc.end(), ostream_iterator<char>(cout, ""));

  cout << endl;


  //шифруем алфавит

  vector<char> vecCharEncrypt(vecCharAbc);

  for (int i = 0; i < vecSizeAbc; i++) {

    int n = ((a * i) + b) % vecSizeAbc;

    vecCharEncrypt[i] = vecCharAbc[n];

    cout <<vecCharEncrypt[i];

  }

  switch (shifr) {

  case '1': {//Шифрование

    //Считываем файл в вектор

    ifstream fin("c:/Text.txt", ios_base::in); // открыли файл для чтения

    if (!fin.is_open()) // если файл не открыт

      cout << "File open error!\n";

    else {

      string s;  //Считываемое слово из файла

      getline (fin, s);

      vector<char> buffer(s.begin(), s.end());

      const int vecSizeBuf = buffer.size();

      fin.close(); // закрываем файл

      vector<char>bufForOutEn; //для записи в файл

      for (int i = 0; i < vecSizeBuf; i++) {

        char Ch = buffer[i];

        int numCh = find (vecCharAbc.begin(), vecCharAbc.end(), Ch)

            - vecCharAbc.begin();

        bufForOutEn[i] = vecCharEncrypt[numCh];

      }

    //запись в файл

        ofstream fout("c:/Text_ncr.txt");

    copy(bufForOutEn.begin(), bufForOutEn.end(), ostream_iterator<char>(fout, ""));

    fout.close();

    }

    break;

  }

  case '2': {//Дешифрование

    //Считываем файл в вектор

    ifstream fin("c:/Text.txt", ios_base::in); // открыли файл для чтения

      if (!fin.is_open()) // если файл не открыт

        cout << "File open error!\n";

      else {

        string s;  //Считываемое слово из файла

        getline (fin, s);

        vector<char> buffer(s.begin(), s.end());

        const int vecSizeBuf = buffer.size();

        fin.close(); // закрываем файл

        vector<char>bufForOutDc; //для записи в файл

        for (int i = 0; i < vecSizeBuf; i++) {

          char Ch = buffer[i];

          int numCh = find (vecCharEncrypt.begin(), vecCharEncrypt.end(),

              - vecCharEncrypt.begin();

          bufForOutDc[i] = vecCharAbc[numCh];

        }

        //запись в файл

        ofstream fout("c:/Text_dcr.txt");

        copy(bufForOutDc.begin(), bufForOutDc.end(), ostream_iterator<char>(fout, ""));

        fout.close();

      }

    break;

    }

  }

//  _getch();

}