DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

ДОСЛІДЖЕННЯ АФІННИХ ШИФРІВ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Не вказано
Кафедра:
Кафедра захисту інформації

Інформація про роботу

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Методи та засоби криптологічних перетворень
Група:
ІБ-44

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»  Звіт до лабораторної роботи №2 з курсу «Методи та засоби криптологічних перетворень» ДОСЛІДЖЕННЯ АФІННИХ ШИФРІВ Виконав: студент групи ІБ-44 Перевірив: Львів – 2010 Мета роботи - вивчити алгоритм закодування відкритого тексту афінним шифром та навчитися розробляти програмне забезпечення для реалізації цього алгоритму на комп'ютері. Теоретичні відомості 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 — дешифруючий ключ. Приклад: Зашифрувати лінійним шифром другого порядку біг раму Остаточна версія програми зашифрування #include<stdio.h> #define n 3 char A_asciicode[26] = {'a','b','c','d','e','f','g','h','i','j','k','l', 'm','n','o','p','q','r','s','t','u','v','w','x','y','z' }; int matrix[n][n] = { 9, 1, 3, 11,1,4, 14,5,1 } ; int main() { FILE *IN, *OUT; int jik; int text[n][n],nnn[n][n]; int i,j,z,s,ch,k,q; IN=fopen("C:\\str\\d2.txt","r"); OUT=fopen("C:\\str\\vd.txt","w+"); i=0; j=0; while(1) { ch=fgetc(IN); if(feof(IN)) break; k=0; //system("pause"); while(ch!=A_asciicode[k]) { k++; printf("k=%i",k) ; } printf("%i\n",i) ; if(i>2) { j++; i=0; } text[i++][j]=k; } for(z=0;z<n;z++) for(i=0;i<n;i++) { s=0; for(j=0;j<n;j++) { q=matrix[i][j]*text[j][z]; s+=q; } nnn[i][z]=s; } for(i=0;i<n;i++) for(j=0;j<n;j++) fprintf(OUT, "%c", A_asciicode[nnn[j][i]%26]); return 0; } Остаточна версія програми зашифрування #include<stdio.h> #define n 3 char A_asciicode[26] = {'a','b','c','d','e','f','g','h','i','j','k','l', 'm','n','o','p','q','r','s','t','u','v','w','x','y','z' }; int matrix[n][n] = { 1,2,15,25,25,7,17,3,22} ; int main() { FILE *IN, *OUT; int ch,k; int text[n][n],nnn[n][n]; int i=0,j=0,q,s,z; for(i=0;i<n;i++) { for(j=0;j<n;j++) text[i][j]=-1; } IN=fopen("C:\\str\\vd.txt","r"); OUT=fopen("C:\\str\\droz.txt","w+"); i=0; j=0; while(1) { ch=fgetc(IN); if(feof(IN)) break; k=0; while(ch!=A_asciicode[k]) k++; if(i>2) { j++; i=0; } text[i++][j]=k; } for(z=0;z<n;z++) for(i=0;i<n;i++) { s=0; for(j=0;j<n;j++) { q=matrix[i][j]*text[j][z]; s+=q; } nnn[i][z]=s; } for(i=0;i<n;i++) for(j=0;j<n;j++) fprintf(OUT, "%c", A_asciicode[nnn[j][i]%26]); return 0; } Результати виконання програми  Висновок: ми дослідили шифр простої заміни-лінійний шифр зсуву і реалізувала його програмно. Я побачила, що цей шифр є вразливим до атаки з відомим відкритим текстом. Якщо суперник знає, що шифруючи відображення E(X)=AX
Антиботан аватар за замовчуванням

2015

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!