МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра автоматики та телемеханіки
Курсова робота
з курсу: „Методи та засоби криптографічних перетворень”
на тему: “Симетричні та асиметричні методи зашифрування інформації”
Львів – 2005
Зміст
Завдання 1
Теоретичні відомості
Вибір ключів
Блок-схема алгоритму
Список ідентифікаторів
Текст програми
Відкритий текст
Результат зашифрування
Висновки
Завдання 2
Теоретичні відомості
Вибір ключів
Зашифрування
Розшифрування
Висновки
Завдання 1
Вибрати ключі та розробити програму для за шифрування файлу даних заданим афінним шифром. Тип афінного шифру визначається останньою цифрою i НЗК. Об‘єм алфавіту визначається передостанньою цифрою j НЗК і дорівнює .
I
i mod 6
Тип афінного шифру
7
1
Лінійний 1-го порядку
j
Розрядність алфавіту
Об‘єм алфавіту
4
9
512
Теоретичні відомості
Афінні шифри- підклас шифрів заміни, що включає, як частковий випадок шифр Віжінера і навіть шифр перестановки з фіксованим періодом.
N-символьний алфавіт ототожнюємо з кільцем . А саме кожна буква замінюється своїм номером у алфавіті, причому нумерація починається з нуля. Наприклад, латинська абетка ототожнюється із , а українська із . Літера а української абетки трактується як нуль, літера б як 1, в як 2. Тепер до букв відкритого тексту ми можемо вільно застосовувати операцію додавання та множення за відповідним модулем.
Лінійний шифр.
Ключі: a таке, що , .
Шифрування. У повідомлені кожна буква заміщується буквою .
Дешифрування. У криптотексті кожна буква заміщуються буквою ,де .
Вибір ключів
Блок-схема алгоритму
Список ідентифікаторів
Ідентифікатори
Призначення
unsigned long a=123
Ключ
unsigned long n=512
Розмір алфавіту
FILE *f_in
Вхідний файл
FILE *f_out
Зашифрований файл
int end_of_in_file=0
Прапорець кінця файлу
int x_is_ready=1
Прапорець готовності символа
unsigned long buf_in
Вхідний буфер (32 біти)
unsigned long buf_out = 0
Вихідний буфер (32 біти)
unsigned long x
Проміжний символ (9 біт)
int in_bits=32
Лічильник непрочитаних бітів вхідного буфера
int out_cells =32
Лічильник незаповнених бітів вихідного буфера
Текст програми
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
unsigned long a=511, n=512; //a – ключ; n – об‘єм алфавіту
void main(void)
{
FILE *f_in, *f_out;
int end_of_in_file=0, x_is_ready=1;
unsigned long buf_in, buf_out = 0, x;
int in_bits=32, out_cells=32;
//відкриваємо вхідний файл
if ( (f_in=fopen(“c:\\data.in”, “rb”)) == NULL )
{
printf(“cannot open the file data.fb”);
getch();
exit(1);
}
else
//відкриваємо вихідний файл
if ( (f_out=fopen(“c:\\data.out”, “wb”)) == NULL )
{
printf(“cannot open the file data.fbc”);
getch();
exit(1);
}
else
{
//читаємо вхідний буфер даних
if (fread(&buf_in, 1, 4, f_in) != 0)
while (!end_of_in_file)
{
//читання символа x з вхідного буфера
if (in_bits<=0)
{
if (fread(&buf_in, 1, 4, f_in) != 0)
{
x |= (buf_in << (9+in_bits)) & 511;
buf_in >>= (-in_bits);
in_bits += 32;
x_is_ready = 1 & !(in_bits==32);
}
else
{
end_of_in_file = 1;
x_is_ready = 1;
}
}
else
{
x = buf_in & 511;
buf_in >>= 9;
in_bits -= 9;
x_is_ready = 1 & (in_bits>=0);
}
//кінець читання символа x з вхідного буфера
if (x_is_ready)
{
//шифрування символа х
x = (unsigned int)(fmod(a*x, n));
printf(“%0x\n”, x);
//запис символа х в вихідний буфер
buf_out |= x << (32-out_cells);
out_cells -= 9;
if (out_cells<=0)
{
fwrite(&buf_out, 4, 1, f_out);//запис вихідного буфера у вихідний файл
buf_out &= 0;
if (out_cells==0) out_cells = 32;
else
{
buf_out |= x >> (9+out_cells);
out_cells += 32;
}
}
}
//кінець запису символа х у вихідний буфер
}
fcloseall();
}
}
Відкритий текст
Методи чисельного розв‘язування систем лінійних рівнянь поділяються на дві групи:
1) „точні” (прямі) методи, які дозволяють одержати розв‘язок, якщо він існує, як скінченну кількість арифметичних операцій (наприклад: метод Крамера, метод н. ана-Гауса та н..);
2) наближені (ітераційні) методи, які дозволяють одержати розв‘язки системи лінійних рівнянь лише з заданою точністю з припущенням, що обчислення проводиться без округлень. Точний розв‘язок в даному випадку можна одержати я к результат нескінченно збіжного процесу. До таких методів відносять метод простої ітерації, метод Зейделя та н..
„Точні” методи використовуються при розв‘язуванні на ЕОМ систем невисокого порядку (n<103 де n – число лінійних алгебраїчних рівнянь системи).
Наближені методи використовуються для систем високого порядку (n=103?106).
Переваги наближених методів (метод простих ітерацій) над точними (метод Гауса) є такими:
1. Час обчислень пропорційний n2 на ітерацію, тоді як для методу виключення час обчислень пропорційний n3. Якщо для розв‘язку потрібно менше ніж n ітерацій, то затрати машинного часу будуть менші.
2. Як правило, похибки округлення при ітераційному методі впливають на остаточні результати значно менше, ніж при розв‘язуванні методом Гауса, оскільки при його використанні похибки не нагромаджуються.
3. Метод ітерацій стає особливо зручним при розв‘язку систем, переважна кількість коефіцієнтів яких дорівнює 0.
Недоліком методу ітерацій є те, що рішення не завжди збігаються.
Метод Гауса
Метод Гауса можна реалізувати у вигляді різних обчислювальних схем, в основі яких лежить одна і та ж ідея послідовного виключення невідомих. Ми розглянемо схему, яка називається схемою єдиного ділення. Обчислювальну схему зручно ілюструвати на прикладі, тому обмежимося системою 4-го порядку. Ці ж прийоми можна застосувати для систем вищих порядків. Розглянемо наступну систему рівнянь:
Результат шифрування
260 454 340 367 58 93 180 363 203 326 222 197 90 485 217 315 336 429 227 212 163 325 117 423 160 50 409 229 422 285 157 263 7 178 24 15 313 357 194 57 120 158 472 138 169 85 389 57 276 48 217 367 202 431 389 143 70 10 20 229 230 93 241 280 406 195 24 372 325 5 337 55 63 487 132 103 438 28 217 469 223 195 455 236 70 477 389 323 257 412 216 207 282 45 417 363 292 48 453 15 329 219 217 117 150 429 286 37 405 509 241 180 140 198 340 372 282 285 241 160 346 65 424 326 261 45 297 195 96 5 158 37 186 299 373 57 96 67 148 15 277 391 384 266 110 304 84 15 313 197 397 57 223 35 344 15 473 509 297 125 459 35 69 492 442 285 97 323 7 35 286 74 58 277 241 180 469 198 212 436 325 511 241 112 479 80 89 362 410 165 497 403 478 432 25 52 213 445 241 28 336 3 63 0 246 288 384 200 7 291 345 372 278 434 177 403 160 178 168 135 452 357 157 443 352 35 232 12 313 45 204 178 63 359 132 103 230 93 477 77 376 193 291 15 329 59 4 263 7 424 360 138 121 85 373 481 352 50 227 426 378 285 1 192 133 183 292 364 90 325 457 303 489 5 453 234 309 331 417 137 336 321 104 362 186 251 217 117 406 280 389 308 58 93 300 363 459 419 99 239 186 451 373 57 257 316 89 207 309 251 373 423 223 133 345 229 390 285 17 137 96 321 280 372 378 93 237 303 10 176 340 399 293 357 34 263 10 48 355 140 442 285 197 509 163 70 25 143 373 125 384 326 90 176 281 276 181 437 277 137 223 306 69 140 442 45 457 303 396 188 468 69 389 93 108 137 253 176 473 495 325 485 277 137 479 394 329 172 479 197 237 363 499 432 340 399 26 181 266 117 90 55 472 172 186 219 497 57 90 306 212 172 58 5 497 403 366 35 216 303 218 85 497 315 90 70 355 170 186 397 337 315 133 176 478 492 421 325 117 77 276 35 104 106 230 405 157 343 257 306 271 340 170 45 241 506 283 451 291 303 458 45 241 426 336 45 271 212 325 45 384 88 90 176 212 308 58 277 241 200 7 291 345 404 169 93 88 125 140 434 281 266 405 509 241 200 7 291 345 372 70 477 217 17 70 429 149 12 425 405 177 443 306 323 405 103 310 405 137 303 396 48 331 468 378 405 277 389 352 35 232 12 313 45 252 412 364 371 409 74 202 327 118 200 7 291 345 116 186 299 337 343 90 424 158 298 213 13 117 143 70 10 20 229 70 477 337 315 336 429 227 212 163 325 117 423 160 50 153 146 230 93 241 334 250 258 152 362 362 397 397 323 96 50 227 116 362 45 297 303 273 301 280 303 442 389 417 343 193 432 334 191 33 251 4 192 140 198 88 63 22 236 180 363 203 311 89 268 202 351 373 97 479 316 335 492 330 485 397 177 336 80 469 74 58 277 241 160 1 459 409 197 506 93 300 363 99 3 472 0 304 331 252 412 127 336 296 239 218 405 237 125 352 50 227 426 378 285 241 300 376 311 89 362 362 397 217 423 193 5 468 69 389 93 48 77 133 304 212 335 405 405 257 315 150 316 340 431 90 485 217 315 213 301 20 101 410 357 241 112 474 490 452 258 449 211 64 484 435 141 241 283 52 477 397 423 160 75 478 460 186 53 277 363 386 70 89 207 309 411 397 263 90 326 164 372 118 411 397 263 90 198 280 495 213 437 137 363 439 48 164 330 442 93 57 125 243 412 408 495 378 93 280 303 429 178 222 239 186 59 400 137 70 301 355 12 452 357 157 443 435 176 26 172 309 205 337 323 376 367 241 475 273 275 308 443 459 176 281 276 181 437 277 137 479 138 280 495 213 5 217 283 306 67 414 239 490 93 360 12 96 178 232 12 425 405 177 443 306 451 325 103 342 45 417 125 96 5 478 364 330 389 241 200 7 291 345 404 309 299 337 343 233 389 271 340 170 389 241 346 160 424 88 335 394 285 157 77 263 178 69 140 442 45 197 303 336 409 484 463 58 245 241 436 129 269 280 185 234 45 241 280 489 261 472 426 138 13 29 389 253 183 212 140 90 397 177 125 283 434 89 108 298 85 17 137 96 306 420 372 150 113 4 263 7 424 360 138 121 125 384 140 90 48 355 52 53 93 137 363 352 178 232 485 170 85 217 157 90 48 335 212 325 93 108 509 140 291 468 229 310 405 237 203 1 141 241 315 273 275 148 343 96 301 212 52 58 165 217 195 96 45 25 362 106 205 337 315 90 55 276 138 330 405 237 57 133 48 89 362 186 131 14 137 336 208 399 242 170 45 257 509 352 50 227 426 378 357 118 300 469 55 350 372 346 397 449 315 479 464 88 335 405 93 137 303 429 306 292 492 421 325 117 77 276 35 104 362 186 99 237 443 429 434 89 108 298 85 17 137 292 304 153 210 186 291 177 363 352 168 409 52 362 20 357 509 150 336 25 15 329 411 397 263 90 454 345 495 6 482 117 95 352 432 0 352 21 357 154 163 110 444 280 495 181 93 460 303 273 301 344 116 410 45 177 363 459 35 168 463 202 359 340 303 439 316 104 239 186 371 397 315 479 80 232 426 250 93 417 383 193 5 468 69 389 45 252 412 129 141 502 227 282 45 417 315 1 419 355 106 474 357 194 315 459 35 104 269 150 437 217 177 233 188 360 495 198 477 117 469 479 444 89 140 442 285 241 160 346 65 424 326 261 205 117 315 459 316 84 330 250 125 384 426 7 296 227 372 218 85 497 315 366 323 222 165 202 191 137 163 352 311 25 244 325 503 373 311 479 163 164 372 326 205 337 489 352 454 89 138 169 85 409 311 352 136 265 59 496 282 417 303 489 451 94 111 186 411 397 263 90 326 212 12 425 405 177 443 306 67 478 428 329 171 397 195 96 148 89 492 325 423 397 57 223 261 408 207 186 99 497 423 130 198 478 396 106 357 314 443 10 35 261 266 213 115 312 8 7 291 345 372 6 482 117 17 160 482 502 227 282 45 417 315 433 80 404 106 186 411 217 383 479 464 472 330 186 165 373 117 193 75 104 362 186 131 241 300 120 203 286 101 202 359 320 125 509 178 414 106 150 53 37 363 203 311 453 372 330 509 237 363 439 304 148 330 250 125 384 300 352 173 148 303 26 357 118 266 110 316 335 268 298 365 337 263 276 176 345 340 186 93 4 315 70 464 88 372 262 199 397 389 96 45 281 394 202 199 217 423 479 429 360 495 86 285 297 77 266 153 291 463 266 93 380 137 406 195 483 111 58 277 473 192 4 444 472 426 138 485 277 389 223 198 217 495 422 277 397 323 193 146 280 165 186 93 380 443 253 188 232 308 425 509 157 389 96 296 271 500 90 429 241 188 396 316 217 15 90 93 48 125 489 70 25 143 213 379 488 177 173 316 276 303 149 93 277 163 223 35 152 330 421 125 117 315 253 40 20 74 90 93 4 77 266 168 212 138 149 93 137 363 96 178 232 140 442 285 297 77 416 326 36 103 342 45 413 32 352 0 256 207 218 285 257 303 203 261 152 362 362 397 397 323 90 261 216 194 6 45 241 426 90 40 325 308 202 45 384 420 1 176 355 140 442 285 317 303 356 444 216 303 218 85 497 315 253 336 84 426 362 357 457 443 70 444 216 148 266 93 300 363 459 419 99 495 86 285 509 363 439 48 217 495 389 445 297 125 150 269 472 446 138 485 277 389 223 198 217 495 230 93 157 263 449 173 153 106 422 285 157 263 7 306 212 492 325 279 237 389 479 394 122 59 0 0
Висновки
Під час виконання даного завдання, я вдосконалив свої знання про афінні шифри та навчився практично реалізовувати шифрування файлу даних лінійним шифром першого порядку з 9-ти бітним алфавітом на мові програмування С. В ході розробки програми виникали певні проблеми з приведенням побайтового зчитування з файлу, яке дозволяє компілятор, до 9-ти бітових символів (згідно з завданням) та подальшою реалізацією побайтового запису. Ця проблема була усунута.
Завдання 2
Зашифрувати Слово відкритого тексту за алгоритмом RSA. Слово визначається останньою буквою і НЗК. Для генерування ключів використати числа p та q, які визначаються передостанньою цифрою j НЗК.
і
Слово
7
СІМ
j
p
q
4
5
11
Теоретичні відомості
Генерування ключів. Вибирають два досить великі прості числа . Для їх добутку значення функції Ойлера дорівнює . Далі випадковим чином вибирають елемент , що не перевищує значення і взаємно простий з ним. Іншими словами, є випадковим елементом із множини . Для за алгоритмом Евкліда знаходять елемент , обернений до в , тобто такий, що і
.
Як результат покладають:
Відкритий ключ:
Таємний ключ:.
Шифрування відбувається блоками. Для цього повідомлення записують у цифровій формі і розбивають на блоки так, що кожен блок позначає число, яке не перевищує . Якщо блок записаний у вигляді двійкового слова довжини , то повинна виконуватись нерівність . Блок розглядається як елемент кільця і як такий, може підноситись до степеня за модулем .
Алгоритм шифрування у системі полягає у піднесені до степеня . Записується це так:
Вибір ключів
Зашифрування
С
І
М
21
11
16
21
11
16
21
11
36
Розшифрування
Висновки
Під час виконання даного завдання я вдосконалив свої знання про асиметричне шифрування кодом RSA та практично здійснив зашифрування та розшифрування слова СІМ. Основною проблемою, яка виникла стало співпадання деяких відкритих та зашифрованих символів. Думаю, це пов‘язано з тим, що використовувалися малі числа (ключ, модуль).