Зміст
Шифрування афінним шифром.
Завдання
Теоретичні відомості
Вибір ключів
Блок-схема алгоритму
Таблиця ідентифікаторів
Текст програми
Відкритий текст
Результат шифрування
Шифрування шифром RSA
Завдання
Теоретичні відомості
Вибір ключів
Зашифрування
Розшифрування
Висновки
Завдання
Вибрати ключі та розробити програму для за шифрування файлу даних заданим афінним шифром. Тип афінного шифру визначається останньою цифрою i НЗК. Об‘єм алфавіту визначається передостанньою цифрою j НЗК і дорівнює .
i
i mod 6
Тип афінного шифру
j
Розрядність алфавіту
Об‘єм алфавіту
3
3
Зсуву -го порядку
0
5
32
Теоретичні відомості
Афінні шифри- підклас шифрів заміни, що включає включає, як частковий випадок шифр Віжінера і навіть шифр перестановки з фіксованим періодом.
N-символьний алфавіт ототожнюємо з кільцем . А саме кожна буква замінюється своїм номером у алфавіті, причому нумерація починається з нуля. Наприклад, латинська абетка ототожнюється із , а українська із . Літера а української абетки трактується як нуль, літера б як 1, в як 2. Тепер до букв відкритого тексту. Тепер до букв відкритого тексту ми можемо вільно застосовувати операцію додавання та множення за відповідним модулем.
Шифр зсуву.
Ключ: таке, що .
Шифрування. У повідомлені кожна буква заміщується буквою .
Дешифрування. У криптотексті кожна буква заміщуються буквою ,де . Величину зворотнього зсуву будемо називати дешифруючим ключем.
Афінні шифри вищих порядків.
Для розширення попереднього методу(монограмний шифр) потрібно щоб вони оперували з -грамами для довільного . Спочатку введемо операцію додавання в . Сумою векторів і з є вектор . з операцією додавання є групою. Вектор є оберненим до вектора .
Шифр зсуву -го порядку (шифр Віжінера з періодом ).
Ключ. .
Шифрування. Повідомлення розбивається на -грами. Кожна -грама заміщується -грамою .
Дешифрування. Кожна -грама заміщується -грамою , де є дешифруючим ключем.
Вибір ключів
Ключ : {5, 7, 17, 23, 29}
Блок-схема алгоритму
Таблиця ідентифікаторів
Ідентифікатор
Тип ідентифікатора
Опис
n=32
int
Глибина алфавіту
key[5]={5,7,17,23,29}
int
Ключ зашифрування
*r_f
FILE
Вхідний файл
*w_f
FILE
Вихідний (зашифрований) файл
r_eof=0
int
Прапорець контролю кінця файлу
x_OK=1
int
Прапорець готовності символу
n_x=0
int
Лічильник символів (для блокового шифрування)
r_buf
unsigned long
Вхідний буфер даних (бітів)
w_buf = 0
unsigned long
Вихідний буфер даних (бітів)
x
unsigned long
Поточний символ
r_count=32
int
Лічильник бітів вхідного буфера
w_count=32
int
Лічильник бітів вихідного буфера
Текст програми
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void main(void)
{
int n=32;
int key[5] = {5, 7, 17, 23, 29};
char *s;
FILE *r_f, *w_f;
int r_eof=0;
int x_OK=1;
int n_x=0;
unsigned long r_buf;
unsigned long w_buf = 0;
unsigned long x;
int r_count=32;
int w_count=32;
if ( (r_f=fopen("c:\\plain.f", "rb")) == NULL )
{
printf("cannot open the file data.fb");
getch();
exit(1);
}
else
if ( (w_f=fopen("c:\\encrypt.f", "wb")) == NULL )
{
printf("cannot open the file data.fbc");
getch();
exit(1);
}
else
{
if (fread(&r_buf, 1, 4, r_f) != 0)
while (!r_eof)
{
if (r_count<=0)
{
if (fread(&r_buf, 1, 4, r_f) != 0)
{
x |= (r_buf << (5+r_count)) & (n-1);
r_buf >>= (-r_count);
r_count += 32;
x_OK = 1 & !(r_count==32);
}
else
{
r_eof = 1;
x_OK = 1;
}
}
else
{
x = r_buf & (n-1);
r_buf >>= 5;
r_count -= 5;
x_OK = 1 & (r_count>=0);
}
if (x_OK)
{
x = (unsigned int)(fmod(x+key[n_x], n));
if (n_x==4)
n_x=0;
else
n_x++;
// printf("%4x", x);
itoa(x, s, 10);
fputs(strcat(s, " "), stdout);
w_buf |= x << (32-w_count);
w_count -= 5;
if (w_count<=0)
{
fwrite(&w_buf, 4, 1, w_f);
w_buf &= 0;
if (w_count==0)
w_count = 32;
else
{
w_buf |= x >> (5+w_count);
w_count += 32;
}
}
}
}
fclose(r_f);
fclose(w_f);
}
}
Відкритий текст
Виписати можливі біт, що використовуються для формування маски підмережі.
Викреслити комбінації, де значення усіх одночасно чи Це необхідно зробити тому, що вони представляють недопустимі (службові) IP-адреси: комбінація означає всю локальну мережу, а співпадає з маскою підмережі.
Перевести в десятковий формат значення для кожної підмережі. Кожне таке значення представляє одну мережу використовується для визначення діапазону хостів в ній.
Ця процедура проілюстрована на рисунку 3.
255 255 224
Рисунок 3. Перший спосіб визначення діапазонів ідентифікаторів підмереж, що входять в об’єднану мережу
Зазначимо, що ідентифікатори підмереж, складаються з одних нулів та одних одиниць, називаються адресами підмереж спеціального призначення (special case subnet addresses). Ідентифікатор з одних одиниць застосовується для широкомовлення в мережі. Ідентифікатор з одних нулів означає локальну мережу. При на підмережі такі ідентифікатори використовувати не рекомендується. Але використання можливим, якщо маршрутизатори та все інше мережеве обладнання Вашої мережі буде підтримувати. Обмеження пов’язані з використанням, описуються в RFC 950.
Другий спосіб визначення ідентифікаторів підмереж швидший тому ефективніший, попередній, коли необхідно відвести маску підмережі більше чотирьох біт.
Записати одиницями кількість біт, необхідних для ідентифікаторів підмереж доповнити справа нулями до одного октету. Наприклад, якщо використовується два біти для ідентифікаторів підмереж, то необхідно записати це значення як 11000000.
Перетворити найменший значимий в десяткове число – Ви отримаєте приріст для кожної наступної підмережі. Для нашого прикладу це число рівне 64.
Починаючи з нуля, виписати послідовно отримувані з допомогою приросту значення аж до значення 256.
Ця процедура проілюстрована на рисунку 4.
Результат шифрування
7 13 11 22 11 25 14 15 23 20 1 24 31 7 13 2 21 8 16 20 19 27 28 19 16 10 15 19 21 22 15 5 29 24 5 23 22 8 26 1 7 14 11 12 11 28 10 15 31 12 1 12 0 14 8 1 26 8 22 2 20 5 24 21 28 12 15 25 21 18 4 6 17 24 26 2 21 9 10 26 24 30 9 24 27 27 30 14 22 4 13 31 31 7 4 3 17 24 17 30 23 30 0 13 1 12 2 28 5 21 28 3 23 22 9 2 25 23 31 30 7 13 11 12 11 29 30 13 8 28 31 24 31 16 0 2 7 2 17 26 19 29 24 19 16 18 2 18 5 24 20 29 16 28 8 5 9 3 14 25 5 0 10 18 11 21 6 15 28 12 0 2 15 22 0 9 26 0 19 4 0 1 20 27 11 12 0 12 5 20 4 5 17 6 25 0 21 8 26 1 28 14 11 24 31 16 30 13 23 6 0 18 31 14 4 1 28 16 3 6 3 29 12 20 29 30 0 18 6 20 12 3 25 14 25 22 21 1 31 27 19 14 12 30 12 27 7 21 16 20 0 8 19 8 24 2 20 24 17 30 23 30 20 21 2 12 0 20 6 22 8 3 19 22 23 4 22 16 2 27 1 14 25 17 27 23 26 13 5 28 0 14 16 15 8 3 15 24 18 4 16 23 17 28 14 4 1 24 6 16 12 3 31 14 21 12 2 5 23 1 14 9 5 17 31 21 26 13 7 12 30 10 0 11 8 12 7 2 17 26 19 29 24 19 16 18 2 18 5 24 20 29 16 30 5 1 5 4 14 26 5 6 14 24 11 2 9 21 25 12 1 4 0 7 9 2 21 8 17 30 3 28 4 22 10 4 3 18 25 19 28 3 1 6 22 18 5 10 10 2 5 8 9 24 15 29 6 14 10 18 29 6 31 7 16 1 7 8 5 30 23 26 20 27 9 12 31 20 6 18 0 4 15 30 5 3 5 10 9 25 17 22 10 24 28 23 2 13 10 18 16 1 17 28 25 30 12 24 19 8 19 24 8 19 14 28 3 2 5 13 13 3 17 24 22 16 5 9 22 28 23 30 11 20 11 22 10 14 0 4 13 15 0 14 0 3 19 24 15 2 20 23 13 19 10 12 31 0 22 15 28 4 30 22 28 6 9 3 6 26 4 14 25 11 11 28 2 13 4 20 0 6 28 7 25 2 26 22 16 22 3 25 20 21 2 28 0 24 2 20 5 11 27 13 24 18 5 7 14 25 5 24 13 24 11 26 30 13 23 22 30 2 31 7 28 3 12 0 18 24 3 6 20 27 12 12 3 28 5 15 12 5 3 30 21 10 5 6 22 28 31 12 25 19 11 23 30 14 10 4 13 31 15 9 0 3 12 8 16 4 20 23 25 19 5 28 1 14 5 21 8 4 2 14 25 2 21 2 6 27 31 28 13 16 28 29 6 16 23 30 30 30 15 22 0 9 9 24 17 12 3 29 20 19 20 20 0 12 21 19 4 6 17 24 22 12 18 1 22 26 5 6 10 20 27 27 22 15 23 6 2 4 15 15 8 3 26 6 15 30 7 24 20 27 10 4 19 4 5 20 25 8 27 7 18 4 22 1 19 26 21 30 12 4 28 23 26 13 10 4 1 8 31 7 25 2 23 8 18 4 0 28 12 22 14 28 3 18 6 20 16 3 17 6 24 6 21 1 11 26 5 14 25 23 12 25 14 15 10 12 0 28 15 16 0 9 26 2 2 23 5 12 17 27 29 6 15 17 25 13 13 13 6 0 10 5 9 1 23 1 5 8 25 23 31 21 7 21 23 30 13 7 19 16 17 11 28 18 31 29 7 23 17 27 29 6 15 17 25 13 5 11 17 24 5 9 10 10 7 3 5 8 25 23 31 21 7 21 23 6 8 27 17 31 0 2 24 16 19 24 19 30 28 20 29 30 19 13 25 13 1 0 22 30 25 22 22 5 30 26 5 16 13 22 11 28 14 15 10 10 29 8 19 8 0 2 14 0 18 30 3 2 8 19 10 20 2 16 6 13 21 3 4 28 21 4 21 1 22 25 19 22 12 30 8 22 10 21 10 2 30 18 15 13 8 3 15 24 20 4 16 28 20 19 15 28 2 18 22 22 15 3 17 16 24 12 18 3 10 26 10 14 13 2 11 24 26 22 23 6 3 4 31 7 5 1 28 8 18 6 3 6 28 21 25 12 15 21 5 13 29 4 18 14 1 26 18 3 14 26 5 22 12 30 12 21 23 14 28 4 1 18 31 10 12 3 20 1 25 23 5 12 13 15 29 4 0 12 5 13 4 5 25 30 24 2 21 7 23 1 30 30 12 24 15 30 25 13 28 12 0 12 0 11 16 3 26 6 17 30 19 0 12 20 13 12 1 18 9 20 20 29 21 30 24 16 21 9 14 25 11 14 28 23 15 29 18 14 2 4 29 16 31 7 24 4 25 24 22 0 4 6 20 27 4 12 15 13 5 15 28 4 25 6 26 6 25 7 6 27 16 6 29 28 11 21 15 15 23 4 13 3 31 9 20 2 15 0 20 30 7 30 4 19 5 20 2 2 5 24 24 6 29 24 5 31 21 1 22 25 13 30 9 24 11 4 18 15 19 12 1 6 0 7 29 1 11 24 19 8 3 31 20 19 9 12 1 18 9 20 20 29 21 30 24 16 21 9 14 25 11 14 25 25 28 28 30 13 13 28 17 8 15 12 16 4 20 8 18 4 19 30 20 27 12 12 3 2 21 16 28 4 17 22 26 16 5 7 14 26 4 14 25 7 15 30 8 31 28 24 29 25 7 7 14 18 7 10 15 31 27 0 6 3 29 30 3 27 30 14 30 20 22 26 26 5 25 1 8 9 9 26 13 1 19 30 20 31 28 24 1 25 19 14 29 9 25 22 16 8 3 29 28 21 5 12 4 24 2 18 8 3 3 14 24 6 22 1 19 25 5 24 12 0 27 27 10 14 12 4 13 3 31 9 0 2 20 24 17 10 20 5 20 27 4 12 31 20 6 22 0 4 2 14 24 10 5 10 2 20 23 14 16 26 28 4 10 21 27 28 31 6 0 7 29 4 15 24 19 26 19 28 12 20 9 28 2 22 21 18 28 3 30 6 24 4 22 1 31 25 5 8 12 2 11 29 30 13 29 28 17 4 19 7 5 27 11 0 16 24 19 0 20 20 17 4 19 6 5 13 16 5 31 30 25 6 25 4 26 1 19 14 10 18 11 25 30 15 23 6 0 14 16 12 12 27 9 24 31 25 3 26 8 20 29 4 4 18 5 26 7 11 28 14 24 26 21 1 6 26 1 22 12 30 12 21 23 14 28 4 1 18 31 10 12 3 21 18 31 27 17 31 20 20 29 14 2 18 5 13 1 4 4 28 22 30 5 3 26 27 10 30 10 30 8 21 15 15 23 20 31 14 28 7 9 27 11 0 16 24 19 0 20 20 17 4 19 6 5 13 16 5 31 30 25 22 21 1 31 25 13 30 11 20 11 29 10 14 8 20 1 4 31 8 12 3 9 24 15 2 20 27 20 27 10 20 0 18 25 21 28 3 27 14 24 30 5 3 14 26 9 6 13 12 8 30 26 16 8 28 4 4 19 7 29 29 18 0 16 30 7 24 20 20 7 28 2 18 6 17 12 5 3 30 21 0 5 7 22 28 5 8 12 20 11 24 22 14 31 20 29 24 31 13 16 10 7 10 22 18 3 3 12 20 29 6 2 18 5 21 8 6 1 22 25 10 22 5 22 25 5 30 13 20 11 29 10 14 23 14 1 8 31 7 5 1 24 0 16 30 23 0 7 20 21 20 0 18 25 19 28 3 1 6 22 18 5 3 2 25 10 14 25 19 27 21 22 14 23 4 30 2 31 7 20 2 20 16 22 30 7 8 20 19 21 28 2 16 2 13 21 4 22 30 25 16 21 4 6 19 5 16 9 30 12 23 30 13 23 22 0 14 28 9 8 3 23 24 17 22 3 0 28 19 29 28 3 2 5 20 5 11 31 5 21 30 5 3 18 25 10 22 12 18 27 4 10 21 6 20 0 12 31 0 27 4 14 24 15 24 3 0 19 27 4 12 15 21 5 17 16 4 31 30 25 22 5 9 2 27 5 22 12 18 27 4 26 14 3 30 13 3 15 14 0 2 24 16 19 26 20 0 4 22 14 4 6 18 25 14 8 11 3 9 14 11 11 1 27 4 26 8 29 19 15 11 15 18 27 3 1 14 16 8 0 2 16 24 31 31 4 30 12 20 14 4 19 20 5 13 13 3 25 22 22 0 21 1 22 27 10 22 12 18 27 4 10 21 10 2 30 18 15 13 8 3 15 24 20 4 16 28 20 19 15 28 2 18 22 22 15 3 17 16 24 12 18 3 10 26 10 14 13 2 11 24 10 21 15 20 29 24 31 9 0 4 15 0 17 30 7 0 12 20 9 4 3 18 9 15 24 5 22 14 23 10 22 5 2 25 18 6 29 8 12 25 14 14 3 30 13 5 31 14 28 2 12 24 19 8 19 25 8 20 16 18 1 10 25 13 13 4 31 22 23 22 21 1 11 26 10 30 12 26 27 31 22 7 27 12 0 4 31 7 5 1 26 22 16 2 3 25 24 21 15 12 1 18 25 19 8 3 2 14 23 12 22 1 19 26 24 12 10 16 27 23 10 15 28 20 30 14 28 7 1 1 26 14 17 22 20 3 8 19 29 30 4 14 5 22 8 4 1 30 28 2 5 11 26 1 6 6 29 28 12 28 27 18 1 21 22 8 15 14 0 2 24 24 15 2 20 27 20 27 11 12 0 2 21 19 8 4 7 22 28 30 21 5 26 1 15 6 29 14 11 3 18 14 10 10 1 12 0 21 0 9 8 16 3 2 20 29 17 27 10 20 0 14 21 13 28 5 4 28 22 0 21 5 14 27 5 8 10 14 27 4 10 21 10 2 30 18 15 13 8 3 15 24 20 4 16 28 20 19 15 28 2 18 22 22 15 3 17 16 24 12 18 3 10 26 10 14 13 2 11 24 10 21 27 20 0 6 31 14 8 1 20 24 17 2 20 27 20 27 14 4 2 18 6 13 16 3 17 30 5 31 5 10 6 26 4 14 12 8 11 21 23 13 5 4 13 3 31 9 20 2 21 16 15 26 19 23 9 20 7 28 3 28 5 22 20 5 31 24 5 31 19 1 22 26 21 14 11 12 27 26 10 13 27 4 16 7 3 22 8 2 0 8 18 30 7 24 20 20 7 28 2 18 6 17 12 5 3 14 24 10 5 10 2 20 23 14 16 26 28 4 10 21 27 20 29 8 31 7 1 1 26 6 19 14 19 23 1 19 8 4 6 18 9 22 23 3 22 6 24 10 22 5 10 27 24 28 11 24 11 30 2 14 7 28 17 12 31 7 25 2 26 22 16 22 3 25 20 21 2 28 0 10 25 13 13 5 31 30 5 31 5 3 18 26 6 22 14 30 8 23 30 14 5 4 13 21 31 7 28 2 15 0 19 30 19 0 20 20 29 22 4 28 5 13 1 3 30 30 21 20 6 3 14 26 18 6 16 24 15 4 18 14 23 6 17 9 20 15 29 11 23 18 3 29 8 31 9 28 10 21 9 15 19 15 8 5 22 14 25 10 21 8 26 27 13 30 13 8 11 21 27 14 23 12 31 0 15 9 20 2 31 24 17 16 19 23 13 19 10 12 31 0 6 17 24 4 25 6 23 6 9 2 26 1 9 22 10 26 28 4 18 15 1 20 0 12 15 9 0 9 30 24 17 0 4 28 12 20 29 22 12 18 25 30 8 4 17 8 24 10 22 9 26 26 17 14 9 12 8 30 30 13 23 22 0 8 0 11 0 3 26 30 19 2 20 23 1 19 8 4 6 18 25 18 0 4 23 6 24 2 5 16 25 1 18 14 9 26 12 30 22 15 6 12 0 4 15 22 31 9 22 16 3 6 19 29 8 19 13 20 0 30 21 22 31 12 17 24 14 28 5 16 26 1 18 14 9 8 12 28 22 13 5 4 13 5 31 15 0 2 17 16 17 30 19 25 0 21 29 22 4 28 5 13 1 5 25 6 25 28 21 8 26 1 21 6 29 28 27 27 30 13 23 14 18 15 20 14 17 6 17 9 10 26 3 2 20 20 10 12 31 14 22 24 8 4 17 16 22 6 25 7 6 27 16 6 16 16 31 21 15 13 31 28 0 24 15 15 0 1 25 24 17 30 23 30 12 20 14 4 1 24 2 15 0 4 19 6 24 2 21 1 15 26 23 14 13 8 11 27 22 15 25 4 29 2 15 16 31 9 14 24 31 5 19 30 16 20 11 12 2 14 21 14 0 4 15 30 5 3 21 9 26 26 21 30 12 26 12 30 22 15 23 22 30 2 31 7 28 3 12 0 18 24 3 6 20 27 29 28 0 18 25 15 0 4 17 16 22 0 21 1 22 27 10 22 12 18 27 4 10 21 9 6 18 19 20 14 17 6 17 1 12 28 20 23 13 20 13 28 2 30 22 15 24 3 4 30 25 6 21 1 19 26 21 30 12 30 24 26 2 16 8 20 1 8 0 14 8 1 7 0 18 30 19 23 5 20 29 12 15 17 6 17 12 5 4 6 24 26 5 10 26 1 25 24 28 17 29 10 7 17 23 29
Завдання
Зашифрувати Слово відкритого тексту за алгоритмом RSA. Слово визначається останньою буквою і НЗК. Для генерування ключів використати числа p та q, які визначаються передостанньою цифрою j НЗК.
i
Слово
j
p
q
3
ТРИ
0
3
17
Теоретичні відомості
Генерування ключів. Вибирають два досить великі прості числа . Для їх добутку значення функції Ойлера дорівнює . Далі випадковим чином вибирають елемент , що не перевищує значення і взаємно простий з ним. Іншими словами, є випадковим елементом із множини . Для за алгоритмом Евкліда знаходять елемент , обернений до в , тобто такий, що і
.
Як результат покладають:
Відкритий ключ:
Таємний ключ:.
Шифрування відбувається блоками. Для цього повідомлення записують у цифровій формі і розбивають на блоки так, що кожен блок позначає число, яке не перевищує . Якщо блок записаний у вигляді двійкового слова довжини , то повинна виконуватись нерівність . Блок розглядається як елемент кільця і як такий, може підноситись до степеня за модулем .
Алгоритм шифрування у системі полягає у піднесені до степеня . Записується це так:
Вибір ключів
Зашифрування
Т
Р
И
23
21
7
23
21
7
44
21
40
Розшифрування
Висновки
Під час виконання даної курсової роботи я вдосконалив свої знання про симетричне і асиметричне шифрування, а також блокове шифрування.
Проблема 1: В мові програмування С з файлу можна зчитувати інформацію побайтно (8, 16, 32, ..., n*8 біт), а в завданні поставлена задача шифрування 5-ти бітних символів.
Вирішення 1: Читати в кілька байт з файлу в буфер, а потім вже операціями зсуву та побітового множення і додавання вибирати по 5 біт.
Проблема 2: Співпадання деяких зашифрованих символів (шифрування RSA) з символами відкритого тексту.
Вирішення 2: Не вирішена. Можливо, через те, що малі ключ і модуль.
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра автоматики та телемеханіки
Курсова робота
з курсу: „Методи та засоби криптографічних перетворень”
на тему: “Симетричні та асиметричні методи зашифрування інформації”
Виконав:
ст. гр. ІБ-42
Міколяш А. Ф.
Перевірив:
Горпенюк А. Я.
Львів – 2005