МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
Кафедра ЗІ
Лабороторна робота №1
з курсу «Методи і засоби криптологічних перетворень»
на тему: «Класичні методи шифрування. Шифр з автоключем»
Мета роботи: ознайомитися з класичними методами шифрування (шифр простої заміни, поліграмні, поліалфавітні шифри, шифрування блоками, шифри перестановки).
Завдання:
Написати програму на мові програмування С/С++ для реалізації методу шифрування/дешифрування відкритого тексту за допомогою шифру з автоключем (довжина ключа – 3).
Короткі теоретичні відомості
Шифр з автоключем відноситься до класу полі алфавітних шифрів і ґрунтується на ідеях Віженера і Кардано. Подібно до шифру Віженера, криптотекст отримують сумуванням відкритого тексту із послідовністю букв такої ж довжини. Проте цю послідовність записують дещо інакше, ніж у шифрі Віженера – спочатку записують ключ, а справа до нього дописують початковий відрізок самого відкритого тексту. Розглянемо це на прикладі:
БОРОНІТЬКОРОЛІВНУВІДВОРОГІВ
+ КЛЮЧБОРОНІТЬКОРОЛІВНУВІДВОР
ЛАОЇОЩЗЛЮЩЗЛЩЩТВДЙЙТХРЮУДЩТ
Відкритий текст і криптотекст у шифрі з автоключем записуються у одному і тому ж алфавіті. Для знаходження криптотексту зручно користуватися таблицею Віженера:
На відміну від шифру простої заміни, при використанні шифру з автоключем, однаковим буквам у відкритому тексті можуть відповідати різні букви у криптотексті. Ця обставина безперечно ускладнює частотний аналіз. Частотний аналіз шифру з автоключем ґрунтується на частотному аналізі шифру Віженера. Розглянемо його детальніше на прикладі
Шифр Віженера влаштований так, що при довжині ключа 4, кожна з 4 підпослідовностей відкритого тексту
перетворюється до деякого шифру зсуву (на 14, 15, 31 та 27 позицій). За умови, що текст досить довгий, всі чотири довжини зсувів знаходяться стандартним підрахунком частот букв у відповідних підпослідовностях криптотексту. Якщо прискіпливо подивитися на текст, то можна побачити, що триграма аої зустрічається тричі, а біграма ца – двічі. Це означає, що у відкритий текст в відповідних місцях входять одна і та ж сама триграма і біграма (оро та ів). Це означає, що відстань між двома однаковими поліграмами відкритого тексту кратна довжині ключа. Відстані між різними входженнями триграми аої дорівнюють 8 і 12. Довжина ключа має ділити обидва ці числа, тобто вона дорівнює 1, 2 або 4 – залишається лише перепробувати три можливі варіанти.
Текст програми
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
void decrypting(char kod[],char al[],char key[],char encrypt[])
{int k1,k2,k;int i,j;int c1,c2;i=0;k1=0;k2=0;
for (i=0;i<30;i++)
{encrypt[i]=0;}
for (i=0;kod[i]!='\0';i++)
{c1=kod[i];c2=key[i];
for (k=0;k<=51;k++)
{ if (c1==al[k])
k1=k;}
for (k=0;k<=25;k++)
{ if (c2==al[k])
k2=k;}
encrypt[i]=al[k1-k2];
} }
void encrypting(char sl[],char al[],char key[],char kod[])
{int k1,k2,k;int i,j;int c1,c2;i=0;k1=0;k2=0;
for (i=0;i<30;i++)
{kod[i]=0;}
for (i=0;sl[i]!='\0';i++)
{c1=sl[i];c2=key[i];
for (k=0;k<=25;k++)
{ if (c1==al[k])
k1=k;}
for (k=0;k<=25;k++)
{ if (c2==al[k])
k2=k;}
kod[i]=al[k1+k2];
}}
void main()
{ clrscr();
char alfavit[]="abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
char opentext[]="sogodnisereda";
char key[]="popsogodniser";
char cryptotext[]="hcvgrtwvrzwhr";
char encrypted[30];
char decrypted [30];
int i ;
for (i=0;i<30;i++)
{encrypted[i]=0;decrypted[i]=0;}
encrypting(opentext,alfavit,key,encrypted);
decrypting(cryptotext,alfavit,key,decrypted);
printf("\n cryptotext :");
printf("%s",encrypted);
printf("\n opentext :");
printf("%s",decrypted);
getch();
}
Результат виконання програми
Блок-схема підпрограми дешифрування (decrypting)
ні
так
ні
так
Блок-схема підпрограми шифрування (encrypting)
ні
так
ні
так
Блок-схема головної програми
Висновки: на даній лабораторній роботі я реалізувала класичний метод шифрування, а саме шифр з автоключем (довжиною 3), перевагою такого шифру є простота реалізації, а недоліком-недостатня стійкість (хоча він є стійкіший у порівнянні, н-д, з шифром зсуву). Цей шифр піддається частотному аналізу, і останній буде більш ефективним, коли довжина тексту співвідносно з довжиною ключа є великою.