Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Звіт
до лабораторної роботи №2
З курсу: “Методи і засоби криптологічних перетворень”
На тему: „АФІННІ шифри”
Львів – 2008
Мета: дослідити афінні шифри першого та вищих порядків..
Теоретичні відомості
1. Шифри простої заміни.
n-символьний алфавіт утотожнюємо з кільцем Zn. А саме, кожна буква замінюється своїм номером у алфавіті, прийому нумерація починається з нуля.
Наприклад, латинська абетка утотожнюється із Z26, а українська із Z33. Літера а української абетки трактується як 0, літера б як 1, в як 2 і т.д. Тепер до букв відкритого тексту ми можемо вільно застосовувати операції додавання та множення за відповідним модулем.
Шифр зсуву.
Ключ: s таке, що 0 < s < п.
Шифрування. У повідомленні кожна буква х заміщується буквою Е(х) = (х + s) mod n.
Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (х' + s') mod п, де s' = п - s. Величину зворотнього зсуву s' будемо називати дешифруючим ключем.
Лінійний шифр.
Ключ: а таке, що 0 < а < п і НСД (а, п) = 1.
Шифрування. У повідомленні кожна буква х заміщується буквою Е{х) = (ах) mod n.
Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (a'x') mod п, де а' — a-1 mod n — дешифруючий ключ.
Узагальненням і шифру зсуву, і лінійного шифру є Афінний шифр.
Ключ: a, s такі, що 0 < s < п, 0 < а <п і НСД (а, п) = 1.
Шифрування. У повідомленні кожна буква х заміщується буквою Е(х) = (ах + s) mod n.
Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (a'x'+ s’) mod n, де пара а’ – a-1 mod n, s’= (—a’s) mod n є дешифруючим ключем.
Як і кожен шифр простої заміни, афінний шифр піддається частотному аналізові.
2. Афінні шифри вищих порядків.
Подумаємо, як можна розширити монограмні шифри попереднього пункту так, щоб вони оперували з k-грамами для довільного k > 1. Спочатку введемо операцію додавання в Znk. Сумою векторів X=(x1,. . .,хk) і s=(s1,… ,sk) з Znk є вектор X + S = ((x1 + s1) mod n,…, (хk + sk) mod n). Zkn з операцією додавання є групою. Вектор —S = (n — s1,…, n — sk) є оберненим до вектора S — (s1,…,sk).
Шифр зсуву k-го порядку.
Ключ: S є Zkn.
Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою Е(Х) = X + S.
Дешифрування. Кожна k-грама X' криптотексту заміщується k-грамою D(X') = X' + 5’, де S' = —S є дешифруючим ключем.
Лінійний шифр k-го порядку.
Ключ: А Є GLk(Zn).
Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою Е(Х)= АХ.
Дешифрування. Кожна k-грама Х’ криптотексту заміщується к-грамою D(X') = A'X', де А’ = А-1 — дешифруючий ключ.
Афінний шифр k-го порядку.
Ключ: А Є GLk{Zn} і S Є Znk.
Шифрування. Повідомлення розбивається на k-грами. Кожна k-грама X заміщується k-грамою Е(Х) = АХ + S.
Дешифрування. Кожна k-грама X' криптотексту заміщується k-грамою D{X’} = А’X’ + S’, де А’ = А-1 і S’ = -A’S — дешифруючий ключ.
Шифр зсуву з s=54
Ключ: s=54 mod 26=2.
Шифрування. У повідомленні кожна буква х заміщується буквою Е(х)= (х + s) mod n.
Дешифрування. У криптотексті кожна буква х' заміщується буквою D(x') = (х' + s') mod п, де s' = п – s=26-2=24.
Відкритий текст
Iwanttogotoschool
Зашифровани текст
Kycpvvqiqvquejqqn
Розшифровани текст
Iwanttogotoschool
Блок схема алгоритму
Программа реалізації шифру зсуву
#include<stdio.h>
int main()
{
char c,c2[255];
int i,s=76,s1,k=0;
printf("Enter text: ");
s1=26-s;
while (s1>26) s1-=26;
while (s1<0) s1+=26;
while (c!='\n')
{
scanf("%c",&c);
i=c;
if ((i>=65) && (i<=90)){
i+=s;
while (i>90) i-=26;
}
if ((i>=97) && (i<=122)){
i+=s;
while (i>122) i-=26;
}
c2[k]=i;
k++;
}
printf("S=%d S'=%d\nZawufrovanuj text: ",s,s1);
k=0;
while(c2[k]!='\n')
{
printf("%c",c2[k]);
i=c2[k];
if ((i>=65) && (i<=90)){
i+=s1;
while (i>90) i-=26;
}
if ((i>=97) && (i<=122)){
i+=s1;
while (i>122) i-=26;
}
c2[k]=i;
k++;
}
printf("\nRozwufrovanuj text: ");
k=0;
while(c2[k]!='\n')
{
printf("%c",c2[k]);
k++;
}
getchar();
return 0;
}
Результат виконання шифрування
Відкритий текст
Iwanttogotoschool
Зашифровани текст
Kycpvvqiqvquejqqn
Розшифровани текст
Iwanttogotoschool
Висновок: під час виконання даної лабораторної роботи ми ознайомилися з алгоритмом афінних шифрів та за допомогою програмної реалізації коду афінного шифру зсуву зашифрували повідомлення “I want to go to school” за допомогою ключа 76 та отримали як результат зашифрований текст Lzdqwwjrwrvfkrro.