Одноразовый шифровальный блокнот

Примером нераскрываемого шифра может служить так называемый “одноразовый шифровальный блокнот” - шифр, в основе которого лежит та же идея, что в шифре Цезаря. Назовем расширенным алфавитом совокупность букв алфавита, знаков препинания {. , : ; ! ? () – “ <пробел>}, число символов расширенного русского алфавита в данном варианте будет равно 44. Занумеруем символы расширенного алфавита числами от 0 до 43. Тогда любой передаваемый текст можно рассматривать как последовательность {an} чисел множества A={0,1,2,…,43}.

Предположим, что имеем случайную последовательность {cn} из чисел множества А той же длины, что и передаваемый текст - ключ. Складывая по модулю 44 число из передаваемого текста an с соответствующим числом из множества ключа cn:

an + cn º bn (mod 44), 0<=bn<=43

получим последовательность {bn} знаков шифрованного текста. Чтобы получить передаваемый текст, можно воспользоваться тем же ключом:

an º bn - cn (mod 44), 0<=an<=43

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

Описание программы шифрования информации с использованием классических

Криптосистем

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

Программа написана на языке Visual C++ с использованием библиотек CLR от Microsoft.

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

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

В программе реализованы следующие алгоритмы шифрования.

Алгоритм шифрования с помощью кода Цезаря

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

Код процедуры:

System::String^ cesar(System::String^ input){

System::String^ output;

System::String^ shft;

dialogCatchWord^ dCW = gcnew dialogCatchWord();

dCW->labelCatchWord->Text = “Enter shift”;

dCW->Text = “Shift”;

dCW->textBoxCatchWord->MaxLength = 2;

shft = dCW->ShowDlg();

System::Int32 shift;

shift = System::Int32::Parse(shft);

if ( shift > 25 ) {

output = “Error 103! Shift must be < 26!!!”;

return output;

}

for (int I = 0; I < input->Length; i++){

System::Char ch;

if ( input[i] >= ‘A’ && input[i] <= ‘Z’ ) {

ch = input[i] + shift;

if ( input[i] + shift > 90 ) ch -= 26;

}

else if ( input[i] >= ‘a’ && input[i] <= ‘z’ ) {

ch = input[i] + shift;

if ( input[i] + shift > 122 ) ch -=26;

}

else ch = input[i];

output = System::String::Concat( output, ch.ToString() );

}

return output;

}

Пример: veni vidi vici

yhql ylgl ylfl – закодировано со смещением 3

zirm zmhm zmgm – закодировано со смещением 4

Алгоритм шифрования с помощью решетки Кардано

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

Код процедуры:

System::String^ cardano(System::String^ input){

System::String^ output;

int* code;

code = new int[input->Length];

Random rnd;

for ( int i = 0; i < input->Length; i++ ) code[i] = rnd.Next(2);

for ( int i = 0; i < input->Length; i++ ) if ( code[i] && ( String::Compare(input[i].ToString(), " ") != 0 ) ) output = String::Concat(output, input[i].ToString());

else if ( String::Compare(input[i].ToString(), " ") == 0 ) output = String::Concat(output, " " );

return output;

}

Пример: mother washed a window-frame

010001 011011 0 011001011010

o r as ed in w fr m

Алгоритм шифрования с помощью «одноразового шифровального блокнота»

Словесное описание алгоритма: используется расширенный алфавит ABCDEFGHIJKLMNOPQRSTUVWXYZ!"(),-.?:; Каждый символ входного текста получает номер согласно позиции в расширенном алфавите. Далее с помощью генератора (псевдо)случайных чисел с интервалом от 0 до 36 создается последовательность той же длины, что и входной текст. Затем происходит посимвольное сложение по модулю 36 элементов входного текста и элементов последовательности. Получаемый выходной текст есть закодированный входной текст.

Код процедуры:

int getIntexLetter(System::Char letter, System::String^ aplphabeth){

int ret;

for ( int i = 0; i < aplphabeth->Length; i++ ) if ( letter == aplphabeth[i] ) ret = i;

return ret;

}

System::String^ notepad(System::String^ input){

System::String^ output;

System::String^ alphabeth;

System::Char ch;

input = input->ToUpper();

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

if ( i < 26 ) ch = i + 65;

if ( i == 26 ) ch = '!';

if ( i == 27 ) ch = '"';

if ( i == 28 ) ch = '(';

if ( i == 29 ) ch = ')';

if ( i == 30 ) ch = ',';

if ( i == 31 ) ch = '-';

if ( i == 32 ) ch = '.';

if ( i == 33 ) ch = '?';

if ( i == 34 ) ch = ':';

if ( i == 35 ) ch = ';';

if ( i == 36 ) ch = ' ';

alphabeth = System::String::Concat(alphabeth, ch.ToString());

}

int* code;

code = new int[input->Length];

Random rnd;

for ( int i = 0; i < input->Length; i++ ) code[i] = rnd.Next(37);

for ( int i = 0; i < input->Length; i++ ){

int index = getIntexLetter(input[i], alphabeth);

index += code[i];

if ( index > 36 ) index -= 36;

output = System::String::Concat(output, alphabeth[index].ToString());

}

return output;

}

Алгоритм шифрования с помощью таблицы Виженера

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

Выбирается какое-либо кодовое слово и записывается под входным текстом с определенным повторением.

Пример: mother washed a window-frame

father father f atherf ather

ROMOII BALOIU F WBUHFB-FKHQV

(кодовое слово father)

comput ercomp u tercom puter

OCFWYK ARUVQS U PMEFCI-ULTQV

(кодовое слово computer)

ABCDEFGHIJKLMNOPQRSTUVWXYZ

BCDEFGHIJKLMNOPQRSTUVWXYZA

CDEFGHIJKLMNOPQRSTUVWXYZAB

DEFGHIJKLMNOPQRSTUVWXYZABC

EFGHIJKLMNOPQRSTUVWXYZABCD

FGHIJKLMNOPQRSTUVWXYZABCDE

GHIJKLMNOPQRSTUVWXYZABCDEF

HIJKLMNOPQRSTUVWXYZABCDEFG

IJKLMNOPQRSTUVWXYZABCDEFGH

JKLMNOPQRSTUVWXYZABCDEFGHI

KLMNOPQRSTUVWXYZABCDEFGHIJ

LMNOPQRSTUVWXYZABCDEFGHIJK

MNOPQRSTUVWXYZABCDEFGHIJKL

NOPQRSTUVWXYZABCDEFGHIJKLM

OPQRSTUVWXYZABCDEFGHIJKLMN

PQRSTUVWXYZABCDEFGHIJKLMNO

QRSTUVWXYZABCDEFGHIJKLMNOP

RSTUVWXYZABCDEFGHIJKLMNOPQ

STUVWXYZABCDEFGHIJKLMNOPQR

TUVWXYZABCDEFGHIJKLMNOPQRS

UVWXYZABCDEFGHIJKLMNOPQRST

VWXYZABCDEFGHIJKLMNOPQRSTU

WXYZABCDEFGHIJKLMNOPQRSTUV

XYZABCDEFGHIJKLMNOPQRSTUVW

YZABCDEFGHIJKLMNOPQRSTUVWX

ZABCDEFGHIJKLMNOPQRSTUVWXY

Порядок выполнения работы

Цель лабораторной работы

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

Порядок выполнение работы

1. На диске C: создать дерево директорий следующего вида:

       
  одноразовый шифровальный блокнот - student2.ru   одноразовый шифровальный блокнот - student2.ru
 

C:\ Kript_# группы

 
  одноразовый шифровальный блокнот - student2.ru

Фамилия курсанта

ЛР # 1_ Классические криптографические системы.doc

2. Ознакомиться со сведениями о программе labWork1 , изложенными в разделе 2.

Запустить программу labWork1 (или, по указанию преподавателя, приложение Crypto_2)

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

Исходный текст для шифрования может быть подготовлен заранее и сохранен в файле *.txt или набирается непосредственно в окне программы.

4. Сохранить в отчете экранные формы, демонстрирующие процесс шифрования и дешифрования информации.

5. Создать собственную программу, которая бы реализовывала шифр Цезаря и решетку Кардано.

6. Включить в отчет о лабораторной работе ответы на контрольные вопросы, выбранные в соответствии с номером варианта из приложения 1.

7. Добавить к отчету о выполнении лабораторной работы титульный лист, содержащий:

· название университета,

· факультета (Информационных технологий),

· кафедры (Информационной безопасности),

· учебной дисциплины,

· номер и название лабораторной работы,

· фамилию и инициалы студента,

· город и год выполнения лабораторной работы.

Пронумеровать страницы отчета.

8. Сохранить отчет о выполнении лабораторной работы в папке, созданной при выполнении п. 1.

9. Завершить работу с ОС Windows.

Приложение 1

Номер варианта Контрольные вопросы
  1,5,7, 3,9,18   Какие из рассмотренных вами систем шифрования относятся к моноалфавитным подстановкам? В чем их особенность?  
2,4,6,8, 20,22,24   Какие из рассмотренных вами систем шифрования относятся к многоалфавитным подстановкам? В чем их особенность?  
11,13,15, 10,17,19 Какие из рассмотренных вами систем относятся к перестановочным ? Приведите примеры перестановочных шифров.
12,14,16 21,23,25 Назовите элементы классических систем шифрования, используемые в современных криптографических системах.

[1] Полибий (200-120 гг до н.э.) древнегреческий историк

2 Кардано Джероламо (1501-1576) - выдающийся итальянский математик, имя которого дошло до нас благодаря изобретенному им шарнирному механизму и первой публикации о методе решения уравнений третьей степени. Его перу принадлежит несколько книг по криптографии.

3 Блез Виженер (1523-1596) - французский посол в Риме, написал большой труд о шифрах. Квадратный шифр Виженера на протяжении почти 400 лет не был дешифрован и считался недешифруемым.

Наши рекомендации